![Elasticsearch 未将分片分配给(新)节点](https://linux22.com/image/1468045/Elasticsearch%20%E6%9C%AA%E5%B0%86%E5%88%86%E7%89%87%E5%88%86%E9%85%8D%E7%BB%99%EF%BC%88%E6%96%B0%EF%BC%89%E8%8A%82%E7%82%B9.png)
我遇到一个问题,我的集群无法平衡分片,并且重新启动的节点现在是空的。
- 我停下
my_node
来my_cluster
等待碎片和副本被重新分配。成功了。 - 然后我重新启动了
my_node
,但是集群没有给它分配任何分片。 - 创建了一个新索引,并且集群将分片分配给
my_node
。 - 一天后,该节点仍然只有新索引的分片。
有没有办法强制在节点上均衡分片? 在我的例子中,我测试了触发后重新启动节点gateway.recover_after_time
,但这个问题让我想到:
- 如果我添加新节点并想要触发重新平衡,该怎么办?
答案1
NVM,看起来my_node
是一个旧版本,并且如果版本为旧版本,elasticsearch 会拒绝重新分配。
我跑过去curl -XPOST '10.10.1.4:9200/_cluster/reroute' -d '{ "commands" : [ { "allocate" : { "index" : "my_cluster", "node" : "my_node", "shard" : 0 } } ] }'
,集群回答道:
{
“错误”:“RemoteTransportException[[es-master][inet[/10.10.1.14:9300]][cluster:admin/reroute]];
嵌套:ElasticsearchIllegalArgumentException[[allocate] 不允许在节点 [my_node][o7-MlqgXTU-51t4O7iBu6g][my_node][inet[10.10.1.4/10.10.1.4:9300]]{max_local_storage_nodes=1, master=true} 上分配 [my_cluster][0],原因:
[是(分片未分配给同一节点或主机)]
[是(节点通过包含/排除/要求过滤器)]
[是(主要节点已经处于活动状态)]
[是(低于分片恢复限制 [2])]
[是(忽略分配禁用)]
[是(忽略分配禁用)]
[是(未启用分配感知)]
[是(总分片限制已禁用:[-1] <= 0)]
[NO(目标节点版本 [1.6.0] 比源节点版本 [1.6.1] 旧)]
[是(节点上有足够的磁盘空间用于分片,可用磁盘空间:[478.1gb])]
[是(分片不是主分片或已禁用重定位)]
]; “,
“状态”:400
}