В настоящее время я запускаю три узла Elasticsearch. Каждый из них находится в другом центре обработки данных (ЕС, США, AP) в качестве экземпляра AWS EC2.
На каждый сегмент для каждого индекса приходится по 2 реплики. Пишет только в узел ЕС.
Когда вы пишете в ЕС, ваше письмо может занять:
~ 400 мс (если репликация синхронизирована и главный шард находится в США или AP)
Ваша запись перенаправляется на узел с главным шардом, а затем синхронизируется синхронно,
~ 200 мс (если репликация асинхронная, а главный шард находится в США или AP)
Ваша запись перенаправляется на главный осколок, а затем синхронизируется асинхронно,
~ x мс (если репликация асинхронная и главный шард находится в ЕС)
Вы пишете без перенаправления, и ваше приложение не ждет синхронизации, репликации асинхронны.
Я хочу, чтобы всегда происходило последнее. Я хочу, чтобы все основные шарды были в ЕС.
Я не нашел способа заставить все основные шарды находиться в ЕС. Я думал, что создание AP и US просто узлов данных решит проблему. В результате я создал кластер из 3 узлов master + data в ЕС, затем AP и US стали просто узлами данных. Я все еще вижу, что они являются главными для некоторых сегментов здорового индекса.
Какое решение? Могу ли я заставить узел или зону отвечать только за главные шарды? Я нашел вот это: 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
}
}]}'
Мне пришлось запускать эту команду несколько раз, на каждом узле я не хотел иметь главный сегмент для каждого индекса и для каждого индексного сегмента.
На вашем узле по-прежнему должен быть осколок реплики.