如何恢复故障Elasticsearch集群且不丢失节点数据
3节点Elasticsearch集群恢复方案(主节点选举失败+认证失败)
一、解决主节点选举失败问题
从日志可知,集群有3个具备主节点资格的节点,主节点选举需要至少2个节点达成quorum(法定人数),当前仅发现1个节点,导致选举无法完成。
1. 先确保节点间通信正常
- 检查所有节点的9300端口是否开放(防火墙、安全组规则),确认节点间能互相ping通并访问9300端口
- 验证每个节点
elasticsearch.yml配置:cluster.name必须完全一致(大小写敏感)discovery.zen.ping.unicast.hosts需包含另外两个节点的IP:9300(5.x版本使用Zen发现机制)
2. 临时启动单节点集群(应急恢复)
若其他节点暂时无法启动,可临时降低quorum要求启动单节点集群:
- 停止当前运行的ES节点
- 修改
elasticsearch.yml,添加/修改参数:discovery.zen.minimum_master_nodes: 1 - 启动主节点,此时集群将以单节点模式运行,恢复基本可用性
二、解决elastic用户认证失败问题
5.x版本无elasticsearch-reset-password工具,需手动重置密码:
- 临时关闭安全认证:修改
elasticsearch.yml,设置xpack.security.enabled: false - 重启ES节点,此时可无认证访问集群
- 执行curl命令重置elastic用户密码:
curl -XPUT '<master_node_ip>:9200/_xpack/security/user/elastic/_password' \ -H "Content-Type: application/json" \ -d '{ "password": "your_new_secure_password" }' - 恢复安全配置:改回
xpack.security.enabled: true,重启ES节点,使用新密码登录
三、恢复完整3节点集群
- 确认另外两个节点的
elasticsearch.yml配置与主节点完全一致(集群名称、发现配置、安全配置等) - 依次启动另外两个节点,它们会自动加入集群
- 所有节点加入后,将主节点的
discovery.zen.minimum_master_nodes改回2(符合3节点主资格的quorum要求),然后滚动重启所有节点
关键注意事项
- 修改配置前务必备份
elasticsearch.yml和数据目录(默认路径为data/) - 确保所有节点的Elasticsearch版本、JVM版本完全一致,避免兼容性问题
- 操作完成后,验证集群状态:
curl -u elastic:new_password '<master_node_ip>:9200/_cat/nodes?v'
内容的提问来源于stack exchange,提问作者sicdb
相关产品推荐
相关产品推荐

