接下来开始Bootstrap模块的分析,目录如下,
1. Debug开启
2. Node启动
Debug开启
es的bootstrap如下,
bootstrap模块
里面Elasticsearch.java上有main()方法,通过其来启动es集群。而main()方法的调用是通过elasticsearch.sh
这个脚本里面的java -cp
es集群的启动脚本
elasticsearch.sh
其中start
是第一个手输入参;$@
是脚本的所有参数汇总;<&-
是输入重定向;&
是设置为后台进程。
main入口
由此进入Elasticsearch的main(),初始化Bootstrap,之前的start
在这里是一个识别的作用,是start还是version;在初始化bootstrap过程中,需要初始化env,如果在Windows本机下逐步debug,需要设置path.home
或者set env
environment
至此,可以通过main function来在Windows系统下进行debug。
9200_snapshot
console
console显示的cluster.name
和node.name
是在elasticsearch.yml
配置,建议自定义,不然es分配的默认值不利于辨识。另外,出现了一个异常,后续会讲到。
Type | Default | Custom |
---|---|---|
cluster.name |
elasticsearch | your custom |
node.name |
random hero name | your custom |
Node启动
es集群的启动,通过Elasticsearch.main -> bootstrap.init即可,中间会涉及es绝大部分模块(plugin,setting,cluster,transport等)的初始化和相关功能服务(mapping,index,search,routing等)的注入。其主要步骤如下,
- CLIParser,检测CLI命令行环境
- instance = new Bootstrap,新建一个bootstrap实例(实例由node,keepAlive组成)
- prepare Environment,构建es env
- initialSettings,settings是environment的一个属性
- instance.setup,根据environment配置bootstrap实例的node属性
- node -> nodeBuilder.build = new Node
- node constructor
- threadpool
- modules.add,根据environment将各具体module类加入到ModulesBuilder中,然后使其产生injector
- pluginService
- injector
- client
bootstrap instance的node初始化构造
- instance.start,启动bootstrap实例
- node.start
- injector.getInstance.start,通过DI的方式将node的具体功能function挂靠在该node的injector上
- keepAliveThread.start
- node.start
injector注入
至此,es集群搭建起来了。搭建过程中所涉及的modules和function将在之后展开;另外es通过暴露client的方式将其一系列的功能开放出去。
client接口