无法从Elasticsearch集群移除数据节点,应如何解决?
问题解决建议
- 首先修正你配置的排除IP规则,你当前写的
*.*.*.*是全IP通配符,等于要求集群排除所有节点,完全不符合分片分配逻辑,是返回acknowledged: false的核心原因。请将值替换为待下线单个节点的准确IP,不要使用大范围通配符。 - 如果IP规则容易出错,也可以改用节点名进行排除,先执行以下命令获取集群所有节点的名称:
GET http://localhost:9200/_cat/nodes?v
找到待下线节点的name后,替换请求内容如下:
PUT http://localhost:9200/_cluster/settings { "transient": { "cluster.routing.allocation.exclude._name": "待下线节点的准确名称" } }
- 检查集群当前的路由规则是否有冲突,执行以下命令查看全量集群配置,确认没有优先级更高的
include/require规则和exclude规则冲突:
GET http://localhost:9200/_cluster/settings?include_defaults=true
- 检查集群健康状态,确认集群当前不是red状态,剩余5个数据节点有足够的磁盘空间和分片配额承接待下线节点迁移的分片,可执行以下命令查看集群健康度:
GET http://localhost:9200/_cluster/health
- 如果集群开启了安全认证,确认你执行请求的账号拥有
cluster:admin/settings/update权限,请求需要携带对应的认证信息。 - 如果transient级别配置一直不生效,可以尝试改用persistent级别配置,等节点下线完成后再删除该规则即可:
// 配置持久化排除规则 PUT http://localhost:9200/_cluster/settings { "persistent": { "cluster.routing.allocation.exclude._ip": "待下线节点的准确IP" } } // 节点下线完成后删除规则 PUT http://localhost:9200/_cluster/settings { "persistent": { "cluster.routing.allocation.exclude._ip": null } }
内容的提问来源于stack exchange,提问作者karthick
相关产品推荐
相关产品推荐

