Я запускаю трехузловой мультимастерный кластер MariaDB galera. У меня в основном работает так, как есть. Когда один узел выходит из строя, работают два других, и все в порядке.
Но мне интересно, есть ли способ продолжить работу на одном узле? (это действительно маловероятно, но мне просто интересно) Я знаю, что кластер выйдет из строя, когда нет кворума, чтобы предотвратить разделение мозгов. Еще я знаю, что с одним узлом левый кластер отключается. Это означает, что все соединения / запросы к db потеряны.
Интересно, есть ли способ переключить этот мастер, который остался в режиме одного узла, позволить ему работать, а затем, когда будет обнаружен сбой (остановите приложения, которые подключаются к db), верните другие узлы кластера и позвольте им реплицировать данные (чтобы ничего не потерялось)
Я знаю, что существует нечто, называемое виртуальным кворумом, но будет ли это хорошим выбором в ситуации с тремя главными узлами?
Да, ты можешь. Когда есть один узел, он переходит в режим только для чтения, чтобы предотвратить разделение мозга. Вы можете предотвратить это, отключив сплит-защиту мозга (pc.ignore_sb
); но это означает, что если у вас есть сетевой сигнал с двумя узлами, вы рискуете разделить мозг на двух разных серверах.
Лично я бы никогда этого не сделал .... Это безумие. Если вам не нужен сервер galera с полным стеком, но вы хотите снизить риск потери кворума, просто реализуйте еще один узел с garbd
.
Простое решение этого - "правило трех". Если вам нужна доступность центра обработки данных, вы должны иметь три центра обработки данных с одинаковым количеством узлов; если один центр обработки данных выходит из строя, вы сохраняете кворум, что означает, что кластер остается в сети. Другой способ думать об этом: если сбой может привести к потере кворума более чем 50% узлов, то ваш кластер не работает.