ElasticSearch 强制主分片分配并提高跨 DC 写入速度

ElasticSearch 强制主分片分配并提高跨 DC 写入速度

我目前运行三个 Elasticsearch 节点。每个节点位于不同的数据中心(欧盟、美国、亚太地区),作为 AWS EC2 实例。

每个索引的每个分片有 2 个副本。写入仅发送到 EU 节点。

当你写入 EU 时,你的写入可能需要:
~ 400ms(如果复制是同步的,并且主分片位于美国或亚太地区)
你的写入将被重定向到具有主分片的节点,然后同步,

~ 200ms(如果复制是异步的,并且主分片位于美国或亚太地区)
你的写入将被重定向到主分片,然后异步同步,

~ x ms(如果复制是异步的并且主分片在欧盟)
您的写入不会被重定向并且您的应用程序不会等待同步,复制是异步的。

我希望后者总是发生。我希望所有主分片都在欧盟内。

我没有找到强制所有主分片位于 EU 的方法。我认为将 AP 和 US 设为数据节点可以解决问题。因此,我在 EU 设置了 3 个主节点+数据节点的集群,然后 AP 和 US 就变成了数据节点。我仍然可以看到,对于健康索引的一些分片来说,它们是主节点。

解决方案是什么?我可以强制一个节点或区域仅负责主分片吗?我发现了这一点:https://www.elastic.co/guide/en/elasticsearch/reference/1.4/index-modules-allocation.html

我曾经想过可以用exclude.tag它来停止允许在 US 和 AP 节点上分配分片,但我的理解是我的副本分片也不会被分配。这不是重点。我想在这些节点上拥有副本。

我怎样才能实现它?

答案1

除了手动强制取消主分片的节点之外,我没有找到更好的方法。这是命令。

curl -s -POST 'http://localhost:9200/_cluster/reroute' -d '{
"commands": [
{
  "cancel": {
    "index": "your_index_name",
    "shard": 0,
    "node": "your_node_host",
    "allow_primary": true    
  }
}]}'

我必须多次运行该命令,在每个节点上我都不想为每个索引和每个索引分片设置一个主分片。

您的节点仍然应该有副本分片。

相关内容