• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    【干货】腾讯云CDB属性升级,TXSQL 5.7实现真正复制强制一致
    POST TIME:2021-10-16 01:44
     

    近日,腾讯云CDB迎来MySQL 5. 7 版本的更新。MySQL 5.7GA版本从5.7. 9 到如今的5.7.18,版本已经越来越不变。从oracle官方版本发布的Release Notes中,看到比来的两个版本5.7. 17 和5.7. 18 主要是以bug修改为主。

    众所周知,腾讯云CDB for MySQL5. 7 版本除了性能的极大提升之外,也增加了很多新功能特性,好比GIS数据类型和空间索引,Json数据类型,Generated colum以及函数索引, 数据加密,还有Group Relication等等重磅功能。

    而腾讯云上已经有用户需要用到上述的一些功能,,所以也是从本年四月份就开始做TXSQL 5.7(TXSQL是腾讯云数据库团队维护的MySQL内核分支)的版本,并在四月底提交了版本进行测试。本次,腾讯云的TXSQL 5. 7 是基于MySQL 5.7. 18 版本。

    目前腾讯云TXSQL 5. 7 的第一版,在复制强制一致、自动转换MyISAM表为InnoDB表、增加差别的工作模式等方面有着非常重大的突破。

    1. 复制强制一致

    了解的人都知道,在MySQL的semisync设有超时机制,配置参数为rpl_semi_sync_master_timeout。一旦master在设定的时间内没有比及slave的确认(好比网络故障),semisync就会关闭,主动降级为默认的异步复制模式。异步复制模式最大的问题就是master不消等待slave的确认。那么当master挂掉的时候,切换到slave,就存在丢数据的可能。

    针对数据可能丢失这一点,腾讯云在TXSQL 5. 7 增加了一个新的选项rpl_semi_sync_wait_forever。在其为ON的时候,master会一直等待slave的确认。如果长时间等不到确认,系统告警,这时候可以设置rpl_semi_sync_wait_forever为OFF,来唤醒master中的等待线程,同时将semisync降级为异步模式。在这种情况下,如果master在最终收到slave确认,并且slave追赶到最新的binglog后会自动开启semisync。

    11. 方案设计

    (1) 设置rpl_semi_sync_master_timeout到一个无限大的值

    这样可以实现master一直等待,但是当想回到正常的timeout模式时,我们需要记住之前的rpl_semi_sync_master_timeout的设置值。这样可能需要加一个系统的状态变量来生存这个值。别的,这样会导致在处理rpl_semi_sync_master_timeout值变革时的逻辑变复杂。

    (2) 增加新变量rpl_semi_sync_wait_forever

    既然在上一种方案需要一个新的状态变量,腾讯云就直接增加一个变量来作为一直等待的开关。在rpl_semi_sync_wait_forever为ON的时候,master会一直等待slave的确认。如果长时间等不到确认,系统告警,则可以设置rpl_semi_sync_wait_forever为OFF,来唤醒master中的等待线程,同时将semisync降级为异步模式。在这种情况下,如果master在最终收到slave确认,并且slave追赶到最新的binglog后会自动开启semisync。

    (3)基于paxos的semisync

    MySQL5. 7 中支持rpl_semi_sync_master_wait_for_slave_count,但在某一个slave没有在rpl_semi_sync_master_timeout时间内返回确认,即即是master比及了rpl_semi_sync_master_wait_for_slave_count个slave的确认,master还是会从semisync降级到异步模式。在semisync中支持paxos协议会从根本上解决这个问题,实现真正意义上的强一致。

    目前,腾讯云选择的为(2)方案,这主要是因为,现网实例中基本都是一主一备,(3)的方案比较重,(2)的实现明显优于(1)。方案(3)适合对强一致要求更高的应用场景,目前,腾讯云已经列入开发计划,预计下半年推出。

    1.2 实现原理

    (1) 设置rpl_semi_sync_wait_forever为ON之后

    a. 新进来的事务需要一直等待。

    b. 之前老的事务如果发生超时,需要继续等待。

    因为如果用户设置为ON之后,预期是不会发生超时。

    (2)设置rpl_semi_sync_wait_forever为OFF

    如果此时有一直在等待的事务,要唤醒。最初的方案是

    signal_waiting_sessions_all()来唤醒这些事务,然后如果事务等待的时间超过了rpl_semi_sync_master_timeout,降级为异步模式。如果等待的时间wait_time < rpl_semi_sync_master_timeout,那么继续等待rpl_semi_sync_master_timeout - wait_time。但是通过sysbench压测发现这样的方案会导致死锁,。

    所以最终的简化方案是:

    1.3 新增状态

    2. 自动转换MyISAM表为InnoDB表

    MyISAM表因为不支持事务,所以存在故障恢复丢数据的可能。在复制环境下,如果使用MyISAM表,master和slave就可能出现纷歧致情况。即使腾讯云强烈建议用户只使用InnoDB表,但是还是无法制止用户在某些情况仍然去使用MyISAM表。为了解决这个问题,腾讯云提供了新的选项,在建表的时候默认将MyISAM表转为InnoDB表。

    新增变量

    可选值

    由于InnoDB内部的一些限制,会导致有些情况下转换失败。

    (1) auto-increment

    在InnoDB中只允许定义一个自增列,而且这个列必需被定义为主键。在MyISAM中则无此限制。

    (2) max key length

    在InnoDB中,innodb_large_prefix关闭的情况下,max key length不能大于767,而在MyISAM中,则不能大于1000。

    (3) row format

    在InnoDB中,innodb_strict_mode开启的情况下,row format FIXED是不支持的。

    3. 增加差别的工作模式

    除了复制强制一致、自动转换MyISAM表为InnoDB表,这两项功能的实现以外,在TXSQL 5. 7 中,腾讯云还为其增加了READ_ONLY模式。

    上一篇:腾讯云CDB迎MySQL 5.7版本,内核全面优化3倍性能提升
    下一篇:陈士渠解析10种高发诈骗,提醒市民防骗需做到“四要四不要”
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信