【Elasticsearch源码】节点的启动和关闭流程分析

1 Node的启动流程

节点的启动整体流程如下所示:
在这里插入图片描述

2 启动过程分析

启动入口: 通过启动脚本bin/elasticsearch启动ES,在distribution模块中的/src/bin目录下面,脚本先载入了jvm配置文件jvm.options。最后启动org.elasticsearch.bootstrap.Elasticsearch这个主类中的main方法。

  exec \     #执行命令
    "$JAVA" \   #Java程序路径
    $ES_JAVA_OPTS \   #JVM选项
    -Des.path.home="$ES_HOME" \   #设置path.home路径
    -Des.path.conf="$ES_PATH_CONF" \  #设置path.conf路径
    -Des.distribution.flavor="$ES_DISTRIBUTION_FLAVOR" \  
    -Des.distribution.type="$ES_DISTRIBUTION_TYPE" \
    -cp "$ES_CLASSPATH" \  #设置java classpath
    org.elasticsearch.bootstrap.Elasticsearch \   #指定main函数所在类
    "$@"    #传递给main函数命令行参数

main方法中首先添加了shutdown Hook,以便在close的时候清理关闭资源:

在JVM里面添加关闭的shutdown Hook,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的shutdown Hook,当系统执行完这些shutdown Hook后,jvm才会关闭。
所以这些shutdown Hook可以在jvm关闭的时候进行内存清理、对象销毁等操作。

Runtime.getRuntime().addShutdownHook(shutdownHookThread);

然后检查了ES的3个环境参数:

putSystemPropertyIfSettingIsMissing(settings, "path.data", "es.path.data");
putSystemPropertyIfSettingIsMissing(settings, "path.home", "es.path.home");
putSystemPropertyIfSettingIsMissing(settings, "path.logs", "es.path.logs");

所有的检查做完后,代码进入到Bootstrap#init方法,Bootstrap类完成了elasticsearch的启动。

  1. 先初始化一个Bootstrap实例;
  2. 加载安全配置;
  3. 配置log输出器;
  4. 创建pid文件,会在磁盘上持久化一个记录应用pid的文件;
  5. 调用Bootstrap的setup方法和start方法

setup方法主要:初始化环境配置,添加关闭shutdown Hook,检查jar包冲突,配置日志输出器,通过environment初始化Node实例。

start方法主要:启动已经实例化的Node,启动keepAliveThread 线程。

    private void start() throws NodeValidationException {
   
        node.start();
        keepAliveThread
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值