新增节点数据均衡.

今天在已经运行的集群里面加了一台新机器,因为历史数据比较多,均衡需要很长时间,所以新创建的索引shards基本都分配到新机器上,请问es有什么配置可以规避这个问题?
已邀请:

kennywu76 - wood@Ctrip

赞同来自: famoss

对于新增结点是数据的平衡, shard balancing heuristics这个调整比较难以精确控制。 推荐使用索引级别设置: index.routing.allocation.total_shards_per_node  , 这个参数可以控制单个索引在同一个结点上最多分配几个shard。 默认是无上限,因此在扩容新结点的时候,很可能一个索引的很多shard分到同一个node。 具体设置多少,需要根据集群结点数量和一个index shard总数量(包含主和副复制片)来定。
 
例如10个node,  index设置 5 primary + 5 replica。 设置index.routing.allocation.total_shards_per_node:1 可以保证这个索引在每个node上只分配一个shard。  这样设置好处是数据分布最均匀, 但是也有负面影响,比如如果有一个node挂了,就会有一个shard无法分配,变成UNASSIGNED状态。  如果设置index.routing.allocation.total_shards_per_node:2 ,则可能数据均衡状态不如设置为1那么理想,但是可以容忍一个node挂掉,因为shard可以再分配到其他node。   这个设置结合shard balancing heuristics做全局调配应该比较理想。

weizijun - es爱好者

赞同来自: famoss

https://www.elastic.co/guide/en/elasticsearch/reference/current/shards-allocation.html#_shard_balancing_heuristics
cluster.routing.allocation.balance.index,这个值调大,可以让索引跟均匀分配到机器上

要回复问题请先登录注册