ES启动流程分析

 

启动的代码的入口在Elasticsearch.java中的main()

(暂时先忽略安全相关的部分)

 

1.     注册ErrorListener,用于在启动失败的时候报错

2.     启动ES命令行客户端EnvironmentAwareCommand和对应用来输入输入Terminal

 

//和命令行还有环境相关的操作

3.     创建一个Setting(HashMap),放入一些ES配置(path.conf  path.data …),根据setting创建一个环境变量(包含所有的配置,给命令行使用的)

一些配置文件的路径之类…蛮重要的

 

4.     命令行相关初始化完成之后,最后到跳转到Bootstrap中进行其他操作(init(daemonize, pidFile, quiet, env))

 

 

-------------------------------跳转到Bootstrap类中执行方法------------------------------------------------------

 

INSTANCE = new Bootstrap();

在new Bootstrap时初始化一个keepAlived线程,内部的countDownLatch用于心跳(在之后启动)  -- 这个的作用是为了保证节点运行期间bootstrap会一直存在,可以接受关闭的命令从而退出

 

接着做了一些检查:

         例如SSL加密/CustomConfFile/创建PID文件/Lucene版本/

 

 

                  ----------------Node节点相关!!!---------------------

 

 //初始化一些相关的配置和进行检查

1.     根据Pid和是否守护进程等信息和之前是setting,创建运行时环境environment和pid文件

2.     检查所需要的Lucene jar包(checkLucene())

3.     根据之前的environment,为每个plugin创建本地插件控制器:  spawner

4.     初始化本地资源(主要是native方法进行一些OS调用和JVM信息,比如mlock/系统最大资源数之类的…)

5.     初始化两种probes(探测),将提供给ES start时所需要的一些进程信息和OS层面的信息

6.     检查重复的jar包,并打印在日志中(JarHell.checkJarHell())

 

 

 

//初始化Node(本地节点)

1.     配置一个检查非回路IP的检测

2.     初始化nodeId和nodeName

 

在new NodeEnvironment初始化这个node相关信息

3.     初始化ES各个功能模块的Service和module,并将service和module绑定

 

 

----------------------核心: 真正启动Node和keepalived线程-------------------------

//启动各个module  INSTANCE.start();

Node的启动实际上是node中各个模块的启动,通过guice获取各个module的service接口并启动

 

内部包括了master选举等机制,需要后续文章慢慢分析!

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值