使用explain查看具体原因:
从reason中可以看出 这个索引unassigned的原因为无法在同一个节点上保存两分副本.
也就是说,在该节点上已经存在了一个副本了.
同时另两个节点上无法保存副本的reason为:
这个reason是说副本数量超时了这个节点能够存在副本的最大值所以也没法分配。
从这里我们可以看出一个关键的参数index.routing.allocation.total_shards_per_node=2
假如: 一个es集群有3个数据节点,某个索引模板设置的分片数为3 副本数为1 那么总的分片数=主分片数+ 副分片数,也就是3+3=6个 那么3个数据节点 则total_shards_per_node的值可以设置为6/3=2每个节点上保存2个副本,一般情况下这是合理的.
但是如果某个时刻es集群出现脑裂问题的话,比如说有个节点宕机,那么6个分片需要分布在两个节点上 那么每个节点上需要保存3个副本,这大于total_shards_per_node=2,所以有可能出现以上的错误,所以一般起见 total_shards_per_node一般设置的比最小值大点。
total_shards_per_node这个值在es的配置文件中指定,同时也支持动态修改.
修改之后,再次查看集群的状态,变回了green状态.
参考文章: