Мы используем HAProxy (1.5) для проксирования mysql на 4 узла Galera. Мы используем циклический перебор и хорошо работаем для обеспечения высокой доступности и балансировки нагрузки.
См. /etc/haproxy/haproxy.cfg.
global
user haproxy
group haproxy
defaults
mode http
log global
retries 2
timeout connect 3000ms
timeout server 10h
timeout client 10h
listen stats
bind *:8404
stats enable
stats hide-version
stats uri /stats
listen mysql-cluster
bind 127.0.0.1:3306
mode tcp
option mysql-check user haproxy_check
balance roundrobin
server dbcl_01_dc1 xx.xx.xx.xx:3306 check
server dbcl_03_dc6 1xx.xx.xx.xx:3306 check
server dbcl_04_do xx.xx.xx.xx:3306 check
server dbcl_05_dc4 xx.xx.xx.xx:3306 check
Это прекрасно работает, но у нас есть опасения, что кластер однажды подведет нас, и мы хотели бы, чтобы haproxy перешел на другой сервер mysql, если ни один из вышеупомянутых 4 узлов galera не будет доступен. Мы бы хотели, чтобы этот последний сервер использовался только в качестве сценария конца света, поскольку его данные на один час отстают от производственного кластера и, что более важно, это другой набор данных. Идея состоит в том, что мы автоматически переключаемся на наши некластеризованные данные mysql с отставанием в один час и сохраняем работоспособность наших клиентов.
Кто-нибудь знает, возможно ли это с HAProxy? Итак, первые 4 сервера в циклическом режиме, и если они недоступны, в крайнем случае выберите некластеризованный сервер с одной базой данных.