У меня кластер из 8 узлов в ec2. 4 на каждую зону доступности с cluster.routing.allocation.awareness.attributes: aws_availability_zone Я хочу перенести все шарды на другой тип узла. Итак, я настроил новые узлы и добавил их в кластер. Некоторые шарды теперь перемещаются на новые узлы. Конечная цель - закрыть все старые узлы, при этом все шарды будут разделены между двумя узлами. Как лучше всего сделать это, не закрывая узлы один за другим и не размещая осколки на узлах, которые скоро будут закрыты?
РЕДАКТИРОВАТЬ: Я полагаю, что "cluster.routing.allocation.exclude._ip": "x.x.x.x, y.y.y.y, z.z.z.z" должно работать для меня?
Решение состоит в том, чтобы
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient" : {
"cluster.routing.allocation.exclude._ip" : "172.31.3.53,172.31.32.44,172.31.32.43,172.31.41.155,172.31.41.152,172.31.15.219,172.31.6.166,172.31.15.72"
}
}'
Получил из исходного кода на Github:
96 clusterExcludeFilters = DiscoveryNodeFilters.buildFromKeyValue (ИЛИ, excludeMap);
и
String [] values = Strings.splitStringByCommaToArray (entry.getValue ());
так cluster.routing.allocation.exclude._ip
может работать нормально, но вам может потребоваться принудительная перетасовка, но, честно говоря, лучший способ сделать это, когда новые узлы подключены к сети, - просто убить один старый узел. Кластер перейдет в yellow
состояние, но он все равно будет работать
Если у вас есть активный осколок с одним резервным осколком. Желтый просто означает, что он не может сопоставить все резервные копии с активными или у резервной копии нет активных. Таким образом, он делает их заново, и вскоре кластер снова станет зеленым.
Таким образом я обновил живые производственные кластеры
Например, имейте 3 м3 больших члена кластера. Пригласите 3 новых участника m4.2xlarge. Убейте один m3.large и дождитесь, пока кластер станет зеленым. Затем повторите для последних двух m3.large. У меня никогда не было проблем