前面三節(jié)講述了啟動(dòng)之前做的一系列。命令行檢查,安全設(shè)置,環(huán)境變量設(shè)置等操作。所有的操作都合法之后,開(kāi)始執(zhí)行啟動(dòng)節(jié)點(diǎn)。
在Bootstrap.java中,有start()方法來(lái)調(diào)用Node.java中的start()方法進(jìn)行節(jié)點(diǎn)啟動(dòng)執(zhí)行,啟動(dòng)執(zhí)行流程如下:
1:通過(guò)代碼Lifecycle.java中的moveToStarted進(jìn)行節(jié)點(diǎn)狀態(tài)的檢測(cè)。
Elasticsearch定義了四種狀態(tài):INITIALIZED,STOPED,STARTED,CLOSED
如果當(dāng)前節(jié)點(diǎn)狀態(tài)為INITALIZED或者STOPED,修改狀態(tài)為STARTED,返回true。如果節(jié)點(diǎn)狀態(tài)為STARTED,返回false.如果節(jié)點(diǎn)為CLOSED狀態(tài),那么拋出異常。

2: pluginLifecycleComponents.forEach(LifecycleComponent::start);
啟動(dòng)所有插件。所有的插件都通過(guò)實(shí)現(xiàn)LifecycleComponent接口,在node啟動(dòng)時(shí),安裝好的插件進(jìn)行啟動(dòng)
3: injector.getInstance(MappingUpdatedAction.class).setClient(client)
設(shè)置MappingUpdatedActionl類中IndicesAdminClient值為NodeClient。MappingUpdatedActionl實(shí)現(xiàn)了動(dòng)態(tài)修改index 的Mapping功能。
4:?injector.getInstance(IndicesService.class).start();? 啟動(dòng)索引服務(wù)
5: injector.getInstance(IndicesClusterStateService.class).start();? 啟動(dòng)集群索引狀態(tài)服務(wù)
6: injector.getInstance(SnapshotsService.class).start(); 啟動(dòng)快照服務(wù)
7:injector.getInstance(SnapshotShardsService.class).start(); 啟動(dòng)分片快照服務(wù)
8:injector.getInstance(RoutingService.class).start(); 啟動(dòng)路由服務(wù)
9:nodeService.getMonitorService().start(); 啟動(dòng)監(jiān)控服務(wù)
10:injector.getInstance(ResourceWatcherService.class).start(); 啟動(dòng)資源監(jiān)控服務(wù)
11:injector.getInstance(GatewayService.class).start(); 啟動(dòng)網(wǎng)關(guān)服務(wù)
12:transportService.start(); 啟動(dòng)transport服務(wù)?
13:discovery.start(); 啟動(dòng)節(jié)點(diǎn)發(fā)現(xiàn)服務(wù)
14:clusterService.start(); 啟動(dòng)集群服務(wù)
15:discovery.startInitialJoin(); 啟動(dòng)節(jié)點(diǎn)join服務(wù)
16:injector.getInstance(HttpServerTransport.class).start(); 啟動(dòng)Http傳輸服務(wù)
下篇繼續(xù)分析,各個(gè)服務(wù)之間的關(guān)系和每個(gè)服務(wù)的作用