前面三节讲述了启动之前做的一系列。命令行检查,安全设置,环境变量设置等操作。所有的操作都合法之后,开始执行启动节点。
在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传输服务
下篇继续分析,各个服务之间的关系和每个服务的作用
网友评论