Я использую кластер из 2 узлов с DRBD (активный/пассивный), управляемый службой drbd systemd и небольшим скриптом, который монтирует тома всякий раз, когда ресурс становится основным.
Я хочу настроить DRBD таким образом, чтобы он всегда разрешал любое разделение мозга и всегда имел по крайней мере один узел, который является основным и способен обслуживать в любом случае, пока обе машины не выйдут из строя.
Я попробовал следующую конфигурацию (где pri-lost-after-sb
находится "reboot"
)
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
и on-suspended-primary-outdated force-secondary
некоторые другие комбинации.
Но я всегда нахожу сценарий, когда кластер попадает в плохие состояния и не восстанавливается после split brain. Обычно я попадаю StandAlone
на узлы и force-io-failures
на вторичный (так что после очередного сбоя первичного, этот вторичный не будет работать, даже если подключен).
Могу ли я что-то еще сделать, чтобы повысить надежность этой настройки, учитывая, что для меня приоритетнее бесперебойная работа сервиса, а не предотвращение потери данных?
решение1
В свое время я много раз пытался настроить подобный кластер. Это было до тех пор, пока я не понял, что DRBD сломан по своей сути и имеет второе название «split brain». В DRBD9 все стало немного лучше (только по сравнению с 8.xx, которая была кошмаром), но его все еще нельзя использовать в производстве. Я вижу только одно решение — сэкономить время и перейти на что-то более надежное. Например, Ceph.