Я установил кластерное программное обеспечение Red Hat на CentOS 6.5 и использую его для обеспечения избыточной маршрутизации из одной сети в другую. Это прекрасно работает, и у меня есть пара ящиков, предоставляющих эту услугу, так что в случае сбоя одного (например, если я проверяю, удаляя его сетевые подключения), другой берет на себя маршрутизацию.
Однако, если мне нужно что-то сделать с оставшимся ящиком, я не смогу перезапустить его из-за проблем с rgmanager:
service rgmanager stop
зависает, и единственный способ остановить процесс - это kill -9
Это. Это, очевидно, также влияет на любое действие, которое пытается остановить службу, например reboot
или poweroff
.
Когда мне удается запустить сервер самостоятельно, хотя кластер запускается, rgmanager не отображается как работающий в clustat
и ни одна из избыточных служб маршрутизации даже не видна, не говоря уже о запуске.
Это может вызвать проблемы, если, например, блоки развернуты в удаленном месте и их необходимо отключить, прежде чем мы сможем заменить вышедший из строя блок.
Вот мой cluster.conf:
<?xml version="1.0"?>
<cluster config_version="2" name="router-ha">
<fence_daemon/>
<clusternodes>
<clusternode name="router-01" nodeid="1"/>
<clusternode name="router-02" nodeid="2"/>
</clusternodes>
<cman expected_votes="1" two_node="1"/>
<fencedevices/>
<rm>
<failoverdomains/>
<resources>
<ip address="10.0.0.1" monitor_link="1" sleeptime="0"/>
<ip address="10.0.0.2" monitor_link="1" sleeptime="0"/>
<ip address="10.2.0.1" monitor_link="1" sleeptime="0"/>
<ip address="10.4.0.1" monitor_link="1" sleeptime="0"/>
</resources>
<service autostart="1" name="routing-a" recovery="restart">
<ip ref="10.0.0.1"/>
<ip ref="10.2.0.1"/>
</service>
<service autostart="1" name="routing-b" recovery="restart">
<ip ref="10.0.0.2"/>
<ip ref="10.4.0.1"/>
</service>
</rm>
</cluster>
Почему я не могу запустить службу на одном ящике, если другой не видит? Конечно, это обязательная часть избыточной пары, чтобы вы не зависели от другой машины, чтобы иметь возможность запустить службу кластера?
Для запуска кластерных сервисов необходим кворум. Как правило, например, в кластере с тремя узлами каждый член имеет по одному голосу: если вы отключите один из них, он будет знать, что он нецифровый, поскольку у него меньше половины доступных голосов (значение фактически настраивается). Кластер без кворума не подходит для запуска кластерных служб.
Этот принцип не только для кластеров Red Hat, но и общий принцип. Однако решения и реализации могут отличаться. Также реализации двухузловых кластеров, поскольку, если вы дадите обоим узлам по одному голосу, ни один из них обычно не будет иметь кворума.
Конечно, это обязательная часть избыточной пары, чтобы вы не зависели от другой машины, чтобы иметь возможность запустить службу кластера?
В случае Red Hat в двухузловом кластере применяется особое условие:
<cman expected_votes="1" two_node="1"/>
Когда вы выдернете вилку, оба узла потеряют контакт друг с другом.
Чтобы определить, у кого из них есть кворум, они оба попытаются STONITH друг друга.
STONITH - это аббревиатура от Shoot-The-Other-Node-In-The-Head, которая защищает ваши данные от повреждения мошенническими узлами или одновременным доступом. То, что узел не отвечает, не означает, что он не имеет доступа к вашим данным. Единственный способ быть на 100% уверенным в безопасности ваших данных - это заблокировать узел с помощью STONITH, чтобы мы могли быть уверены, что узел действительно отключен, прежде чем разрешить доступ к данным с другого узла.
Таким образом, ваше предположение верное, ваш кластер неправильно настроен и требует, чтобы агент ограждения работал, потому что, вытаскивая вилку, вы не только делаете свою службу недоступной, что обычно вызывает rgmanager
чтобы переключиться на другой узел (или как бы вы это ни сконфигурировали), вы также удаляете контрольную связь между кластерными узлами. Даже если rgmanager
может попытаться сделать то, что вы настроили, cman
до сих пор не могу определить, какой из этих узлов имеет кворум. Вместо этого он будет постоянно пытаться оградить другой узел, но, поскольку вы не настроили забор-агент, он будет зависать на неопределенный срок.
Итак, вот два хороших совета: