我有两台 MariaDB 服务器,db1 和 db2,以及一个 HAProxy。HAProxy 应该在它们之间进行负载平衡,如果从属服务器延迟过大,则关闭其中一个。设置主要取自此处:
https://severalnines.com/resources/tutorials/mysql-load-balancing-haproxy-tutorial
有一些改进。因此,代理会检查从属延迟,并且常规检查应该从集群中移除节点(实际上,这是一个双节点多主复制)。
我有 HAProxy 版本 1.5.8,并且已经在这里查看了好几天:
https://cbonte.github.io/haproxy-dconv/1.5/configuration.html
因为 HAProxy 可能永远不会切换回发生故障的节点。因此,如果节点 A 发生故障,所有流量都应转到节点 B,直到我手动将节点 A 设置为健康(通过 socat 或使用 HAProxy 的 Web UI)。
是不是我遗漏了什么选项,还是 HAProxy 根本不适合它?顺便说一句,负载平衡并不是真正必要的。
答案1
我认为这个问题已经被问过了:防止 HAProxy 从 fallback 切换回 master
提出了两种解决方案:
- @gustavo-nobrega:在主后端将 rise 参数设置为非常高的值。
rise 99999999
这需要在故障恢复之前进行 99999999 次健康检查。 - @mikemaccana&HAproxy 官方博客:在您的后端配置中使用 stick 表。
后端 bk_app stick-table 类型 ip 大小 1 nopurge 坚持 dst 服务器 s1 10.0.0.1:80 检查 服务器 s2 10.0.0.2:80 检查备份
我更喜欢第二种解决方案,因为它不是一种变通方法。
请查看有关 stick-table 的文档:http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4-stick-table