解决ES索引分片均衡问题

原创
2019/11/08 15:30
阅读数 3K

运行了两年的ES集群,今天索引节点突然不均衡,新建索引分片都集中到一个节点上了,如下图:

同时还有部分节点分片在恢复,如上图,有432个待恢复分片,而且只有两个分片在同时恢复,网络吞吐也很小,这要等到猴年马月:

首先调整索引分布,在集群元数据比较大情况下,修改settings可能会超过30s,需要在后面指定master_timeout:

"index.routing.allocation.include._ip":"node1ip,node2ip,node3ip,node4ip,node5ip"
}'

然后再修改索引恢复参数:

curl -XPUT 'http://localhost:9200/_cluster/settings?flat_settings=true&timeout=60000s&master_timeout=60000s' -d '
{
    "transient" : {
        "indices.recovery.max_bytes_per_sec" : "900mb",
        "cluster.routing.allocation.node_concurrent_recoveries": "10",
        "cluster.routing.allocation.cluster_concurrent_rebalance": 10
    }
}'

集群设置参数说明:

cluster.routing.allocation.allow_rebalance  
设置根据集群中机器的状态来重新分配分片,可以设置为always, indices_primaries_active和indices_all_active,默认是设置成indices_all_active来减少集群初始启动时机器之间的交互。 
cluster.routing.allocation.cluster_concurrent_rebalance  
设置在集群中最大允许同时进行分片分布的个数,默认为2,也就是说整个集群最多有两个分片在进行重新分布。 
cluster.routing.allocation.node_initial_primaries_recoveries  
设置指定初始每个节点。
cluster.routing.allocation.node_concurrent_recoveries  
设置在节点中最大允许同时进行分片分布的个数,默认为2 
cluster.routing.allocation.disable_allocation  
使主要分片或副本的分布失效。要知道,如果主分片不存在(那个节点挂了)那么其副本仍然会被提升为主分片,这个设置只有在动态地使用集群更新设置api调用时才生效。 
cluster.routing.allocation.disable_replica_allocation  
使副本分布失效。和上一个设置一样,只有动态地使用集群更新设置api调用时才生效。 
indices.recovery.concurrent_streams  
当从一个点(peer)恢复分片时当前节点最多允许的文件读取流的个数,默认为5 

最后网络吞吐上去了,索引分片快速恢复,集群恢复正常。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部