Для моего приложения я хотел бы иметь высокодоступную установку MySQL / MariaDB. Я нахожу Galera Cluster
быть интересным в этом случае из-за автоматического резервирования данных и немедленной доступности. Мои цели таковы:
Скрыть сложность кластера от приложения (кластер может стать больше и изменить топологию, добавив некоторые асинхронные узлы)
Прозрачная обработка отказа вне приложения
Обеспечьте балансировку нагрузки для некоторых распространенных операций записи и чтения для обоих синхронных экземпляров,
Тем не менее разрешить приложениям доступ к определенным, например async, узел (ы), который оптимизирован, скажем, для последовательного чтения для аналитики. Если этот узел выйдет из строя, я бы хотел, чтобы приложение переключилось на стандартный экземпляр Galera, чтобы все оставалось в рабочем состоянии.
Я прочитал много статей о том, как настроить высокую доступность и балансировку нагрузки. MySQL
кластер с тандемом HAProxy
и Keepalived
, но ни один из них не объясняет, зачем вообще использовать этот дуэт для сценария MySQL / MariaDB / Galera. Некоторые примеры:
HAProxy + Keeplived, любой кластер MySQL CE + Galera: https://severalnines.com/resources/tutorials/mysql-load-balancing-haproxy-tutorial
HAProxy + Keepalived, Galera Cluster: http://www.fromdual.com/making-haproxy-high-available-for-mysql-galera-cluster
HAProxy + Keepalived, асинхронный кластер: https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing--3
Только HAProxy: https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-mysql-load-balancing--3
Когда дело доходит до назначения виртуального IP-адреса, этим занимается Keepalived
на основе собственных скриптов для проверки работоспособности и VRRP
.
Балансировка нагрузки также поддерживается Keepalived
, реализовано несколько алгоритмов, с помощью которых LB-соединения связываются с пунктами назначения: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-initial-setup-VSA.html
HAProxy предлагает некоторые расширенные функции для HTTP, но это не мой случай.
В чем преимущество использования HAProxy
с участием Keepalived
только что Keepalived
для MySQL для сценария, представленного выше?