[2]elasticsearch源碼深入分析——啟動(dòng)過程(Bootstrap)

本篇為elasticsearch源碼分析系列文章的第二篇坦仍,由于技術(shù)不精鳍烁,而敘述的不好或不對(duì)的地方還請(qǐng)大家指出 ^ _ ^!!!

源碼主要模塊

distribution:elasticsearch的打包發(fā)行相關(guān),將elasticsearch打成各種發(fā)行包(zip繁扎,deb幔荒,rpm,tar)的模塊。具體用法如是恬叹,在相應(yīng)的發(fā)行版本模塊下執(zhí)行publishToMavenLocal這個(gè)Task怕享,如果執(zhí)行成功的話就會(huì)在路徑build/distributions下生成對(duì)應(yīng)的發(fā)行包,這種打好的包就能在生產(chǎn)服務(wù)器上運(yùn)行姚垃。如下圖所示:

通過distribution模塊打包發(fā)行版本.png

core:核心包,elasticsearch的源碼主要在這個(gè)里面

buildSrc:elasticsearch的構(gòu)建相關(guān)的代碼

client:作為連接elasticsearch的客戶端相關(guān)代碼盼忌,接口如下圖:

client

modules:作為elasticsearch除核心外的必備模塊相關(guān)代碼积糯,結(jié)構(gòu)如下圖:

modules

plugins:作為elasticsearch必備的插件的相關(guān)代碼,結(jié)構(gòu)如下圖:

plugins

啟動(dòng)入口

在上面提到的distribution模塊中的src/main/resources/bin路徑下能看到elasticsearch的啟動(dòng)腳本谦纱。如下圖所示:

elasticsearch啟動(dòng)腳本

腳本先載入了jvm配置文件jvm.options(在我們下載解約的發(fā)行包的config文件夾中)

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options

然后載入我們?cè)赗un/Debug Configurations中配置的VM參數(shù)看成。

-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true

最后啟動(dòng)org.elasticsearch.bootstrap.Elasticsearch這個(gè)主類中的main方法。

main方法首先添加了關(guān)閉鉤子跨嘉,

關(guān)閉鉤子

然后配置日志輸出器绍昂,

日志輸出器

然后檢查了elasticsearch的三個(gè)環(huán)境參數(shù):

    putSystemPropertyIfSettingIsMissing(settings, "path.data", "es.path.data");
    putSystemPropertyIfSettingIsMissing(settings, "path.home", "es.path.home");
    putSystemPropertyIfSettingIsMissing(settings, "path.logs", "es.path.logs");

所有的檢查做完后,代碼流轉(zhuǎn)到了*org.elasticsearch.bootstrap.Bootstrap
*類的init()方法,而正是Bootstrap類完成了elasticsearch的啟動(dòng)

Bootstrap.init(!daemonize, pidFile, quiet, initialEnv);

Bootstrap類

下面我們來看一下Bootstrap中的幾個(gè)重要方法:

init
init(final boolean foreground,final Path pidFile,final boolean quiet,final Environment initialEnv) throws BootstrapException, NodeValidationException, UserException

這個(gè)方法不用說也知道是做了一些啟動(dòng)前的初始化工作

參數(shù)詳解

  • foreground:標(biāo)識(shí)elasticsearch是否是作為后臺(tái)守護(hù)進(jìn)程啟動(dòng)的窘游,
  • pidFile:通過parser解析args后得到唠椭,實(shí)際是解析了默認(rèn)命令行參數(shù)(verbose,E,silent忍饰,version贪嫂,help,quiet艾蓝,daemonize力崇,pidfile)
  • quiet:同上
  • initialEnv:Environment實(shí)例化的環(huán)境參數(shù)對(duì)象,保存了一些類似于repoFile赢织,configFile亮靴,pluginsFile,binFile于置,libFile等參數(shù)茧吊。

主要工作

  • 首先會(huì)實(shí)例化一個(gè)Bootstrap對(duì)象
  • 配置log輸出器
  • 創(chuàng)建pid文件,會(huì)在磁盤上持久化一個(gè)記錄應(yīng)用pid的文件
  • 通過參數(shù)foreground和quiet來控制日志輸出
  • 調(diào)用Bootstrap的setup方法和start方法
setup
setup(boolean addShutdownHook, Environment environment)throws BootstrapException 

主要工作

  • 通過environment生成本地插件控制器


  • 初始化本地資源


  • 在安全管理器安裝之前初始化探針


  • 添加關(guān)閉鉤子


  • 檢查jar重復(fù)


  • 在安全管理器安裝之前配置日志輸出器


  • 安裝安全管理器


  • 通過參數(shù)environment實(shí)例化Node


