我目前运行三个 Elasticsearch 节点。每个都在不同的数据中心(欧盟、美国、AP)中作为 AWS EC2 实例。
每个索引的每个分片有 2 个副本。写入仅发送到 EU 节点。
当您写入欧盟时,您的写入可能需要:
~ 400 毫秒(如果复制是同步的并且主分片在美国或 AP)
您的写入被重定向到具有主分片的节点,然后同步同步,
~ 200 毫秒(如果复制是异步的并且主分片在美国或 AP)
你的写入被重定向到主分片,然后它是异步同步的,
~ x ms(如果复制是异步的并且主分片在欧盟)
您的写入不会被重定向并且您的应用程序不会等待同步,复制是异步的。
我总是希望后者发生。我想在欧盟拥有所有主要分片。
我没有找到一种方法来强制所有主分片都在欧盟。我认为让 AP 和 US 成为数据节点可以解决问题。结果我在欧盟建立了3个主+数据节点的集群,然后AP和美国就变成了数据节点。我仍然可以看到他们是健康索引的一些分片的主人。
解决方案是什么?我可以强制一个节点或区域只负责主分片吗?我发现了这个:https ://www.elastic.co/guide/en/elasticsearch/reference/1.4/index-modules-allocation.html
虽然我可以exclude.tag
用来停止允许在美国和 AP 节点上分配分片,但我的理解是我的副本分片也不会被分配。那不是重点。我想在这些节点上有副本。
我怎样才能实现它?
我没有找到比手动执行我们想要取消主分片的节点更好的方法。这是命令。
我不得不多次运行该命令,在每个我不想拥有主分片的节点上,为每个索引和每个索引分片。
您的节点仍应具有副本分片。