![b186d7fd5e147da15ff21fb810b5ba99.png](https://i-blog.csdnimg.cn/blog_migrate/ba91f8ab8379435475c34dbdaeffbe54.png)
作者 张彦东 · 沃趣科技数据库技术专家
出品 沃趣科技
![d9cf3164b485dff3198900a33eb4272c.png](https://i-blog.csdnimg.cn/blog_migrate/ef2a4da14af7e94ced188655af1a0fdd.jpeg)
01 多主模式
在多主模式下(group_replication_single_primary_mode = OFF),所有成员不会区分primary和standby角色。加入该组时,与其他组成员兼容的任何成员都被设置为读写模式,并且可以处理写事务,即使它们是并发执行的。
如果组复制中的某个成员停止接受写事务,例如,在某个节点意外宕机的情况下,可以将与其连接的客户端重定向或故障转移到处于读写模式的任何其他健康的成员。组复制本身不处理客户端故障转移,因此需要使用中间件框架(例如MySQL Router 8.0,代理,连接器或应用程序本身)来实现。下图说明了MGR集群的多主模式下故障转移的实现:
![23fec61b8cc567c303702d56e7140bbd.png](https://i-blog.csdnimg.cn/blog_migrate/f9ff344d4e34f7ef8a1593645ea96bf2.png)
从MySQL 8.0.14开始,如果要为集群中的每个事务都拥有一个事务一致性保证,则可以使用group_replication_consistency系统变量来做到这一点。可以选择适合集群工作负载和数据读写优先级的设置,同时考虑到提高一致性整个集群对性能的影响。还可以为单个会话设置该系统变量,用来保护特别是对并发敏感的事务。有关事务一致性的更多信息,我们在后面的章节详细描述。
02 事务描述 当MGR集群是以多主的模式在线上运行时,集群通过以下两条原则对不同成员之间的事务进行严格的一致性检测,以保证这些事务可以在集群内提交成功: 1.如果在SERIALIZABLE隔离级别下执行事务,则在集群中同步数据时,该事务将提交失败。 2.如果事务是针对具有具有级联约束的外键的表执行的,则在集群中同步数据时,该事务将提交失败。group_replication_enforce_update_everywhere_checks系统变量控制上述行为。在多主模式下,通常应将系统变量设置为ON,但是可以选择将系统变量设置为OFF来禁用检查。在单主模式下部署时,必须将系统变量设置为OFF。