第一部分 TDSQL的发展史与产品定位
一、传统数据库 VS 分布式数据库
1、传统数据库+分库分表方案面临的问题
①数据不断增加,出现性能瓶颈。
②分库分表方案(垂直拆分,即“分库”,拆分业务;水平拆分,即“分表”,拆分数据量),手动定制分库分表规则。
③扩容对业务影响大,需要暂停业务停机扩容。
④OLAP与OLTP分开存储成本上升,数据复用低。
⑤业务改造成本高,数据迁移同步依靠经验评估存在误差。
2、分布式数据库的特点
①自动分片存储:分布式数据库结构对业务透明,逻辑上是一个统一的整体,在物理上则是将数据通过路由以及分片算法方式,将数据打散分别存储在不同的数据节点上。
②兼容性传统DB。
③在线扩展性。
④海量数据支持。
3、传统数据库VS分布式数据库
传统数据库VS分布式数据库
二、TDSQL(MySQL版)产品介绍和定位
1、TDSQL(Tencent Distributed SQL,腾讯分布式数据库)(MySQL版)是腾讯研发的一款兼容MySQL协议的国产分布式数据库。
①其适用于超大并发、超高性能、超大容量的OLTP交易类业务场景的分布式数据库。
②其采用主从高可用架构,提供弹性扩展、备份、恢复、监控等全套解决方案,有效解决业务快速发展时数据库面临的各种挑战。
2、TDSQL(MySQL版)【以下简称TDSQL】是腾讯云数据库团队维护的金融级分布式架构数据库,同时兼容MySQL/MariaDB两个内核分支。
三、TDSQL的功能与架构
1、TDSQL功能模块
2、TDSQL架构图
TDSQL架构简图
(1)LVS/TGW:负载均衡层。
(2)SQL引擎:计算节点,也会被称为Proxy或网关。
- 在TDSQL中位于接入层的位置,属于CPU密集型服务。
SQL引擎-计算节点
(3)TDSQL内核:采用主从复制架构,强同步机制。
(4)SET:数据节点,TDSQL最小数据单元,包含一主n备n+1个数据节点(一主多存)。 - 数据节点上部署MySQL数据库服务;
-
Agent(代理)属于旁路模块,主要承担MySQL实例的状态监控。如下图,Agent采集服务运行状态信息,然后上报Zookeeper。
SET-数据节点
四、TDSQL的复制方式和故障切换过程
1、TDSQL数据一致性保障
(1)MySQL原生复制方式
- 异步:主机不等备机应答直接返客户端成功。
- 半同步:主机在一定条件下等待备机应答再返回客户端成功。
(2)TDSQL复制方式 - 强同步:主机等待至少一台备机应答成功后才返回客户端成功。是TDSQL for MySQL数据主备一致、不出现丢失最核心的保障。
- 强同步机制:任何一笔应答前端成功的请求除了在主机落盘成功外还会在至少一台备机落盘成功。
-
强同步性能:在强同步复制的基础上做了性能优化改进,性能几乎和异步复制达到一样的效果。
2、TDSQL的故障处理特点
①主节点可读可写,备节点只读,任何时候只有一个主节点提供写服务,避免数据冲突。
②宁愿拒绝服务,不提供错误节点的写操作。
3、TDSQL的切换流程特点
①当故障发生时,整个切换过程完全自动化,内部schedule(调度)自动进行节点选举升主,无须人为干预。
②严格的切换机制,确保主从节点切换前后数据的完整一致性。
第二部分 TDSQL分布式实例的创建和使用
一、TDSQL分布式实例创建方法
1、TDSQL支持两种实例类型的创建
- 非分布式实例(传统关系型实例):为主从架构的关系型数据库,完全兼容MySQL/MariaDB。
- 分布式实例:为主从架构的分布式数据库,高度兼容MySQL/MariaDB。
2、分布式实例创建步骤
(1)赤兔管理台主界面 -> 点击“实例管理”,进入实例管理界面 -> 点击“创建分布式实例”。
(2)子SET资源配置:可根据资源情况分配内存、CPU、磁盘空间、日志空间等,也可以手动输入定制资源大小。
(3)子SET容灾设置:设置子SET的容灾模式、主备DB部署区、同步异步模式、服务器IP等。
(4)子SET初始化:设置子SET的字符编码、排序规则、大小写是否敏感等。
二、TDSQL分布式表的创建和分布式事务的执行
1、集中式表 VS 分布式表
- 在单实例(NoShard)模式下,一张库表分布在一个MySQL实例上。
- 在分布式(Shard)模式下,一张表根据分片的数量分布在不同的MySQL节点上(对于客户端来说,依旧是查看到一整张逻辑表)。
集中式和分布式表的差异
2、分布式表的创建和使用
(1)如何使用shardkey(分片键)
①创建表时需要显示的指定分片字段shardkey;
create table tb1(
id int unique,
user_id varchar(20),
age int,
place varchar(10)
) shardkey=id;
一般建议对应的shardkey为主键或唯一键,使其在各个节点的分布更均匀一些,不会出现数据倾斜问题。
②业务SQL的增、删、改、查包含shardkey时,SQLEngine通过对shardkey进行hash;数据根据分片算法,将SQL发往对应的分片。如果SQL中不带shardkey则该SQL会发往所有的分片。
(2)分布式表的数据分布按shardkey拆分:
①将insert数据参照分片键进行hash运算和分别存放到不同数据节点,如参照用户ID、微信ID等。
②不同的SET负责不同范围的键值,SQL引擎根据SQL中的shardkey值hash计算后发往对应的SET。
3、分布式事务采用两阶段提交协议(two phase commit,2PC)实现,在异常处理方面,采用全局死锁检测机制。
第三部分 TDSQL备份配置
一、TDSQL的备份方式和兼容的工具
1、手动备份
(1)备份存储类型有:
①HDFS:备份到分布式文件存储系统中。需要预先配置HDFS存储。
②Local:指备份到DB本地磁盘中。
③COS:指备份到腾讯云分布式存储中。
(2)备份类型有:
①物理备份:指物理数据的全备份。
②逻辑备份:产生对应的SQL语句再执行的过程,逻辑备份是物理备份的补充。
2、自动备份
(1)默认会开启全量物理备份,关闭全量逻辑备份。
(2)全量物理备份支持增量备份,可以设置增量备份间隔天数。
(3)备份周期:默认每天做一个全量备份。
(4)备份保存时间:默认保存30天,可以在运营平台修改保存时间。
备注:以上内容主要来自腾讯云课堂相关课程内容。
网友评论