配置 Elasticsearch 集群涉及到多个方面,包括但不限于集群名称设定、节点角色分配、网络配置、数据存储路径、内存设置、性能优化、安全性配置等。以下是一份详细的 Elasticsearch 集群配置实战指南:
1. 集群名称(cluster.name
)
在每个节点的 elasticsearch.yml
文件中指定相同的集群名称,使得具有相同名称的节点能够自动组成一个集群。确保不同环境下的集群使用不同的名称,以避免节点加入错误的集群。
cluster.name: my_production_cluster
2. 节点名称与角色(node.name
、node.roles
)
为每个节点指定一个唯一的名称,方便识别和管理:
node.name: node1
定义节点在集群中的角色。常见的角色包括:
master
: 参与主节点选举,负责集群的元数据管理和变更。data
: 存储数据分片。ingest
: 执行数据摄取管道。ml
: 支持机器学习任务。transform
: 支持数据转换任务。coordinating
: 负责将客户端请求路由至合适的节点。
根据需要为节点分配角色:
node.roles: [master, data, ingest]
3. 网络配置
监听地址(network.host
)
设置节点监听的网络接口(IP 地址或主机名),允许外部访问时可设置为 0.0.0.0
或指定的 IP 地址:
network.host: 0.0.0.0
HTTP端口(http.port
)
指定 Elasticsearch HTTP 服务监听的端口,默认为 9200
:
http.port: 9200
传输端口(transport.port
)
Elasticsearch 内部节点间通信使用的端口,默认为 9300
。除非有特殊需求,通常无需改动:
transport.port: 9300
4. 数据与日志存储
数据路径(path.data
)
指定 Elasticsearch 数据文件的存储路径:
path.data: /mnt/data/elasticsearch
日志路径(path.logs
)
指定 Elasticsearch 日志文件的存储路径:
path.logs: /var/log/elasticsearch
5. 内存设置
JVM堆大小(heap.size
)
根据服务器内存大小合理设置 JVM 堆大小。通常推荐堆大小不超过服务器总内存的 50%,并保留足够的内存给操作系统和其他进程:
# 示例:为 32GB 内存服务器设置 16GB 堆大小
-Xms16g
-Xmx16g
锁定内存(bootstrap.memory_lock
)
避免 JVM 分页到磁盘,提升性能。在生产环境中建议开启,但需要操作系统支持:
bootstrap.memory_lock: true
6. 性能优化
线程池(thread_pool.*
)
根据工作负载调整线程池大小、队列长度、拒绝策略等,优化集群性能:
thread_pool.bulk.queue_size: 500
分片分配与恢复(cluster.routing.*
、indices.recovery.*
)
配置 shard 分配策略、节点负载均衡、副本分配偏好、恢复速度限制等,优化集群资源使用和数据恢复效率:
cluster.routing.allocation.node_concurrent_recoveries: 4
indices.recovery.max_bytes_per_sec: "40mb"
断路器(indices.breaker.*
)
设置内存使用阈值,防止 Elasticsearch 因内存压力而崩溃:
indices.breaker.fielddata.limit: "60%"
7. 安全性
启用并配置 Elasticsearch 安全特性,包括身份验证、授权、TLS 加密等:
xpack.security.enabled: true
详细的安全配置请参考 Elasticsearch 安全性官方文档。
8. 插件与模块
列出需要在启动时加载的插件:
plugins:
- analysis-icu
9. 日志与调试
配置日志级别、输出格式、轮转策略等:
logger.discovery: TRACE
10. 高级设置
-
集群健康检查(
discovery.zen.minimum_master_nodes
)- 设置确保集群健康所需的最小主节点数,防止脑裂。
-
跨域资源共享(
http.cors.*
)- 如果需要从其他域访问 Elasticsearch,配置 CORS 设置以允许跨域请求。
-
慢查询日志(
slowlog.*
)- 配置记录慢查询的阈值和输出路径,用于性能调优。
完成配置后,重启 Elasticsearch 服务以应用新的配置。在生产环境中,建议对配置文件进行版本控制,并在升级 Elasticsearch 版本时检查是否有配置变更。定期监控集群状态和日志,根据实际运行情况调整配置。