Elasticsearch启动流程概要
v7.6.2
-> Elasticsearch.main 准备各种环境
-> Bootstrap.init(…) 初始化
-> Bootstrap.setup 安装modules
-> Bootstrap.initializeNatives 初始化本地资源
-> Node() 创建node
-> PluginSerice.loadBundles(…) 加载modules
-> new ClusterModule() 创建集群模块
-> NetworkModule 创建网络模块,包括restController
-> CluasterService(…) 创建集群服务
-> INSTANCE.start();
INSTANCE.start() 之前,除开主线程main之外,es就只多出这两个线程
timer 和 scheduler
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYc3mOVU-1591940421737)(en-resource://database/1065:0)]
node.start();
启动所有插件
pluginLifecycleComponents.forEach(LifecycleComponent::start);
启动监控服务
nodeService.getMonitorService().start();
启动集群
nodeConnectionsService.start();
启动资源监听
injector.getInstance(ResourceWatcherService.class).start();
启动网关
injector.getInstance(GatewayService.class).start();
启动客户端
transportService.start();
gatewayMetaState.start(…)
开启发现
discovery.start(); // start before cluster service so that it can set initial
state on ClusterApplierServiceclusterService.start();
开启加入集群
discovery.startInitialJoin();
如果主节点为空
if (clusterState.nodes().getMasterNodeId() == null)
则启动,集群状态观察者
ClusterStateObserver
keepAliveThread.start();
启动完成
知识点:
- 模块化
- 观察者模式
此时的线程:
- timer
- clusterApplieService
- generic * 4
- http_server_worker
- management * 2
- masterService#updateTask
- scheduler
- transport_worker * 2