Elasticsearch集群搭建:3节点生产环境实操教程

搭建 Elasticsearch 集群的核心是三件事:让各节点能互相发现、让主节点选举稳定、让分片能正常分配。
下面以 3 台 Linux 服务器、Elasticsearch 7.x 或 8.x 为例,给出一套可直接照做的流程。

准备阶段:系统与网络条件

三台机器建议配置一致,至少 4 核 8G 内存,磁盘用 SSD。
假设 IP 为:

  • node-1:192.168.1.101
  • node-2:192.168.1.102
  • node-3:192.168.1.103

每台机器先做三件事:

  1. 关闭防火墙或放行 9200、9300 端口。
  2. 设置主机名并写入 /etc/hosts,保证三台机器能互相解析。
  3. 创建专用用户,Elasticsearch 不允许用 root 直接启动。
# 设置主机名(每台机器改成自己的名字)
hostnamectl set-hostname node-1

# 三台机器都追加 hosts
echo "192.168.1.101 node-1" >> /etc/hosts
echo "192.168.1.102 node-2" >> /etc/hosts
echo "192.168.1.103 node-3" >> /etc/hosts

# 创建用户
useradd esuser
passwd esuser

系统参数也要调,否则启动时会报 max virtual memory areas vm.max_map_count is too low。

# 临时生效
sysctl -w vm.max_map_count=262144

# 永久生效
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

同时修改文件句柄限制,在 /etc/security/limits.conf 末尾加入:

esuser soft nofile 65536
esuser hard nofile 65536
esuser soft nproc 4096
esuser hard nproc 4096

安装 Elasticsearch 并配置集群参数

三台机器都执行相同安装步骤。
以 tar.gz 包为例,上传到 /opt 后解压:

tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz -C /opt/
chown -R esuser:esuser /opt/elasticsearch-7.17.0

接着编辑 /opt/elasticsearch-7.17.0/config/elasticsearch.yml,三台机器只有 node.name 不同:

cluster.name: es-prod-cluster
node.name: node-1
path.data: /opt/elasticsearch-7.17.0/data
path.logs: /opt/elasticsearch-7.17.0/logs
network.host: 0.0.0.0
http.port: 9200
transport.port: 9300
discovery.seed_hosts: ["192.168.1.101:9300", "192.168.1.102:9300", "192.168.1.103:9300"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]

几个关键点:

  • cluster.name 三台必须完全一致,否则不会组成同一集群。
  • node.name 必须唯一,建议与主机名一致,方便排查。
  • network.host 写 0.0.0.0 允许外部访问,生产环境应配合防火墙限制来源。
  • discovery.seed_hosts 列出所有候选节点,用于节点发现。
  • cluster.initial_master_nodes 只在集群首次启动时使用,集群稳定后不要依赖它反复重启。

如果使用 Elasticsearch 8.x,默认开启安全认证,首次启动会生成密码和证书。
若只是内网测试,可在配置中关闭安全功能;
生产环境则建议保留并配置 TLS。
具体以对应版本文档为准。

启动集群与状态验证

依次在三台机器上用 esuser 启动:

su - esuser
cd /opt/elasticsearch-7.17.0
./bin/elasticsearch -d

首次启动建议先不加 -d,直接前台运行,观察日志里有没有报错。
确认无误后再后台启动。

验证集群是否正常,常用三个命令:

# 查看节点列表
curl -XGET 'http://192.168.1.101:9200/_cat/nodes?v'

# 查看集群健康状态
curl -XGET 'http://192.168.1.101:9200/_cluster/health?pretty'

# 查看分片分配
curl -XGET 'http://192.168.1.101:9200/_cat/shards?v'

健康状态 green 表示主分片和副本分片都正常;yellow 表示主分片正常但副本未分配,单节点集群常见,三节点集群如果出现 yellow,要检查副本数和节点数是否匹配。

容易踩的坑

  • 内存锁定失败:日志出现 memory locking requested for elasticsearch process but memory is not locked,需要在 elasticsearch.yml 里设置 bootstrap.memory_lock: true,并确保 limits.conf 中的 memlock 为 unlimited。
  • 节点无法发现彼此:先确认 9300 端口互通,再检查 discovery.seed_hosts 是否写错 IP 或端口。
  • initial_master_nodes 重复使用:该配置只在集群第一次初始化时生效,已有数据的集群重启时不要随意修改节点名或该列表,否则可能触发重新选举。
  • 磁盘水位触发只读:默认磁盘使用超过 85% 会触发分片只读,需及时清理或调整 cluster.routing.allocation.disk.watermark 阈值。
  • JVM 堆内存设置过大:jvm.options 中 -Xms 和 -Xmx 建议设为物理内存的一半,且不超过 31G,否则会浪费指针压缩优化。

集群稳定后的常规检查

集群跑起来后,建议把以下检查做成日常巡检项:

  • 用 _cluster/health 确认状态不是 red。
  • 用 _cat/nodes?v 确认三台节点都在线。
  • 用 _cat/indices?v 观察索引和分片数量是否合理。
  • 检查日志目录下 es-prod-cluster.log 有无持续报错。

如果后续需要扩容,新节点只需保证 cluster.name 一致、discovery.seed_hosts 指向现有节点,启动后会自动加入集群。

常见问题

Q:三台机器都启动成功,但集群显示 red 怎么办?

先查 _cluster/health?
pretty
看未分配分片数量,再用 _cat/shards?
v
定位具体索引。
常见原因是节点磁盘水位过高或分片分配规则冲突,处理后再用 _cluster/reroute 手动触发分配。

Q:能不能只搭两个节点?

可以,但两个节点无法形成多数派,主节点选举容易出问题。
生产环境建议至少三个专用主节点候选,避免脑裂。

Q:Elasticsearch 8.x 还需要手动配置 initial_master_nodes 吗?

8.x 默认启用安全功能,首次启动会自动完成部分初始化流程。
如果手动配置集群,仍需根据实际版本确认发现和选举相关参数,不要直接套用 7.x 配置。

到这里,一个基础的三节点 Elasticsearch 集群就搭建完成。
后续可以根据业务量调整分片数、副本数和 JVM 参数,但每次调整前先在测试环境验证,避免直接影响线上检索。

分享到:
上一篇
PostgreSQL主从配置入门:流复制搭建与故障切换验证
下一篇
ES索引优化教程:从分片设置到查询提速的实操步骤
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意