云原生数据库TDSQL-C 容灾的实践和探索
云原生数据库TDSQL-C作为腾讯云架构平台部核心数据库产品之一,致力于为云上ToB用户和公司自研业务提供集高性能、低成本、大存储、低延迟、秒级扩缩容、极速回档、Serverless化七大特性于一体的企业级数据库服务。本文将给大家分享《TDSQL-C 容灾的实践和探索》,主要内容有以下三个方面:
1 云原生数据库和传统数据库的架构对比
2 MySQL数据库的容灾部署模型
3 TDSQL-C 异地容灾系统的实践
一:云原生数据库和传统数据库的架构对比
传统的MySQL数据库

传统的MySQL数据库架构概述:通过Binlog复制来保证数据的冗余,数据副本之间通过异步复制、半同步复制或强同步复制来保证数据的可靠性。传统MySQL的数据会存储在本地,一般包括数据文件、Redo日志文件、Binlog文件以及数据字典文件等,在通过Binlog同步到备库之后,备库同样需要把数据完全在本地再生成一份,所以传统MySQL数据库是一个非常重IO的服务。
基于Binlog复制和重IO这两个特点,导致传统MySQL产生许多已知的问题:
- 主从延迟不可控:Binlog同步到备机之后要回放大事务,主动延迟可达小时级别,甚至极端的情况下会到天级别。在这种主从延迟比较大的情况下,如果RW发生故障这个时候就要做取舍,是为了保证数据一致性等Relaylog回放完成,还是要保证可用性立即切换。即使Relaylog正常回放完成,也可能存在数据不一致的问题。
- 恢复耗时不可控:如果在运行过程中Crash了,在拉起的时候,由于需要回放Redo日志,Crash Recovery耗时也是不可控的。
- 扩展性较差:每次要扩展一个从节点的时候,都会需要把RW上面的数据通过备份导入到一个新节点上,然后再去追Binlog来扩展新节点,在数据量比较大的情况下,这个扩容耗时也是不可控的。
云原生数据库TDSQL-C

云原生数据库TDSQL-C架构概述:在设计的时候以日志即数据库为理念,通过Redo日志还原出所有的数据;存储计算分离,把计算层相关的无效IO进行下沉、卸载,把日志下沉到存储层,实现计算层完全无状态化;主从之间抛弃了原来传统数据库的Binlog复制,采用更加高效的物理复制。
- TDSQL-C具有极致弹性能力。基于计算层无状态,可快速添加RO节点、只读节点。RO节点和RW节点共用存储池的一份数据,因此只需要找一个新的RS机器拉起新的计算节点。这个过程相比于传统数据库还要进行备份导出的形式,耗时大大降低。用运营数据来看,TDSQL-C添加一个RO节点可在20秒内完成。
- TDSQL-C的Serverless形态,实现了在完全不使用、没有流量的情况下,将计算节点暂停,减少计算层费用;在需要第一次连接的情况下,立即拉起,恢复时间小于2秒。
- 基于Redo复制,TDSQL-C避免了大事务产生的主从延迟问题。目前TDSQL-C主从延迟可以稳定在20ms以内,对于主从延迟有一定要求的业务,是一个很大的优势,甚至可以做到全局一致性。
- TDSQL-C的秒级Recovery,极速备份回档能力。传统的数据库是以Binlog做备份回档,TDSQL-C只需在存储层做快照就可以,快照备份秒级完成;回档是多个分片并行导入,可达GB级以上。
二:MySQL数据库的容灾部署模型
MySQL数据库常见的容灾部署模型,有以下两种:

跨AZ部署(如上图):
- 一种是两AZ有三副本,其中AZ1有两副本,AZ2有一个副本;若是四个副本,那么AZ2会再多一个副本,以此保证AZ1挂了之后AZ2还能有足够多的副本。
- 另外一种是3个AZ,那么会把3个副本平均分布在每个AZ上。

跨Region部署(如上图):
跨Region一般是以灾备实例的形态存在。备Region的Primary节点一般会设置为只读。在Region1出现异常的情况下,为了保证数据的一致性,需要人工决策是否切换,所以一般也不会自动切,而是选择手动切换。
在MySQL生态,跨AZ或者Region部署有以下几个特点:
- 一般采用两AZ或者三AZ部署方式;
- 数据以逻辑日志或者物理日志格式进行同步;
- Primary与Replica之间使用异步或者半同步方式连接;
- 数据一致性以及故障的发现和处理通过外围系统或者内置的一致性协议来保证;
三:TDSQL-C异地容灾系统的实践

