Elasticsearch 自管理集群配置指南
一、概述
Elasticsearch 内置了优化的默认配置,开箱后仅需极少配置即可使用。绝大多数设置项,都可以在集群运行期间通过集群更新设置 API 进行修改。
配置文件中,应仅存放节点专属配置(如节点名称 node.name、文件路径配置),以及节点加入集群必需的核心配置(如集群名称 cluster.name、网络主机地址 network.host)。
注意
本文仅说明自管理 Elasticsearch 集群的配置方法,其他部署类型需通过不同步骤完成配置。
-
如需了解其他部署类型下
elasticsearch.yml的配置方式,可参考 Elastic Stack 配置设置文档; -
JVM 与 log4j 配置并非在所有部署类型中都支持开放配置。如需了解在 Kubernetes 上的 Elastic Cloud 中如何配置受限的 JVM 参数,可参考计算资源管理文档。
二、可用配置项参考
-
如需查看 Elasticsearch 集群支持的全量配置项清单,可参考 Elasticsearch 配置参考文档;
-
如需了解生产环境集群上线前必须完成的核心配置项,可参考关键配置项文档。
三、配置文件说明
Elasticsearch 包含三类核心配置文件,具体如下:
-
elasticsearch.yml:Elasticsearch 核心功能配置文件 -
jvm.options:Elasticsearch JVM 虚拟机参数配置文件 -
log4j2.properties:Elasticsearch 日志行为配置文件
上述文件默认存放于配置目录(config 目录)中,其默认路径取决于你的安装方式:归档发行版(tar.gz/zip 包)或软件包发行版(Debian/RPM 包)。
3.1 归档发行版
归档发行版的配置目录,默认路径为 $ES_HOME/config。
你可以通过 ES_PATH_CONF 环境变量修改配置目录路径,示例如下:
Bash
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
此外,你也可以通过命令行,或 Shell 配置文件(profile)导出 ES_PATH_CONF 环境变量,完成路径配置。
3.2 软件包发行版
软件包发行版的配置目录,默认路径为 /etc/elasticsearch。
你同样可以通过设置 ES_PATH_CONF 环境变量修改配置目录路径,但仅在 Shell 中设置环境变量无法生效,该变量需从以下对应文件中加载读取:
-
Debian 系统:
/etc/default/elasticsearch -
RPM 系统:
/etc/sysconfig/elasticsearch
你需要编辑对应系统文件中的 ES_PATH_CONF=/etc/elasticsearch 配置项,修改后即可生效。
3.3 配置文件格式规范
elasticsearch.yml 采用 YAML 格式编写,以下为修改数据与日志目录路径的配置示例:
YAML
path:
data: /var/lib/elasticsearch
logs: /var/log/elasticsearch
配置项也支持扁平化写法,示例如下:
YAML
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
在 YAML 语法中,非标量值支持以序列格式编写,示例如下:
YAML
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
非标量值也支持以数组格式编写(使用频率较低),示例如下:
YAML
discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]
3.4 环境变量替换规则
在 elasticsearch.yml 配置文件中,使用 ${...} 语法引用的环境变量,会在服务启动时自动替换为对应环境变量的实际值,示例如下:
YAML
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
环境变量的值必须为简单字符串;如需传入列表类型的配置值,可使用英文逗号分隔的字符串,组件会自动完成解析。例如通过以下命令设置环境变量,Elasticsearch 会自动将 ${HOSTNAME} 的值拆分为列表格式:
Bash
export HOSTNAME="host1,host2"
默认情况下,若组件启动时,配置文件中引用的环境变量不存在,配置校验会直接失败。如需规避该问题,可使用 ${环境变量名:默认值} 语法为环境变量设置兜底默认值。
四、集群与节点设置类型
集群与节点设置,根据配置方式与生效规则,可分为以下两大类:
4.1 动态设置
动态设置支持两种配置方式:
-
在集群运行期间,通过集群更新设置 API 配置和更新;
-
在未启动或已关闭的节点上,通过本地
elasticsearch.yml文件配置。
通过集群更新设置 API 执行的更新,可分为两种生效类型:
-
持久化设置:配置永久生效,集群重启后仍会保留;
-
临时设置:配置临时生效,集群重启后会自动重置。
你也可以通过 API 给临时/持久化设置赋值为 null,实现对应配置项的重置。
配置优先级规则
若你通过多种方式配置了同一个设置项,Elasticsearch 会按照以下优先级从高到低加载配置,高优先级配置会覆盖低优先级配置:
-
临时设置
-
持久化设置
-
elasticsearch.yml文件配置 -
配置项默认值
例如:你可以通过临时设置,覆盖已配置的持久化设置或 elasticsearch.yml 文件配置;但修改 elasticsearch.yml 文件配置,无法覆盖已定义的临时或持久化设置。
警告
我们不再推荐使用集群临时设置,建议改用集群持久化设置。当集群运行状态不稳定时,临时设置可能会意外清空,进而导致集群配置不符合预期,引发运行风险。
在自管理集群中,动态集群设置建议优先通过集群更新设置 API 配置 ,elasticsearch.yml 仅用于配置静态集群设置和节点专属设置。API 配置无需重启节点,且能保证配置值在集群所有节点上完全一致。
4.2 静态设置
静态设置仅支持在未启动或已关闭的节点上,通过 elasticsearch.yml 文件配置,且必须在集群内所有相关节点上统一配置后才能生效。
五、更多配置主题指引
如需了解 Elasticsearch 核心配置任务的实操方法,可参考以下对应文档:
-
安全配置:了解安全特性相关配置,防范恶意攻击者篡改数据,实现集群进出流量及内部通信的加密;
-
集群与部署用户管理:完成集群的身份认证与权限授权配置,了解 Elasticsearch 用于内部及跨服务请求认证、授权的底层安全技术;
-
Elastic API 密钥:为程序访问部署实例与 Elasticsearch 资源,配置身份认证与权限授权;
-
连接器:管理 Elastic 与第三方系统之间的连接信息;
-
远程集群:开启 Elasticsearch 集群间通信,支撑跨集群复制与跨集群搜索能力;
-
Elasticsearch 节点扩缩容:了解如何添加/移除节点,调整集群的规模与处理能力;
-
生产环境部署指南:参考相关最佳实践与指导建议,设计符合业务负载、安全策略与部署需求的生产环境。