HAProxy mysql写故障转移

我有一个HAProxy服务器负载平衡两个主服务器在master-master /主动 – 被动模式。 我可以看到,我已经成功地将所有的READS扩展到了我的两个数据库节点,但是如果当前的写入主控closures,我怎样才能轻松地将主控切换为写操作?

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

HAProxy自动处理READ操作的故障转移,但是如果发生故障,必须更新configuration文件并更改4个以上App Server的DB_HOST_W值将非常耗时。

有没有更好的办法? 我在这里错过了什么?

我想指出,我有以下configuration:

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

但我不喜欢它,因为虽然它将所有WRITE操作发送到主要,但它也会将ALL READ操作发送到主要,并删除可伸缩性。

不谈你的解决scheme的可行性,完成你的目标的方法是定义两个前端监听两个不同的端口,例如3306和3307,两个后端一个用你的只读configuration,另一个用你的写configuration。 然后更改您的应用程序,以便DB_HOST_R和DB_HOST_W可以包含一个端口号。

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

理想情况下…这将在应用程序方面执行。

对于服务器端实现,我们使用了MySQL Cluster 。 我总是发现主要的MySQL设置是比他们的价值更多的工作。

您将会遇到的主要问题是keepalive行为。 如果您的应用程序希望与同一个数据库交谈并且失败(或只是将负载平衡到另一个数据库),则可以根据您的实现看到有趣的错误。

短长

MySQL集群是专为这种事情而devise的,但是您需要与您的开发/系统团队一起审核。