Datacenter
ElasticSearch 強制執行主分片分配並提高跨 DC 寫入速度
我目前執行三個 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 } }]}'
我不得不多次執行該命令,在每個節點上我不想有一個主分片,每個索引和每個索引分片。
您的節點仍應具有副本分片。