2 кластера MySQL в HAProxy

Мы используем 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 сервера в циклическом режиме, и если они недоступны, в крайнем случае выберите некластеризованный сервер с одной базой данных.


person user3148002    schedule 23.09.2020    source источник


Ответы (1)


Вы можете попробовать что-нибудь с backup, чтобы помочь вам настроить аварийное переключение.

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 xx.xx.xx.xx:3306 check
    server dbcl_04_dc2 xx.xx.xx.xx:3306 check
    server dbcl_05_dc4 xx.xx.xx.xx:3306 check
    // Solution
    server dbbk_01_dc1 xx.xx.xx.xx:3306 check backup

В этом случае, если все 4 сервера в кластере перестанут работать, трафик будет направлен на резервный сервер.

Однако вы также можете попробовать несколько backup серверов как часть конфигурации.

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 xx.xx.xx.xx:3306 check
    server dbcl_04_dc2 xx.xx.xx.xx:3306 check
    server dbcl_05_dc4 xx.xx.xx.xx:3306 check
    // Solution
    server dbbk_01_dc1 xx.xx.xx.xx:3306 check backup
    server dbbk_02_dc2 xx.xx.xx.xx:3306 check backup

В приведенном выше решении HAProxy выбирает первый сервер в качестве резервного до тех пор, пока он не выйдет из строя, а в качестве аварийного переключения он использует второй сервер для обслуживания трафика, если первый резервный сервер выйдет из строя.

Если есть огромный всплеск трафика, и вы хотите, чтобы несколько резервных копий обрабатывали весь ваш трафик, вы также можете настроить что-то подобное с помощью option allbackups, который направляет трафик на все резервные копии.

Существует официальная документация и многое другое. сложные настройки.

person BinaryMonster    schedule 23.09.2020
comment
Большое спасибо BinaryMonster. Проверим и сообщим :) - person user3148002; 23.09.2020