У меня есть пара серверов CentOS Linux в каждом центре обработки данных. У них есть аварийное переключение в каждом центре обработки данных, управляемое сердцебиение и DRBD (Я знаю, что это устаревшие инструменты, но они стабильны, поэтому менять их нет желания).
У них также есть возможность переключения между центрами обработки данных, чтобы активировать восточный центр обработки данных, а западный - пассивным. Но это процесс ручной разработки, и это нормально.
Западный центр обработки данных в настоящее время является активным, восточный центр обработки данных - пассивным.
serverA.west <-> serverB.west <-----------> serverA.east <-> serverB.east
ACTIVE DATA CENTER PASSIVE DATA CENTER
Серверы могут запускать mysqld и приложение Java.
Приложение Java на этом сервере должно работать только на основном хосте в активном центре обработки данных (например, serverA.west). Если другой экземпляр приложения Java запускается на вторичном хосте (serverB.west) или на любом хосте в пассивном центре обработки данных, существует риск проблем с разделением мозга.
Сегодня serverA.east перезагрузился, в результате чего сердцебиение переключилось на serverB.east. Затем Heartbeat послушно запустил приложение Java на serverB.east, чего мы не хотим.
Heartbeat также запустил mysqld на serverB.east, что правильно, потому что репликация MySQL должна продолжаться, непрерывно реплицируя изменения из западного центра обработки данных, чтобы восточный контроллер домена был готов взять на себя управление в случае необходимости.
/etc/ha.d/haresources называет скрипты /etc/init.d для mysqld и приложения Java в качестве ресурсов для запуска.
Мы хотим, чтобы Heartbeat управлял парой A / B в пассивном центре обработки данных. Он должен запускать mysqld при отказе, но не приложение Java. Но если восточный центр обработки данных является активным, то контрольное сообщение должно запускать приложение Java во время автоматического переключения при отказе.
Какой хороший способ реализовать это?
Я надеюсь на то, что нужно настроить за один шаг, когда мы переключаем активный центр обработки данных с запада на восток. В идеале он должен быть защищенным от ошибок, т.е. должно быть гарантировано, что ровно один из центров обработки данных настроен как активный.
Думаю, только с (родным) сердцебиением этого не сделать. Вы можете использовать кардиостимулятор, он может работать с кворумом, но ... У вас нет кворума. Представьте себе, что связь между центрами обработки данных не работает - каждый на востоке и западе подумает, что он только один выживший, и каждый из них запускает приложение, переключает mysql в главный режим и т. Д. И вы получите действительно разделенную позицию.
IMHO, если вам действительно нужна HA, вам нужен 3-й центр обработки данных, затем перенесите MySQL в MariaDB с кластером Galera и запустите на них свое Java-приложение, возможно, даже в режиме active-active-active.
Решение, которое я придумал, - сохранить две версии /etc/ha.d/haresources.
root:/etc/ha.d$ ls -l
lrwxrwxrwx 1 root root 16 Dec 22 10:31 haresources -> haresources-dark
-rw-r--r-- 1 root root 151 Dec 22 10:22 haresources-dark
-rw-r--r-- 1 root root 161 Dec 22 10:30 haresources-live
"Haresources-dark" используется на всех серверах в центре обработки данных DR (восток). Я использую символическую ссылку, поэтому haresources указывает на haresources-dark.
Единственное различие между двумя версиями haresources - это упоминание приложений Java. В тёмной версии не запускаются Java-приложения.
Если / когда мы когда-нибудь переключимся на центр обработки данных DR, нам придется обновить эти символические ссылки вручную. Но это приемлемо.
Это не доказательство ошибки. Мне нужно вручную настроить символические ссылки на всех моих управляемых серверах в центре обработки данных DR. И нет ничего, что могло бы гарантировать, что один центр обработки данных «темный», а другой «активный». На данный момент это будет ручное решение.