ES集群节点宕机导致shard unassigned解决方案

ES集群概况:
1台master节点,4台data节点,9个shards
问题:
一台data节点宕机,导致5个分片处于unassigned状态,集群状态变为red,无法自动rerouting
解决步骤:
1.查看所有节点的日志信息,通过日志,我们发现master节点中出现了警告信息,通知宕机节点的磁盘利用率超过了90%,这也是导致节点宕机,集群出现unassigned的原因。
2.找到原因后,我们开始处理问题,因为es集群已经无法自动完成rerouting操作,所有当务之急是解决磁盘的问题,因为无法动态扩容,所以我们分配了新的大容量机器,将es数据所在目录整个迁移到了新的机器上,同时将原有机器IP绑定到新的机器上,启动新的机器。
3.这时问题任然没有完全解决,我们输入

curl 'http://ip:port/_nodes/process?pretty'

查看es集群中节点的具体信息
同时输入

curl -XGET http://ip:port/_cat/shards|grep UNASSIGNED

来查看处于未分配状态的信息,信息里面分别有索引,id等信息
4.接下来便是强制routing的过程了,通过如下命令便可以完成shard的重新路由分配

curl -XPOST 'ip:port/_cluster/reroute?retry_failed=5&pretty' -d '
{
    "commands" : [ {
        "allocate_stale_primary" : {
            "index" : "error_data",
            "shard" :5,
            "node" : "0Al0NdJZS2ClT6PiLCqGlg",
            "accept_data_loss" : true
        }
    }]
}'

上面的index为未分配的shard的索引,shard为分片id,node为分片的路由目的节点id,通过第一条命令可以查出,注意可能unassigned节点并不全部分布再宕机节点上,需要进行重路由分配,如果分片不在路由目的节点上,日志中会出现异常信息,找不到对应分片的索引文件,在异常信息中会出现分片的名称,这时,到各节点上查找分片信息,路由到对应的节点上。
所有问题解决后,重启es集群可以发现集群变为green状态。

你可能感兴趣的:(elasticsearch)