服务器
怎么用三台服务器构建一个高可用的Elasticsearch集群?
消弭
2025-12-15
3小时前

一、集群架构设计
| 服务器 | IP地址 | 角色 | 说明 |
|---|---|---|---|
| 服务器-node1 | 192.168.178.140 | master,data,ingest | |
| 服务器-node2 | 192.168.178.141 | master,data,ingest | |
| 服务器-node3 | 192.168.178.142 | master,data,ingest |
1、节点角色规划
每台服务器将部署一个Elasticsearch节点,每个节点同时承担Master、Data和Coordinating角色,形成对等架构。这种设计在简化部署的同时提供了高可用性:
Master资格:所有节点都具备Master资格,参与集群管理决策
数据存储:所有节点都作为Data节点存储数据分片
请求协调:所有节点都可以作为Coordinating节点处理客户端请求
2、网络架构
使用Docker Overlay网络实现跨主机的容器通信,确保三台服务器上的ES节点能够相互发现和通信。
3、资源分配建议
- JVM堆内存:16GB(内存分配不超过16G)
- 剩余内存:用于操作系统缓存,提升ES性能
- 磁盘空间:500GB主要用于数据存储和日志
二、部署详细步骤
1、系统级配置(三台服务器都需要执行)
# 优化系统参数echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.confecho "net.core.somaxconn=65535" | sudo tee -a /etc/sysctl.confsudo sysctl -pmkdir -p /data/deploy/escd /data/deploy/es# 创建数据目录sudo mkdir -p /data/deploy/es/data/elasticsearch/{data,logs}sudo chmod -R 777 /data/deploy/es/data/elasticsearch
2、每台服务器创建使用到的docker网络
# 创建Docker Overlay网络docker network create --driver overlay --attachable es-cluster-network
所有服务器节点docker network ls查看创建网络
3、Docker Compose文件配置
为每台服务器创建docker-compose.yml文件,注意根据服务器IP调整配置。
3.1、服务器节点1 docker-compose配置
version: '3.8'services:es-node1: image:swr.cn-north-1.myhuaweicloud.com/meta-swr/x86/elasticsearch:7.17.8 container_name:es-node1 environment: -node.name=es-node1 -cluster.name=es-production-cluster -discovery.seed_hosts=192.168.178.141,192.168.178.142 -cluster.initial_master_nodes=es-node1,es-node2,es-node3 -bootstrap.memory_lock=true -"ES_JAVA_OPTS=-Xms2g -Xmx2g" -node.roles=master,data,ingest -network.publish_host=192.168.178.140 -network.host=0.0.0.0 -xpack.security.enabled=false ulimits: memlock: soft:-1 hard:-1 volumes: -./data/elasticsearch/data:/usr/share/elasticsearch/data -./data/elasticsearch/logs:/usr/share/elasticsearch/logs ports: -"9200:9200" -"9300:9300" networks: -es-cluster-network deploy: replicas:1 restart_policy: condition:on-failurenetworks:es-cluster-network: external:true name:es-cluster-network3.2、服务器节点2 docker-compose配置
version: '3.8'services:es-node1: image:swr.cn-north-1.myhuaweicloud.com/meta-swr/x86/elasticsearch:7.17.8 container_name:es-node2 environment: -node.name=es-node2 -cluster.name=es-production-cluster -discovery.seed_hosts=192.168.178.140,192.168.178.142 -cluster.initial_master_nodes=es-node1,es-node2,es-node3 -bootstrap.memory_lock=true -"ES_JAVA_OPTS=-Xms2g -Xmx2g" -node.roles=master,data,ingest -network.publish_host=192.168.178.141 -network.host=0.0.0.0 -xpack.security.enabled=false ulimits: memlock: soft:-1 hard:-1 volumes: -./data/elasticsearch/data:/usr/share/elasticsearch/data -./data/elasticsearch/logs:/usr/share/elasticsearch/logs ports: -"9200:9200" -"9300:9300" networks: -es-cluster-network deploy: replicas:1 restart_policy: condition:on-failurenetworks:es-cluster-network: external:true name:es-cluster-network3.3、服务器节点3 docker-compose配置
version: '3.8'services:es-node1: image:swr.cn-north-1.myhuaweicloud.com/meta-swr/x86/elasticsearch:7.17.8 container_name:es-node3 environment: -node.name=es-node3 -cluster.name=es-production-cluster -discovery.seed_hosts=192.168.178.140,192.168.178.141 -cluster.initial_master_nodes=es-node1,es-node2,es-node3 -bootstrap.memory_lock=true -"ES_JAVA_OPTS=-Xms2g -Xmx2g" -node.roles=master,data,ingest -network.publish_host=192.168.178.142 -network.host=0.0.0.0 -xpack.security.enabled=false ulimits: memlock: soft:-1 hard:-1 volumes: -./data/elasticsearch/data:/usr/share/elasticsearch/data -./data/elasticsearch/logs:/usr/share/elasticsearch/logs ports: -"9200:9200" -"9300:9300" networks: -es-cluster-network deploy: replicas:1 restart_policy: condition:on-failurenetworks:es-cluster-network: external:true name:es-cluster-network4、验证集群状态
# 检查集群健康状态curl -X GET "http://192.168.178.140:9200/_cluster/health?pretty"# 查看节点列表curl -X GET "http://192.168.178.140:9200/_cat/nodes?v"# 查看集群详细信息curl -X GET "http://192.168.178.140:9200/_cluster/stats?pretty"
三、生产环境优化建议
1、性能调优参数
# 在environment部分添加以下参数:- indices.query.bool.max_clause_count=10000- thread_pool.search.size=20- thread_pool.search.queue_size=1000- bootstrap.mlockall=true2、安全加固
# 启用安全功能- xpack.security.enabled=true- xpack.security.transport.ssl.enabled=true# 生成证书docker exec -it es-node1 bin/elasticsearch-certutil cadocker exec -it es-node1 bin/elasticsearch-certutil cert --ca elastic-stack-ca.p123、备份与恢复策略
# 创建快照仓库PUT /_snapshot/my_backup{ "type": "fs", "settings": { "location": "/usr/share/elasticsearch/snapshots" }}四、故障排除指南
1、节点无法加入集群
# 检查网络连通性docker exec -it es-node1 ping es-node2# 查看日志docker-compose logs --tail=100 es-node12、分片未分配问题
# 查看未分配原因GET /_cluster/allocation/explain3、内存不足处理
# 清理缓存POST /_cache/clear五、集群扩展建议
如果需要进一步扩展:
增加专用主节点:将Master角色分离到专用节点
增加专用协调节点:处理客户端请求,减轻数据节点压力
冷热数据架构:根据数据访问频率使用不同的存储层级
本文内容仅供参考,不构成任何专业建议。使用本文提供的信息时,请自行判断并承担相应风险。
分享文章



