Я хотел бы воспроизвести сценарий разделения сети со всеми тремя режимами — ignore
, autoheal
и pause_minority
. Как я могу этого добиться? Я попытался остановить (/sbin/service reboot) один из узлов кластера, но это не привело к разделению сети. Я также попытался удалить мнезию на одном узле, чтобы создать несогласованную мнению во всем кластере, но это также не помогло.
Воспроизвести сценарий сетевого раздела RabbitMQ
Ответы (3)
Чтобы имитировать сетевой раздел, вы можете заблокировать исходящие соединения, используя iptables
Предположим, у вас есть 3 узла:
node1 - ip : 10.10.0.1
node2 - ip : 10.10.0.2
node3 - ip : 10.10.0.3
После создания кластера перейдите, например, на узел 2 и
iptables -A OUTPUT -d 10.10.0.1 -j DROP
Таким образом, вы заблокируете соединения, и узел перейдет в сетевой раздел.
затем
iptables -F
для восстановления сети.
Добавление дополнительной информации к приведенному выше ответу:
Выполните приведенную ниже команду либо в узле 2, либо в узле 3, чтобы заблокировать соединение с другими узлами.
sudo iptables -A INPUT -s 10.10.0.1 -j DROP
Чтобы разрешить подключение с других узлов/удалите правило брандмауэра, которое мы создали ранее
sudo iptables -D INPUT -s 10.10.0.1 -j DROP
Просмотр существующих правил брандмауэра
iptables --list
Примечание. В некоторых конфигурациях кластеров сетевое разделение происходит только тогда, когда узлы, соединения которых были заблокированы ранее (через команды iptables), снова могут взаимодействовать друг с другом. Итак, попробуйте заблокировать и разблокировать соединения через 60 секунд (что является значением «net_ticktime» по умолчанию)
Мне удалось смоделировать/воспроизвести сетевой раздел для RabbitMQ, заблокировав порт 25672
.
25672: используется для связи между узлами и инструментами CLI.
У меня было два узла RabbitMQ в разных экземплярах AWS.
Чтобы имитировать сетевой раздел, я настроил отбрасывание TCP-пакетов для этого порта, подождал 60 секунд (может отличаться в зависимости от Net Tick параметр времени), а затем снял блокировку портов (необходимую для обнаружения сетевых разделов).
Добавление правил блокировки портов (с наивысшим приоритетом):
sudo iptables -I INPUT 1 -p tcp --dport 25672 -j DROP
sudo iptables -I OUTPUT 1 -p tcp --dport 25672 -j DROP
Удаление правил (через 60+ секунд):
sudo iptables -D INPUT -p tcp --dport 25672 -j DROP
sudo iptables -D OUTPUT -p tcp --dport 25672 -j DROP
Чтобы проверить, произошел ли сетевой раздел:
sudo rabbitmqctl cluster_status
Свойство partitions
будет иметь узлы в своем массиве, подобные этому
{partitions,[{'rabbit@ip-163-10-1-10',['rabbit@ip-163-10-0-15']}]}
Документация по сетевым разделам RabbitMQ