Я пытаюсь настроить репликацию MySQL с высоким уровнем доступности master-slave. Я планирую иметь два сервера в разных сетях, один из которых будет работать как главный, а другой - как подчиненный:
A B
10.0.1.0/24 | 10.0.2.0/24
__________________________
Master -----|---> Slave
10.0.1.20 | 10.0.2.20
Мои серверы приложений будут подключаться (и выполнять запись mysql) 10.0.1.20
если система полностью работоспособна.
В состоянии аварийного переключения ведомое устройство будет повышено, а ведущее устройство отключено следующим образом:
A B
10.0.1.0/24 | 10.0.2.0/24
__________________________
(DOWN) | Master
10.0.1.20 | 10.0.2.20
Итак, сервер A
сейчас не работает и B
был повышен до уровня мастера MySQL. Однако мне нужно, чтобы мой сервер приложений знал, что B
был продвинут, и все будущие записи должны быть сделаны 10.0.2.20
.
Это тривиально для случая, когда есть только один ведущий и один ведомый, однако как с этим поступать, если есть один ведущий и 3 ведомых? Как приложение PHP узнает, на какой сервер mysql писать? Мне нужно, чтобы продвижение подчиненного сервера mysql было автоматическим и происходило в течение 5 секунд. Я не могу сделать так, чтобы оба сервера использовали общий виртуальный IP-адрес с использованием тактового сигнала, потому что они находятся в двух разных сетях в совершенно разных физических местах.
Как это аварийное переключение обычно выполняется с аналогичными топологиями?
Используйте keepalived, ucarp, heartbeat или что-то подобное, чтобы иметь виртуальный главный IP-адрес, который будет отвечать на приложения php.