3个节点的主-主复制

Swa*_*eti 7 mysql replication multi-master

我需要用 3 个节点配置 mysql 主/主复制。目前我有主/从设置,我需要将它移动到具有 3 个节点的主/主。我已经阅读了一些关于在环结构中配置它的帖子,我对此并不紧张。

如果有人在生产中有类似的设置,如果您能建议我如何实现这一点,那就太好了。

jyn*_*nus 8

您不想以循环方式进行多主复制的原因有多种,但大多数可以归结为一个原因:您将有 3 个不同的单点故障。检查这篇文章(这正是您所要求的,但可能不是您想要的)。标准复制很容易出现数据漂移,因为它是异步的,如果幸运的话,所有节点的复制都会停止,或者 - 如果不幸的话,复制会在节点之间继续处理不同的数据。

虽然 5.6 GTID 和其他功能最大限度地减少了这些一致性问题,但您仍然存在 3 个单点故障,因为复制是单主的(多源复制仅在 MariaDB 和 MySQL 5.7 中可用,不需要循环复制)。

如果您想要一个多主(随处写入)的设置,我强烈建议采用不同的技术来管理节点之间的冲突。Galera(您也可以在Percona XtraDB ClusterMariaDB Cluster的名称下找到它)可能是要走的路。它适用于 WAN,“解决”冲突(回滚它们并重试事务)是多线程的,可用于替代常规复制和/或用于集群。如果您的目标是 HA 或读取扩展,则非常推荐。它是免费和开源的,非常广泛(我已经帮助过几家银行和托管公司使用它),与标准复制兼容并使用标准 InnoDB(不是不同的引擎)进行存储。

当然,最大的缺点是它是一种不同的技术,可能需要一些时间才能理解(尽管可能比其他集群技术更容易),并且它有一些小怪癖。但是,在我个人看来,值得花时间学习它以使事情“正常工作”。

你能设置循环复制吗?当然,我上面提到的文章中你有典型的建议log-slave-updatesauto_increment_incrementauto_increment_offset为每个节点。但是,可能正在运行它的少数人仍然必须避免多主写入或在非常受控的环境中运行它,在这种环境中您不能并发地对相同的表执行更新和删除。有些人还过度设计了涉及 GTID 和半同步复制等的解决方案,但通常并非所有公司都有奉献精神和知识,将补丁放在未为此准备的协议上。