[2]elasticsearch源码深入分析——启动过程(Bootstrap)

本篇为elasticsearch源码分析系列文章的第二篇,由于技术不精,而叙述的不好或不对的地方还请大家指出 ^ _ ^!!!

源码主要模块

distribution:elasticsearch的打包发行相关,将elasticsearch打成各种发行包(zip,deb,rpm,tar)的模块。具体用法如是,在相应的发行版本模块下执行publishToMavenLocal这个Task,如果执行成功的话就会在路径build/distributions下生成对应的发行包,这种打好的包就能在生产服务器上运行。如下图所示:

通过distribution模块打包发行版本.png

core:核心包,elasticsearch的源码主要在这个里面

buildSrc:elasticsearch的构建相关的代码

client:作为连接elasticsearch的客户端相关代码,接口如下图:

client

modules:作为elasticsearch除核心外的必备模块相关代码,结构如下图:

modules

plugins:作为elasticsearch必备的插件的相关代码,结构如下图:

plugins

启动入口

在上面提到的distribution模块中的src/main/resources/bin路径下能看到elasticsearch的启动脚本。如下图所示:

elasticsearch启动脚本

脚本先载入了jvm配置文件jvm.options(在我们下载解约的发行包的config文件夹中)

ES_JVM_OPTIONS="$ES_PATH_CONF"/jvm.options

然后载入我们在Run/Debug Configurations中配置的VM参数。

-Des.path.conf=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Des.path.home=D:\seymour\elasticsearch\elasticsearch-6.0.0-rc2
-Dlog4j2.disable.jmx=true

最后启动org.elasticsearch.bootstrap.Elasticsearch这个主类中的main方法。

main方法首先添加了关闭钩子,

关闭钩子

然后配置日志输出器,

日志输出器

然后检查了elasticsearch的三个环境参数:

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

所有的检查做完后,代码流转到了*org.elasticsearch.bootstrap.Bootstrap
*类的init()方法,而正是Bootstrap类完成了elasticsearch的启动

Bootstrap.init(!daemonize, pidFile, quiet, initialEnv);

Bootstrap类

下面我们来看一下Bootstrap中的几个重要方法:

init
init(final boolean foreground,final Path pidFile,final boolean quiet,final Environment initialEnv) throws BootstrapException, NodeValidationException, UserException

这个方法不用说也知道是做了一些启动前的初始化工作

参数详解

  • foreground:标识elasticsearch是否是作为后台守护进程启动的,
  • pidFile:通过parser解析args后得到,实际是解析了默认命令行参数(verbose,E,silent,version,help,quiet,daemonize,pidfile)
  • quiet:同上
  • initialEnv:Environment实例化的环境参数对象,保存了一些类似于repoFile,configFile,pluginsFile,binFile,libFile等参数。

主要工作

  • 首先会实例化一个Bootstrap对象
  • 配置log输出器
  • 创建pid文件,会在磁盘上持久化一个记录应用pid的文件
  • 通过参数foreground和quiet来控制日志输出
  • 调用Bootstrap的setup方法和start方法
setup
setup(boolean addShutdownHook, Environment environment)throws BootstrapException 

主要工作

  • 通过environment生成本地插件控制器


  • 初始化本地资源


  • 在安全管理器安装之前初始化探针


  • 添加关闭钩子


  • 检查jar重复


  • 在安全管理器安装之前配置日志输出器


  • 安装安全管理器


  • 通过参数environment实例化Node


start
start() throws NodeValidationException 

主要工作

  • 启动已经实例化的Node
  • 启动keepAliveThread 线程,这个线程在Bootstrap初始化的时候就已经实例化了,该线程创建了一个计数为1的CountDownLatch,目的是在启动完成后能顺利添加关闭钩子,而这句:

意思就是在jvm中增加一个关闭的钩子,当jvm关闭的时候,会执行系统中已经设置的所有通过方法addShutdownHook添加的钩子,当系统执行完这些钩子后,jvm才会关闭。所以这些钩子可以在jvm关闭的时候进行内存清理、对象销毁等操作。

可以看到启动的重点在setup方法中,启动过后就是Node的事了。

Node类

Node是通过NodeBuilder来实例化的,使用google的注入框架Guice的Injector进行注入与获取实例。elasticsearch里面的组件都是用上面的方法进行模块化管理,elasticsearch对guice进行了封装,通过ModulesBuilder类构建elasticsearch的模块:


Node的启动就是Node里每个组件的启动,同样的,分别调用不同的的start方法来启动这个组件,如下

至此elasticsearch就启动完成了,后面我会继续讲解elasticsearch细节内容,请大家多多支持 ^ _ ^ !!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容