背景
ES的版本迭代较快每个版本启动和运行方式有所差异,本文以6.4.2版本说明。
6.4.2版本下载地址:https://www.elastic.co/downloads/elasticsearch
启动步骤
ES启动是通过下载包的 ./bin/elasticsearch叫本进行启动的。脚本定义了一些es和java的默认参数。可以通过修改脚本参数内容方式启动,控制台运行,比如修改esJVM大小等等。
Elasticsearch启动后 Elasticsearch类解析
Elasticsearch类启动时候运行main()函数,如下:
Elasticsearch初始化各种Option
Elasticsearch内部
解释:
- 运行System.setSecurityManager 配置默认管理器,默认使用的是 $JAVA_HOME/jre/lib/security/java.policy
- 注册Errorlistener,LogConfigurator.registerErrorListener();用于在失败的时候报错。
1 | /** |
- 启动Elasticsearch命令行客户端EnvironmentAwareCommand和对应用来输入Terminal
Elasticsearch
1 | static int main(final String[] args, final Elasticsearch elasticsearch, final Terminal terminal) throws Exception { |
EnvironmentAwareCommand
1 |
|
Elasticsearch
1 |
|
创建Setting(HashMap)设置Elasticsearch配置
进行命令行相关的设置,初始化之后,跳转到Bootstrap中进行操作 init
Elasticsearch
1 |
|
Bootstrap内部
- 初始化一个KeepAlive线程,内部的countDownLatch用于启动之后的心跳。保证节点运行期间Bootstrap一直存在。可以接受相关的命令退出
- 做了一些检查,SSL加密customConfFile
- 创建PID文件
- checkLucene版本
1 | /** |
Node节点
- 根据Pid和是否守护进程等信息和之前是setting,创建运行时环境environment和pid文件。
- 检查所需的Lucene jar包
- 根据之前的environment,为每个plugin创建本地插件控制器:spawner
- 初始化本地资源(native方法进行一些OS调用和JVM信息,比如mlock/系统最大资源之类的)
- 初始化两种probes(探测),将提供给ES start时所需的一些进程信息和OS层面信息。
- 检查重复的jar包,并打印在日志中(JarHell.checkJarHell())
初始化Node节点(本地节点)
- 配置一个检查非回路的IP监测点
- 初始化nodeId和nodeName(new NodeEnvironment)
- 促使华ES各个功能模块的Service和module,并将service和module绑定
核心:真正启动Node和keeplive线程
node启动是在node中各个模块的胡同,通过guice获取各个module的service接口并启动
内部包括了master选举机制等。