Datacenter

ElasticSearch 強制執行主分片分配並提高跨 DC 寫入速度

  • June 20, 2016

我目前執行三個 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 節點上分配分片,但我的理解是我的副本分片也不會被分配。那不是重點。我想在這些節點上有副本。

我怎樣才能實現它?

我沒有找到比手動執行我們想要取消主分片的節點更好的方法。這是命令。

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

我不得不多次執行該命令,在每個節點上我不想有一個主分片,每個索引和每個索引分片。

您的節點仍應具有副本分片。

引用自:https://serverfault.com/questions/784386