我们使用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
这很好,但我们担心集群有一天会让我们失败,如果上面的4个galera节点都不可用,我们希望haproxy能够转移到另一个mysql服务器。我们只希望最后一台服务器被用作末日场景,因为它的数据比生产集群晚一个小时,更重要的是,它是一个不同的数据集。我们的想法是从一小时后自动切换到非集群的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
设置类似的设置,它将流量路由到所有备份。
官方文档的设置要复杂得多。