面试题答案
一键面试配置加载
- 读取配置文件:Elasticsearch 会读取
elasticsearch.yml
等配置文件,获取诸如集群名称、节点名称、网络设置、数据存储路径等基本配置。这确定了节点在集群中的身份及基础运行参数,如集群名称决定了该节点会尝试加入哪个集群。 - 环境变量解析:解析系统环境变量,这些变量可覆盖或补充配置文件中的设置。例如通过环境变量动态调整一些运行时参数,增强部署灵活性。
插件加载
- 发现插件:扫描
plugins
目录,识别已安装的插件。插件能为 Elasticsearch 扩展各种功能,如分析器插件、监控插件等。 - 初始化插件:对发现的插件进行初始化操作,使其能与 Elasticsearch 核心功能集成。这确保了节点具备额外功能,如某些插件提供自定义的搜索算法。
节点角色确定
- 角色配置解析:根据配置文件确定节点角色,如
master
、data
、ingest
等角色。不同角色承担不同职责,master
节点负责集群状态管理,data
节点负责数据存储和检索,角色确定决定了节点后续参与集群工作的方式。
内存分配
- 堆内存设置:根据
jvm.options
配置文件设置 Java 堆内存大小。合适的堆内存大小对 Elasticsearch 性能至关重要,过小可能导致频繁垃圾回收影响性能,过大可能引发 OOM(OutOfMemory)错误。
网络初始化
- 绑定网络地址:根据配置绑定节点的网络地址和端口。这使得节点能够与其他节点进行通信,如集群内节点间的状态同步,以及对外提供服务,接受客户端请求。
数据目录初始化
- 检查与创建:检查配置的数据存储目录是否存在,若不存在则创建。数据目录用于存储索引数据等重要信息,初始化该目录为数据持久化提供基础。
集群状态初始化
- 尝试加入集群:若配置为加入现有集群,节点会通过集群种子节点列表尝试连接集群。获取并加载集群状态信息,了解集群中其他节点及索引等状态,为后续参与集群协作做准备。
- 创建新集群(若为新集群):若节点配置为创建新集群,会初始化集群状态,包括创建初始的集群元数据等,开启新集群的运行。