我们目前在单个数据中心运行一个 3 节点 Percona Xtradb 集群。我们希望在发生灾难时增加容错能力,以防止对单个数据中心的依赖,并将我们的 Percona 数据与第二个数据中心同步,以便在发生此类事件时我们可以轻松地将我们的应用程序切换到连接到新的、同步的集群。
虽然我知道我可以简单地在许多数据中心添加更多主节点,但我们不能牺牲不同位置的数据中心增加的往返写入时间。相反,我想知道是否可以使用 MySQL 复制来实现这一点。我的想法是按以下方式进行设置:
3 节点主 Percona 集群 -> MySQL 副本数据库 -> 3 节点辅助 Percona 集群
虽然我意识到可能会有一些轻微的副本延迟,并且数据可能会有几秒钟的不同步,但这是我们愿意做出的权衡。有了这样的设置,我们可以轻松地在切换开关时切换集群。
我有几个问题:
- 这是个坏主意吗?我个人认为这没什么大问题,但我是不是忽略了什么?
- MySQL 从属副本是否可以同时接收数据(从主 Percona 集群)并写入数据(到辅助 Percona 集群)?
- 如果主 Percona 集群发生故障,我们开始使用/写入辅助 Percona 集群,会发生什么情况?当主 Percona 集群恢复时,我们如何轻松地将其与辅助 Percona 集群中的新数据同步?我们可以简单地(暂时)创建一个 6 节点集群,然后 Percona 来完成这项工作吗?
我知道有很多疑问,但非常感谢您的帮助!
答案1
集群 -> MySQL -> 集群有效。虽然我自己还没有尝试过,但我知道几个月前 Cluster->Cluster 将成为 Soon™ 选项,因此您可以跳过中间步骤。从 PXC 的角度来看,您将自己从其中一台机器上解放出来,而其他机器将自己解放出来;您并不是“同时接收数据和写入数据”,而是接收数据和允许接收您的数据,如果这种区别有意义的话。
要重新同步,只需像 master-master 一样设置并手动auto_increment_increment
调整auto_increment_offset
每个集群。这可能很简单,但在最坏的情况下,这意味着限制 PXC 选择的 auto_increment_{increment,offset},这将是一个小补丁。
加分点:为了获得最大的复制速度,请修改(在sql_log_bin=0
会话中!)中间数据库上的表以使用黑洞引擎。