一个小理论问题。我已经设置好了一组 2 节点 MySQL 5.1 集群,这些集群由几个 MMM 实例控制。
我们开始进行一些测试,高兴地杀死了 -9 写入器节点,一切顺利,应用程序顺利运行,完全没有注意到 DBMS 的混乱。
然后我想,如果在生产中首先服务器 A 发生故障,服务器 B 接管并完成更多工作,最后服务器 B 也发生故障,该怎么办?
如果系统管理员首先从 A 重新启动集群,然后加入 B,同时对 A 的过时数据进行工作,会怎样?
MySQL 是否具有仲裁机制,可以使 A(甚至 B)保持在恢复模式,直到它决定要继续的最新事务是什么?
如果这是常见问题解答,请致谢并道歉...
答案1
这可能更像是一个入门答案,以便展开讨论。我希望一些 MySQL 专家能来给你正确的答案... ;-)
但是对于这种情况,我已将我的集群配置为使用偏移自动更新序列,以便当您将主服务器重新联机时,写入从服务器的数据不会发生冲突;
因此在主 master 上
auto_increment_increment=10
auto-increment-offset=1
在从属机器上(每个从属机器都有不同的偏移量)
auto_increment_increment=10
auto-increment-offset=2
这意味着您可以将二进制日志从从服务器复制回到主服务器,以恢复主服务器中断期间写入那里的数据。
如果您使用的是 MySQL 5.1+(没有 server-id 错误版本),那么您可以配置 master-master,并让主服务器自动将“丢失”的查询从从属服务器复制回来。
(不幸的是,我认为这超出了 MMM 的能力,不过话又说回来,我已经有几年没看过 MMM 了)