我在MySQL上运行MySQL作为Ubuntu实例上的数据库。我正在使用MySQL Master-Slave复制,其中主服务器的更改将写入从服务器,从服务器的更改将不会反映在主服务器上。没关系。我使用HAProxy负载均衡器来处理所有请求将被发送到主MySQL实例的MySQL实例。如果主MySQL实例是关闭的,则MySQL实例将充当主实例,而HAProxy将发送所有请求以进行缓存。主动 - 被动场景。
HAProxy - 192.168.A.ABC
MySQL Master - 192.168.A.ABD
MySQL Slave - 192.168.A.ABE
假设MySQL主服务器(192.168.A.ABD)已关闭。现在,所有请求都将由HAProxy发送到MySQL slave(192.168.A.ABE),现在他将作为主MySQL服务器。
我的问题是
我该如何处理这种情况?
答案 0 :(得分:1)
首先,我应该说我从未使用过HA代理,所以不要直接评论。
但是,在您当前的设置中,Master(ABD)将不同步,并且不会赶上。您将不得不使用mysqlDump或类似工具重建它。
您需要的是Master < > Master
设置(与Master > Slave
相对),它允许您写入任一数据库并将其反映在另一个数据库中。这听起来并不像听起来那么直接。
假设您已经设置了master > slave
,并且它们已同步
在您要添加的主人(ABD)上:
auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
在奴隶(ABE)上添加:
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
到你的my.cnf文件。重启数据库。这有助于防止Duplicate Key Errors
。 (n.b. log-slave-updates
并非严格要求,但将来可以更容易地添加另一个奴隶)
接下来你要告诉Master(ABD)从Slave(ABE)复制。
根据MySQL的版本以及您使用的是GTID等,具体过程略有不同。但基本上你要在Master上发出一个CHANGE MASTER
语句,以便它从奴隶身上复制。
然后离开你。你可能想要避免同时写两个,因为这会打开另一个水壶。但是如果主机发生故障,你可以将写操作切换到从机,当主机重新启动时,它只会开始复制丢失的数据。
答案 1 :(得分:-1)
我在考虑你的情景
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
您无法直接在系统中添加master。要在系统中添加master,您需要执行以下步骤: 1)当主机启动时,您可以将其添加为从机。所以现在发生这种情况
Master - 192.168.A.ABE
Slave - 192.168.A.ABD
2)然后现在你可以把主人放下。意味着您可以放下192.168.A.ABD
3)然后再次将其添加为奴隶。所以在此之后你将得到低于scenarion
Master - 192.168.A.ABD
Slave - 192.168.A.ABE
您可以参考此链接 https://dev.mysql.com/doc/refman/5.5/en/replication-solutions-switch.html