不为失败找理由,要为成功找方法。

新增节点数据均衡.

Elasticsearch | 作者 famoss | 发布于2016年12月28日 | 阅读数:10598

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

kennywu76 - Wood

赞同来自: famoss tcpdump lunatictwo lbx6z wajika

对于新增结点是数据的平衡, 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 - elasticsearch fan

赞同来自: famoss wajika


cluster.routing.allocation.balance.index,这个值调大,可以让索引跟均匀分配到机器上

kennywu76 - Wood

赞同来自:

@Pathbox 正常运作情况下,默认ES可能会为每个node分配2个分片,但是在集群索引比较多,并且出现过结点故障引起数据恢复,就可能出现某个索引在某些node上分配3个或更多,有的node完全不分配的情况。  如果配置 index.routing.allocation.total_shards_per_node为2,可以保证故障恢复后,索引在所有节点上分配shard数一定是2.

要回复问题请先登录注册