程序员

Elasticsearch 源码分析 :节点启动

2018-11-02  本文已影响25人  特例独行的猪

前面三节讲述了启动之前做的一系列。命令行检查,安全设置,环境变量设置等操作。所有的操作都合法之后,开始执行启动节点。

在Bootstrap.java中,有start()方法来调用Node.java中的start()方法进行节点启动执行,启动执行流程如下:

1:通过代码Lifecycle.java中的moveToStarted进行节点状态的检测。

Elasticsearch定义了四种状态:INITIALIZED,STOPED,STARTED,CLOSED

如果当前节点状态为INITALIZED或者STOPED,修改状态为STARTED,返回true。如果节点状态为STARTED,返回false.如果节点为CLOSED状态,那么抛出异常。

2: pluginLifecycleComponents.forEach(LifecycleComponent::start);

启动所有插件。所有的插件都通过实现LifecycleComponent接口,在node启动时,安装好的插件进行启动

3: injector.getInstance(MappingUpdatedAction.class).setClient(client)

设置MappingUpdatedActionl类中IndicesAdminClient值为NodeClient。MappingUpdatedActionl实现了动态修改index 的Mapping功能。

4: injector.getInstance(IndicesService.class).start();  启动索引服务

5: injector.getInstance(IndicesClusterStateService.class).start();  启动集群索引状态服务

6: injector.getInstance(SnapshotsService.class).start(); 启动快照服务

7:injector.getInstance(SnapshotShardsService.class).start(); 启动分片快照服务

8:injector.getInstance(RoutingService.class).start(); 启动路由服务

9:nodeService.getMonitorService().start(); 启动监控服务

10:injector.getInstance(ResourceWatcherService.class).start(); 启动资源监控服务

11:injector.getInstance(GatewayService.class).start(); 启动网关服务

12:transportService.start(); 启动transport服务 

13:discovery.start(); 启动节点发现服务

14:clusterService.start(); 启动集群服务

15:discovery.startInitialJoin(); 启动节点join服务

16:injector.getInstance(HttpServerTransport.class).start(); 启动Http传输服务

下篇继续分析,各个服务之间的关系和每个服务的作用

上一篇 下一篇

猜你喜欢

热点阅读