HAProxy mysql 写入故障转移

HAProxy mysql 写入故障转移

我有一个 HAProxy 服务器,它对两个处于主-主/主动-被动模式的 mysql 服务器进行负载平衡。我可以看到,我已成功将所有读取扩展到我的两个数据库节点,但如果当前写入主服务器发生故障,我该如何轻松地切换主服务器以进行写入操作?

目前,我在每个应用服务器上都有一个配置文件,用于写入的 DB_HOST_W 和用于读取的 DB_HOST_R。DB_HOST_R 指向 HAProxy 服务器。DB_HOST_W 指向其中一个主节点。

HAProxy 会自动处理 READ 操作的故障转移,但是在发生故障时必须更新配置文件并更改 4+ 个应用服务器的 DB_HOST_W 值,这将非常耗时。

有没有更好的方法?我在这里遗漏了什么?

我想指出我有以下配置:

server primary 10.152.142.184:3306 check
server secondary 10.152.142.185:3306 check backup

但我不喜欢它,因为虽然它将所有写操作发送到主服务器,但它也将所有读操作发送到主服务器,从而消除了可扩展性。

答案1

不管您的解决方案是否可取,实现目标的方法是定义两个前端,监听两个不同的端口,例如 3306 和 3307,以及两个后端,一个使用只读配置,一个使用写入配置。然后更改您的应用程序,以便 DB_HOST_R 和 DB_HOST_W 可以包含端口号。

另一个解决方案是为服务器分配另一个 IP 地址,并让两个前端绑定到特定的 IP,而不是bind *:3306像上面那样有两个后端。

答案2

理想情况下...这将在应用程序端实现。

对于服务器端实现,我们采用了MySQL 集群。我始终认为主-主 MySQL 设置的工作量比其本身的价值要大。

您在这种设置中遇到的主要问题是keepalive行为。如果您的应用程序希望与同一个数据库通信,但该数据库失败了(或者只是将负载平衡到另一个数据库),您根据您的实施情况查看有趣的错误。

短长

MySQL Cluster 就是为这种事情而设计的,但是陷阱您需要与您的开发/系统团队一起进行审查。

相关内容