start
start() throws NodeValidationException 

主要工作

  • 啟動(dòng)已經(jīng)實(shí)例化的Node
  • 啟動(dòng)keepAliveThread 線程八毯,這個(gè)線程在Bootstrap初始化的時(shí)候就已經(jīng)實(shí)例化了搓侄,該線程創(chuàng)建了一個(gè)計(jì)數(shù)為1的CountDownLatch,目的是在啟動(dòng)完成后能順利添加關(guān)閉鉤子话速,而這句:

意思就是在jvm中增加一個(gè)關(guān)閉的鉤子讶踪,當(dāng)jvm關(guān)閉的時(shí)候,會(huì)執(zhí)行系統(tǒng)中已經(jīng)設(shè)置的所有通過方法addShutdownHook添加的鉤子泊交,當(dāng)系統(tǒng)執(zhí)行完這些鉤子后乳讥,jvm才會(huì)關(guān)閉。所以這些鉤子可以在jvm關(guān)閉的時(shí)候進(jìn)行內(nèi)存清理廓俭、對(duì)象銷毀等操作云石。

可以看到啟動(dòng)的重點(diǎn)在setup方法中,啟動(dòng)過后就是Node的事了白指。

Node類

Node是通過NodeBuilder來實(shí)例化的,使用google的注入框架Guice的Injector進(jìn)行注入與獲取實(shí)例酵紫。elasticsearch里面的組件都是用上面的方法進(jìn)行模塊化管理告嘲,elasticsearch對(duì)guice進(jìn)行了封裝,通過ModulesBuilder類構(gòu)建elasticsearch的模塊:


Node的啟動(dòng)就是Node里每個(gè)組件的啟動(dòng)奖地,同樣的橄唬,分別調(diào)用不同的的start方法來啟動(dòng)這個(gè)組件,如下

至此elasticsearch就啟動(dòng)完成了,后面我會(huì)繼續(xù)講解elasticsearch細(xì)節(jié)內(nèi)容参歹,請(qǐng)大家多多支持 ^ _ ^ !!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仰楚,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僧界,老刑警劉巖侨嘀,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捂襟,居然都是意外死亡咬腕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門葬荷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涨共,“玉大人,你說我怎么就攤上這事宠漩【俜矗” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵扒吁,是天一觀的道長火鼻。 經(jīng)常有香客問我,道長瘦陈,這世上最難降的妖魔是什么凝危? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮晨逝,結(jié)果婚禮上蛾默,老公的妹妹穿的比我還像新娘。我一直安慰自己捉貌,他們只是感情好支鸡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趁窃,像睡著了一般牧挣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上醒陆,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天瀑构,我揣著相機(jī)與錄音,去河邊找鬼刨摩。 笑死寺晌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澡刹。 我是一名探鬼主播呻征,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼罢浇!你這毒婦竟也來了陆赋?” 一聲冷哼從身側(cè)響起沐祷,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎攒岛,沒想到半個(gè)月后赖临,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阵子,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年思杯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挠进。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡色乾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出领突,到底是詐尸還是另有隱情暖璧,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布君旦,位于F島的核電站澎办,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏金砍。R本人自食惡果不足惜局蚀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望恕稠。 院中可真熱鬧琅绅,春花似錦、人聲如沸鹅巍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骆捧。三九已至澎羞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敛苇,已是汗流浹背妆绞。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枫攀,地道東北人括饶。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像脓豪,于是被迫代替她去往敵國和親巷帝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子忌卤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理扫夜,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評(píng)論 6 342
  • 畢業(yè)10年了笤闯,終于下了決定換了個(gè)新公司堕阔。初來乍到新公司,kick off一個(gè)新的ES項(xiàng)目颗味,打算借此機(jī)會(huì)去研究一下E...
    華安火車迷閱讀 2,815評(píng)論 4 14
  • 我現(xiàn)在就付諸行動(dòng) 我的幻想毫無價(jià)值超陆,我的計(jì)劃渺如塵埃,我的目標(biāo)不可能達(dá)到浦马。 一切的一切毫無意義时呀,除非我付諸行動(dòng)。我...
    蘇北玄天一片云閱讀 413評(píng)論 0 0
  • 無青樹翠山晶默,一樣細(xì)雨緲萬里谨娜。看紫曉烏夕磺陡,相同心落廣寒宮趴梢。
    葉芙蓋妮婭瑪爾斯閱讀 553評(píng)論 0 0