主页 > 知识库 > 【干货】腾讯云CDB属性升级,TXSQL 5.7实现真正复制强制一致

【干货】腾讯云CDB属性升级,TXSQL 5.7实现真正复制强制一致

热门标签:铁路电话系统 检查注册表项 电销业务 企业做大做强 百度AI接口 企业认证 万科 美团
 

近日,腾讯云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模式。

标签:乌兰察布 柳州 烟台 pos机业务 亳州 吕梁 郑州 福州

巨人网络通讯声明:本文标题《【干货】腾讯云CDB属性升级,TXSQL 5.7实现真正复制强制一致》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266