Elasticsearch 路由分配感知和分片分配

Posted

技术标签:

【中文标题】Elasticsearch 路由分配感知和分片分配【英文标题】:Elasticsearch Routing allocation awarness and shard allocation 【发布时间】:2014-08-27 15:13:46 【问题描述】:

我有一个包含 10 个节点的弹性搜索集群,分布在 3 个区域(ABC)。

ES配置文件包含:

cluster.routing.allocation.awareness.force.zone.values = "A,B,C";

我有一个索引 (index1),其中包含大小为 =~ 231MB=~ 283674 文档。 该索引的设置包含:

"number_of_replicas" : "2", "number_of_shards" : "5",

分片似乎在区域中正确分布,但在单个区域内它们分布不均(见下表,例如 Zone C | S = shard,(P = Primary | S = Secondary)

我可以做些什么来正确分配我的分片?

++------+----------------------------------------------------+
||Zone A-----------------------------------------------------|
||       |                                                  ||
|| Node 1|  S1 (P)                                          ||
|| +-----------------------------------------------------+  ||
||       |                                                  ||
||       |  S2 (S)          S4 (S)                          ||
||       |                                                  ||
|| Node 2|                                                  ||
|| +-----------------------------------------------------+  ||
||       |                                                  ||
||       |                                                  ||
||       |  S0 (S)          S3 (S)                          ||
||       |                                                  ||
|| Node 3|                                                  ||
|-------+----------------------------------------------------|
||Zone B-----------------------------------------------------|
||       |                                                  ||
||       |  S0 (P)                                          ||
|| Node 4|                                                  ||
|| +-----------------------------------------------------+  ||
||       |                                                  ||
||       |                                                  ||
||       |  S3 (P)          S4 (P)                          ||
|| Node 5|                                                  ||
|| +-----------------------------------------------------+  ||
||       |                                                  ||
||       |                                                  ||
||       |  S1 (S)          S2 (S)                          ||
|| Node 6|                                                  ||
|-------+----------------------------------------------------|
||Zone C-----------------------------------------------------|
||       |                                                  ||
||       |  S0 (S)   S1 (S)   S2 (P)   S3 (S)   S4 (S)      ||
|| Node 7|                                                  ||
|| +------------------------------------------------------+ ||
||       |                                                  ||
||       |                                                  ||
||       |                                                  ||
|| Node 8|                                                  ||
|| +------------------------------------------------------+ ||
||       |                                                  ||
||       |                                                  ||
||       |                                                  ||
|| Node 9|                                                  ||
|| +------------------------------------------------------+ ||
||       |                                                  ||
||       |                                                  ||
||       -                                                  ||
|| Node 10                                                  ||
|------------------------------------------------------------|
+------------------------------------------------------------+

【问题讨论】:

您是否使用任何类型的 ui 来进行 elasticsearch 集群管理? (如弹性搜索头) 【参考方案1】:

我通过强制每个主机的分片数量和更改每个索引的主/辅助数量来解决此问题:

index.number_of_shards = "5";
index.number_of_replicas = "3";
index.routing.allocation.total_shards_per_node = "2";

这导致每个节点有 2 个分片均匀分布在区域中。

【讨论】:

以上是关于Elasticsearch 路由分配感知和分片分配的主要内容,如果未能解决你的问题,请参考以下文章

官方文档-分片分配和集群路由

Elasticsearch7.8.0版本优化——分片策略

Elasticsearch 有未分配的分片 详细思路

Elasticsearch揭秘 Elasticsearch 分片分配

禁用分配的单个副本的意外 ElasticSearch 分片分配

Elasticsearch 集群分配多少分片合理