云原生数据库TDSQL-C在异地容灾能力构建上,近期推出了跨可用实例功能,支持跨AZ的手工和自动切换。下文将介绍容灾系统的实现原理:
多维一体容灾系统概述:
● Agent与实例同机部署,负责采集实例状态,并定期上报给Scheduler。比如采集实例的主从状态(主从同步是否异常、主从同步的延迟);同时还会有MySQL进程的存活状态(正常、hang住、oom、crash等);另外还会对机器本身的硬件做检测(磁盘有坏块或者是内存、CPU异常等)。
● 通过心跳上报给Scheduler,Scheduler根据实例状态做出不同的故障决策,确定是否需要发起切换,以及是可用区内的切换还是跨可用区的切换。
● 另外,Scheduler通过ZK选主来保证自己的高可用。
故障切换步骤:
1. 当主可用区发生故障,ZK自动切换,Scheduler通过ZK重新选主;
2. Scheduler与发生故障AZ的Agent丢失心跳(心跳也是租约的一种方式,同时Agent与ZK本身也会定时续租);
3. Scheduler Double-check对应Agent的租约信息;
4. 等待Agent租约超时后,Scheduler发起故障切换;
跨AZ切换的挑战:
主要有两点,防双写和防误切。防双写是为了避免切换可用区后,原可用区仍然可读写,造成数据混乱。防误切则是为了避免产生跨AZ访问,导致业务访问延时增加。
防双写的策略是:
● ZK降级变成只读,Agent去续租的时候,会续租失败;
● Scheduler降级后会自动退出;
● Agent租约过期后,对数据库实例设置只读,防止旧实例有新的写入;
防误切的策略是:
● 引入第三方跨AZ系统,形成三级或多级租约系统
Agent除了与Scheduler、ZK续租,我们还引入了一个在腾讯内部广泛使用的第三方租约系统。在运营过程中,即使出现人为误操作或者软件Bug,导致Scheduler和ZK均不可用,系统仍然可通过与第三方高可用系统的续租防止大规模误切。
● 引入外围拨测系统,形成节点内外、长短链接全方位拨测机制
Agent本身是有拨测的,Agent的拨测是在本地节点内部的拨测,节点内部通过长链接进行拨测,然后定时采集。我们在外围引入拨测系统后,可采用短链接的形式对各个节点进行周期性探活。
● Scheduler根据拨测结果、各级租约状态作出故障决策
当出现故障的时候,Scheduler会根据租约信息、拨测信息,以及实例的状态信息,综合多方面、多维度信息做出故障决策,尽可能防止误切。
注意:
目前腾讯云原生数据库TDSQL-C有新春特惠活动,新人1.88元起
云原生数据库TDSQL-C 容灾的实践和探索的更多相关文章
- 云栖干货回顾 | 云原生数据库POLARDB专场“硬核”解析
POLARDB是阿里巴巴自主研发的云原生关系型数据库,目前兼容三种数据库引擎:MySQL.PostgreSQL.Oracle.POLARDB的计算能力最高可扩展至1000核以上,存储容量可达100TB ...
- 又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖
日前,开源技术盛会PostgresConf.CN & PGconf.Asia2021大会(简称2021 PG亚洲大会)在线上隆重召开,腾讯云作为业内领先的云数据库服务商受邀出席,多位专家深入数 ...
- 腾讯云原生数据库TDSQL-C架构探索和实践
作为云原生技术先驱,腾讯云数据库内核团队致力于不断提升产品的可用性.可靠性.性能和可扩展性,为用户提供更加极致的体验.为帮助用户了解极致体验背后的关键技术点,本期带来腾讯云数据库专家工程师王鲁俊给大家 ...
- 为什么CynosDB叫真正的云原生数据库?
本文由腾讯云数据库发表 注:本文摘自2018年11月22日腾讯云数据库CynosDB新品发布会的演讲实录.随着互联网信息的发展,大家也对云这个词汇也不是特别陌生了,作为全球首选的云服务厂商之一的腾讯云 ...
- 云原生数据库 TDSQL-C 产品概述、产品优势、应用场景
云原生数据库 TDSQL-C(Cloud Native Database TDSQL-C,TDSQL-C)是腾讯云自研的新一代高性能高可用的企业级分布式云数据库.融合了传统数据库.云计算与新硬件技术的 ...
- 比MySQL快6倍 深度解析国内首个云原生数据库POLARDB的“王者荣耀”
随着移动互联网.电子商务的高速发展,被使用最多的企业级开源数据系统MySQL面临着巨大挑战——为迎接“双11"的高并发要提前做好分库分表;用户不断激增要将读写分离才能应对每天上亿次的访问,但 ...
- 云原生数据库崛起,阿里云POLARDB当选世界互联网领先科技成果!
第六届世界互联网大会来了!千年水乡古镇乌镇又一次吸引了全世界的目光. 刚刚,阿里云自研数据库POLARDB在会上当选世界互联网领先科技成果.POLARDB解决了企业在云时代的数据库难题,帮助企业在数小 ...
- 深度解析国内首个云原生数据库POLARDB的“王者荣耀”
随着移动互联网.电子商务的高速发展,被使用最多的企业级开源数据系统MySQL面临着巨大挑战--为迎接"双11"的高并发要提前做好分库分表;用户不断激增要将读写分离才能应对每天上亿次 ...
- 云原生数据库mysql对共享存储分布式文件系统的接口需求分析
1. 引言 云原生数据库跟分布式mpp数据库是有差异的,虽然两者都是计算与存储分离,但是在资源的占用上有所不同.云原生数据库是shard everything架构,其依赖的存储资源.内存资源.事务资源 ...
- 再测云原生数据库性能:PolarDB依旧最强,TDSQL-C、GaussDB变化不大
1.摘要 近期,腾讯云数据库在文章「腾讯云TDSQL-C重磅升级,性能全面领跑云原生数据库市场」中提到,某些场景下性能有非常大的提升,且超过国内某橙色云厂商.恰好,在5月份,我们对各个厂商的云原生数据 ...
随机推荐
- tempdb数据文件暴增分析
背景 某客户tempdb数据文件突然暴增,导致磁盘可用空间紧张,让我们找到暴增的原因. 现象 登录到SQL专家云,通过趋势分析进行回溯,在4月12日,tempdb数据文件在3个小时内从10GB涨到了8 ...
- SPOJ PHONELST - Phone List | UVA11362 Phone List | LibreOJ10049. 「一本通 2.3 例 1」Phone List
简要题意 \(t\) 组数据,每组数据给定 \(n\) 个长度不超过 \(10\) 的数字串,判断是否有两个字符串 \(A\) 和 \(B\),满足 \(A\) 是 \(B\) 的前缀,若有,输出 N ...
- Python 内置界面开发框架 Tkinter入门篇
本文大概 4158 个字,阅读需花 10 分钟 内容不多,但也花了一些精力 如要交流,欢迎关注我然后评论区留言 谢谢你的点赞收藏分享 首先,今天先给大家拜个好年!新年快乐,恭喜发财!为了感谢大家对我的 ...
- 在elasticsearch中简单的使用script_fields
目录 1.背景 2.准备数据 2.1 mapping 2.2 插入数据 3.案例 3.1 格式化性别 1-男 2-女 -1-未知 如果不存在sex字段,则显示-- 其余的显示 ** 3.1.1 dsl ...
- Java入门与进阶P-3.7+P-3.8
猜数游戏 让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它这是大了还是小了,知道用户猜中为止,最后还要告诉用户它猜了多少次 因为需要不断重复让用户猜,所以需要用到循环 在实际写出程序之前 ...
- Ubuntu 22.04 GCC Arm 12.2.rel1编译 DAPLink
ARMmbed / DAPLink 项目 仓库地址 https://github.com/ARMmbed/DAPLink Arm Mbed 应该属于Arm的机构或者是Arm资助的机构. 常用的 DAP ...
- chatGPT 桌面版安装教程
概述 标题党了,首先声明 ChatGPT 官方没有桌面版,目前市面上很多的桌面应用也在是浏览器上包了一层,而且大多做的比较粗糙,不太好用,所以都不太推荐. 作为一名骨灰级的程序员,ChatGPT 的重 ...
- 快速入门API Explorer
摘要:华为云API Explorer为开发者提供一站式API解决方案统一平台,集成华为云服务所有开放 API,支持全量快速检索.可视化调试.帮助文档.代码示例等能力,帮助开发者快速查找.学习API和使 ...
- JAVA虚拟机23---JAVA与线程
1 线程简介 线程是比进程更轻量级的调度执行单位,线程的引入,可以把一个进程的资源分配和执行调度分开,各个线程既可以共享进程资源(内存地址.文件I/O等),又可以独立调度 目前线程是Java里面进行处 ...
- CentOS安装mysql、MariaDB以及更改数据库存储路径
注意:此方法只适用于新的机器或没有重要数据库表(可随意删除)的机器安装,如需升级版本参考下方链接!!! https://www.jianshu.com/p/955ff6065935 一.安装操作 1. ...