HAProxy中的2个mySQL集群

问题描述

我们使用HAProxy(1.5)将MysqL代理到4个galera节点。我们使用roundrobin,并很好地实现了高可用性和负载平衡。

请参阅/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

这很好,但是我们担心集群有一天会失败,如果以上4个galera节点都不可用,我们希望haproxy转移到另一个MysqL服务器。我们只希望将最后一个服务器用作世界末日场景,因为它的数据比生产集群晚了一个小时,更重要的是,它是另一个数据集。我们的想法是,我们会在1小时后自动将其迁移到非群集的MysqL数据,并保持客户的运行状态。

有人知道HAProxy是否可以做到吗?因此,轮循中的前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

在这种情况下,如果群集中的所有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进行类似设置,以将流量路由到所有备份。

其中JENKINS configuration for clone behaviour的设置要复杂得多。