16. 数据一致性、安全性保障 | 深入浅出MGR

本文介绍MGR如何保障数据一致性及安全性。

1. MGR事务一致性

对于MGR这样的”分布式”系统而言,需要在多个节点间保障事务的一致性,无论各个节点状态正常,或者个别节点处于故障修复状态,都要能保证各个节点的事务数据最终一致。所谓的最终一致性是指当所有写事务请求都停止后,各个节点上的事务数据是一致的。

与MGR数据一致性相关的因素有这几种:

  • 节点发生变化,添加 或 删除。
  • 节点故障修复。
  • Primary节点发生切换。

通过选项group_replication_consistency可以设置节点的事务一致性保障等级。这个选项是从MySQL 8.0.14开始引入的,默认值是EVENTUAL,即最终一致性,这也是在8.0.14之前,未引入该选项前MGR的默认事务一致性保障级别。

2. Primary节点切换时如何保障事务一致性

在单主模式中,当Primary节点切换时(无论是手动切换还是因为故障转移),新的Primary节点有两种可选方式应对如何处理积压事务:

1.第一种:不处理积压事务,立即响应读写事务请求。这时,事务可能会读取到旧数据。

2.第二种:优先处理完积压事务后再响应读写事务请求。这时,新的Primary节点可能需要耗时更久才能响应读写事务请求,这取决于积压事务队列大小。

在MySQL 8.0.14前,由于不支持设置事务一致性等级,选择了可用性最大化的方案,即上述的第一种方案。

P.S,多主模式下,由于每个节点都可以响应读写事务请求,因此不存在这个问题。

3. 事务数据一致性保障

在MGR中,并不是所有的事件(事务)都是同步的,部分流程是异步的,因此Secondary节点上可能存在数据延迟,也就是说在Secondary上可能读取到旧事务数据。

从MySQL 8.0.14开始,通过设置选项group_replication_consistency可以控制RO(只读)、RW(读写)事务在读取或写入数据前的一致性等级,可以避免读取到旧数据,或者写入数据后尽快同步到其他节点,以满足各种不同应用场景对事务一致性等级的要求。

我们先了解几个基本概念,事务同步点可分为读时事务同步以及写时事务同步,结合MGR的事务机制,更具体的说就是事务执行前(BEFORE)和事务执行后(AFTER)。

接下来,我们一一介绍选项group_replication_consistency都有哪些可选等级。

P.S,每个节点上可以单独设置不同的事务一致性等级,而且可做session级修改,但是非常不建议这么做。

3.1 EVENTUAL

在这个等级下,RO和RW事务执行前,都不会要求等待积压事务先行应用完成。

这是默认等级,也是在引入该选项前的行为。这意味着以下几点:

  • RW事务无需等待,而可能先于其他节点进行外部化(将事务广播到其他节点)。
  • RO事务可能读取到旧数据。
  • 在Primary节点切换时,新产生的RW事务有可能会因为冲突而回滚。

3.2 BEFORE_ON_PRIMARY_FAILOVER

当发生Primary节点切换时,在新的Primary上需要先等待把所有来自旧Primary节点的积压事务应用完毕,之后才能正式完成切换,转成ONLINE状态,成为新的Primary节点,继续响应新的事务请求。

这么做可以保证在发生故障转移时,客户端不会查到旧数据,保证了数据一致性,不过客户端上也可能会产生延迟等待。

3.3 BEFORE

RW事务在应用之前,RO事务在执行之前,都要先等待前面堆积的事务完成。

这可以保证RO事务总能读取到最新事务,但对于RW事务而言,只是等待堆积事务应用完成,但并不要求其他节点上也完成该事务。

3.4 AFTER

它比BEFORE更近一步,要求RW事务在其他节点上也要等待应用完毕。这样一来,后续的事务在任何节点上就都能获取最新事务数据。

事实上,要慎用该级别及更高以上级别,可能会引发其他问题,可参考这个文章:技术分享 | 为什么MGR一致性模式不推荐AFTER

3.5 BEFORE_AND_AFTER

一致性级别要求最高,对RO和RW事务都要求同步事务数据。也就是说,RW事务在应用之前,要先等待前面堆积的事务完成,并且还需要等待它的事务变更在其他所有节点上也都应用;RO事务在执行之前,也要先等待前面堆积的事务完成。

4. 一致性级别选择建议

对于绝大多数场景,使用默认的 EVENTUAL 等级就足够了;尤其是在使用单主模式时,如果需要实时读取事务数据,只需向Primary节点发起请求即可。

进一步,如果担心Primary节点切换时会读取到旧事务数据,可以提高到BEFORE_ON_PRIMARY_FAILOVER级别。

更进一步,如果希望在Secondary节点也能及时读取到最新事务数据,以此提高读扩展能力,可以提高到BEFORE级别。

更高的一致性级别就不再建议使用了,潜在的风险以及bug比较多。

P.S,各个节点的一致性级别最好都设置成一样,并且在运行过程中也不要修改其session级选项值,避免造成不可预料的影响。

小结

本文介绍了MGR中几个不同的数据一致性保障等级,以及应该选择何种等级的建议。

参考资料、文档:

MySQL 8.0 Reference Manual(​https://dev.mysql.com/doc/refman/8.0/en/group-replication.html)。

数据库内核开发 – 温正湖(​https://www.zhihu.com/column/c_206071340)。

Group Replication原理 – 宋利兵(https://mp.weixin.qq.com/s/1iO-KISAU1HLSzEVLrxG9g)​。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/266280.html<

(0)
管理的头像管理
上一篇2025-05-05 21:31
下一篇 2025-05-05 21:32

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注