Mysql Master-Master有额外的奴隶

我们有两个数据中心,每个数据中心都有我们的网络应用程序(在线培训平台)的副本.主数据中心在任何给定时间接收所有流量,第二个数据中心用作故障转移(使用DNS故障转移).数据库在master-master中设置,具有不同的自动递增 – 增量值.数据中心1的服务器也有自己的本地从服务器,我们可以在其上进行备份,这样我们可以暂停复制,使用mysqldump进行备份,然后再次启动复制.

 SERVER 1 <=========> SERVER 2
    |
  Slave 1

本周末,我们对服务器2进行了故障转移,因为数据中心1正在进行有计划的网络维护.一切顺利,几个小时后我们把所有东西带回DC1.昨晚我开始在奴隶上发现复制错误,说它无法删除不存在的条目.我发现奇怪的是Slave 1在服务器2没有收到错误时(因为它们都是服务器1的从属服务器).在挖掘之后,我发现我们仍然有一个用户会去服务器2 …无论出于什么原因他们的DNS没有更新超过2天.因此,他们正在生成的新数据正在复制到服务器1,但是Slave 1没有获得这些更新,因为它们不在Server 1的binlog中.

我现在看到,由于没有预见到这个问题,我的计划很糟糕.我的问题是,我怎样才能做到这一点?我们希望保留master-master,我们希望允许Slave 1存在,不仅用于备份,还用于其他只读报告服务器等.那些掌握Master-Master的人,你做了什么来解决类似的问题?或者这只是一个糟糕的设置,我是SOL?该应用程序没有考虑到冗余,所以一切都必须在系统方面完成.

解决方法:

你想要的是server1 to binlog不仅是它自己的更新,还包括他从server2收到的那些更新,因此slave1将获得所有更新.

您只需要告诉server1执行此操作,这可以通过将log-slave-updates设置为yes来完成.

如果服务器拓扑结构有一天会发生变化,你可能也希望在server2上设置这个选项(正如Rolando在下面的评论中所说的那样).

这不会无限循环,因为replicate-same-server-id的默认设置为0(只要启用了log-slave-updates,就无法更改).此设置设置为0表示从站将使用自己的server-id跳过他收到的语句.

您的基础设施决策对我来说似乎很好.

上一篇:非阻止MySQL备份


下一篇:当我在主服务器上运行“drop database”或“drop table”命令时,是否可以将MySQL复制配置为中断?