HAProxy 中的 2 mySQL 个集群
2 mySQL clusters in HAProxy
我们使用 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
这很好用,但我们担心有一天集群会失败,我们希望 haproxy 滚动到另一个 mysql 服务器,如果上述 4 个 galera 节点中的 none 可用.我们只希望这最后一台服务器被用作世界末日场景,因为它的数据比生产集群晚一小时,更重要的是一个不同的数据集。我们的想法是,我们会在一小时后自动转入我们的非集群 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
进行类似设置,将流量路由到所有备份。
official documentation 的设置要复杂得多。
我们使用 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
这很好用,但我们担心有一天集群会失败,我们希望 haproxy 滚动到另一个 mysql 服务器,如果上述 4 个 galera 节点中的 none 可用.我们只希望这最后一台服务器被用作世界末日场景,因为它的数据比生产集群晚一小时,更重要的是一个不同的数据集。我们的想法是,我们会在一小时后自动转入我们的非集群 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
进行类似设置,将流量路由到所有备份。
official documentation 的设置要复杂得多。