Назад | Перейти на главную страницу

HAProxy mysql write failover

У меня есть сервер HAProxy, балансирующий нагрузку на два сервера mysql, которые находятся в режиме master-master / active-passive. Я вижу, что я успешно масштабировал все READS на два моих узла базы данных, но как мне легко переключить мастеров для операций записи, если текущий мастер записи выйдет из строя?

Прямо сейчас у меня есть файл конфигурации на каждом сервере приложений для DB_HOST_W для записи и DB_HOST_R для чтения. DB_HOST_R указывает на сервер HAProxy. DB_HOST_W указывает на один из главных узлов.

HAProxy автоматически выполняет аварийное переключение для операций READ, но в случае сбоя обновление файла конфигурации и изменение значения DB_HOST_W для 4+ серверов приложений потребует очень много времени.

Есть ли способ лучше? Что мне здесь не хватает?

Хочу отметить, что у меня следующая конфигурация:

server primary 10.152.142.184:3306 check
server secondary 10.152.142.185:3306 check backup

Но мне это не нравится, потому что, хотя он отправляет все операции WRITE на первичный, он также отправляет ВСЕ операции READ на первичный и устраняет масштабируемость.

Не говоря о целесообразности вашего решения, способ достижения вашей цели - определить два внешних интерфейса, прослушивающих два разных порта, например, 3306 и 3307, и два бэкэнда, один с вашей конфигурацией только для чтения и один с вашей конфигурацией записи. Затем измените свое приложение, чтобы DB_HOST_R и DB_HOST_W могли включать номер порта.

Другое решение - назначить серверу другой IP-адрес и привязать два внешних интерфейса к конкретным IP-адресам, а не bind *:3306 и два бэкенда, как указано выше.

В идеале ... это должно быть реализовано на стороне приложения.

Для реализации на стороне сервера мы использовали Кластер MySQL . Я всегда считал, что установка MySQL типа master-master требует больше работы, чем она того стоит.

Основная проблема, с которой вы столкнетесь при этой настройке, - keepalive поведение. Если ваше приложение ожидает взаимодействия с той же базой данных, и оно терпит неудачу (или просто балансирует нагрузку на другую), вы жестяная банка увидеть интересные ошибки в зависимости от вашей реализации.

Короткие && Длинные

MySQL Cluster предназначен для такого рода вещей, но есть ошибки которые вам нужно будет обсудить со своими командами разработчиков / систем.