TDSQL另外一个辅助特性:数据同步和备份。
1.TDSQL数据同步组件
数据同步的重分为三个场景:
个场景一个数据汇总。比如,多个数据库实例的数据同步到一个数据库实例,如保险行业用户多喜欢将全国多个区域数据库实例的数据同步到全国总库进行统计分析。
第二个就跨城的容灾。跨城容灾,一般一个城市的分布式数据库的数据需要同步到另外一个城
市异构的分布式数据库中灾备。有的时候们要异构数据库的跨城容灾,比如说主城一个十六节的数据库,它非常庞。但备城,可能们基于成本考虑,选用的设备数量、机房都要差一些。比如灾备实例只有两个物理分片。一个两分片数据库实例,而另外一个时十六分片的数据库实例。从十六分片同步到;两分片,这一个异构的数据库的同步,这时候们就需要利用数据同步这个组件。
第三个迁移。异构数据库的迁移,将数据从TDSQL同步到MySQL、Oracle、PostgreSQL等数据库。当然,从TDSQL到TDSQL一种同步,更有一种TDSQL到其他异构数据库。举个例子,张家农商行,它的核心系统需要从传统的国外商用数据库替换为TDSQL,可能还需要一定的风险的防范。最终们给了一套用Oracle作为TDSQL灾备示例的方案,通过数据同步组件,将TDSQL的数据准实时同步到Oracle。假如在极端情况下需要将切到Oracle,们也有这个能力的。
当然数据迁移也体现了TDSQL放的思想,既然允许用户将数据迁移到TDSQL,如果有一天用户可能觉得TDSQL不很好,觉得有更好的产品可以替代它,TDSQL支持用户把数据迁走。
2.TDSQL数据备份
TDSQL支持的实时热备,同时这个备份基于备机上的备份,备份支持镜像和binlog的备份。镜像又支持物理镜像和逻辑镜像(也叫物理备份和逻辑备份)。
物理备份的好处速度快,直接操纵物理文件,缺只能备份整个数据库实例,无法选择指定库表。逻辑备份的好处通过SQL的备份,它可以选择单个库表备份,但如果对整个实例备份效率不及物理备份。比如说有1T的数据,只有100兆的关键的数据,如果为了节省存储空间就没有必要用物理备份,就用逻辑备份,只备份们关心的库表。
有了物理备份和逻辑备份之后,基于数据的镜像,再结合binlog轻松实现数据的定恢复。对于binlog的备份TDSQL的Agent模块完成准实时的异步备份。比如说们每天的0备份镜像,同时各个时间段的binlog准实时备份。当需要恢复到一个早上6的数据,利用0的数据镜像再结合0到6的binlog,即可完成6的数据恢复。
oracle数据库自动备份方法备份在备机上不会影响主机。整个备份过程也有监控有告警,实现整个备份过程的追踪。
因为架构这一块内容确实比较多,本次也作为所有TDSQL系列的一个前瞻,后面更多的系列会根据这门课的部分章节详细展。这次主要想帮助家了解TDSQL的整体架构和模块划分,以及它的关键特性如何设计,基于什么样的考虑。听完本次再听后面的专题,会更容易去理解。
3.Q&A;
Q:TDSQL 1.0版本没有SQL引擎模块吧?
A:最早在2002年的时候们使用单机版MySQL作为数据存取,而后衍生出了TDSQL,这种计算存储相分离的架构,进而引入SQL引擎。
Q:请问存储节的MySQL使用原生的么 ?
A:TDSQL在原生MySQL基础上了量调优,如线程池、强同步的优化,以及限制,分布式事务XA优化等等。
Q:银行核心要到分库分表,发的聚合查询如何实现?
A:SQL引擎屏蔽了分表的细节,让在逻辑上看到的和单节模式一下一样,仍然一张独立的库表。此外,SQL引擎会自动数据聚合,发不需要关心。
Q:a+3,如果掉失了,B和C节都没有同步过来,怎么?A机器已经已经无法恢复。
A:a+3如果没有被B,C确认,即不满足被多数派确认,不会应答给成功的,最终会以超时的返回给。如果A机器无法恢复,这时新加入节会通过物理拷贝最快速度“克隆”出一个备节继续代替A节。
Q:Shard版本的可以通过pt工具,或者gh-ost加字段不?会有什么限制不?
A:TDSQL管理台online l的功能,会自动对多分片原子性变更,不需要再用第三方工具;分
布式TDSQL在DDL的时候不允许调整shardkey字段,比如原来以id作为shardkey,现在要调整成name作为shardkey,这样不允许的。
Q:TDSQL Shard算法有几种?建表语句必须需要语法吗?
A:TDSQL shard算法对屏蔽,即基于MySQL分区表的hash拆分(该算法不允许用户),这么也为了对屏蔽TDSQL分表细节。这里并不限制用户只能基于hash的分区,用户可以在TDSQL-shard的基础上二级分区(比如:按照日期、时间)。建表以及使用方面的语法,后面有一门关于分布式发的课程,敬请期待。
Q:谁来解决zk的可靠性?
A:一方面,zk自身了高可用跨机房部署,同时奇数个zk部署当发生故障时只要剩余存活zk数量于集zk的一半,zk就可以继续;另外一方面,就算zk节全部宕机,各个模块自身对zk也不强依赖的,即zk在不工作的情况下,数据库实例的正常读写请求不会受到任何影响,只不能处理切换、扩容等调度相关的触发式操作。
Q:老师刚才讲两种模式,如果用Shard模式,应用层对Sql语法有要求?听错了吗?
A:兼容MySQL 99%的SQL语法,shard模式与noshard模式最主要的区别shardkey的引入。引入shardkey之后,为了发挥出shard模式下的性能优势,建议所有sql都带shardkey访问,同时在shard模式下,一些数据库的高级特性如:存储过程、触发器、视图等特性会受到一定的使用限制。更详细的内容后面会有专门的分布式发的课程会专门介绍。
Q:分支到总行数据同步汇总,Oralce 同步到TDSQL双向都支持么?
A:支持双向同步。这里的支持有条件的,从TDSQL到Oracle可以到准实时同步,但从Oracle到TDSQL目前还无法到准实时同步,后续会支持。
Q:分布式表和非分布式表如何join?
A:分布式TDSQL下存在两种表分别表和小表,表就shard表(分布式表),小表又叫广播表,会冗余到所有数据节上。分布式表和非分布式表join时,由于分布式表所在的物理节上存在非分布式表的一份冗余,因而可以在单个数据节上完成join。
Q:否支持自建私有云?如果公有云,成本会不会上升?
A:支持私有云的,TDSQL部分的银行客户都采用私有云部署模式,并和外网隔离。公有云的成本相比私有云明显前者更低,像私有云需要自建机房,搭建光纤设备,但好处独占物理硬件资源。公有云的话都和公有云上的其他用户公用一套IDC、网络环境。
Q:否支持K8S部署?
A:TDSQL自带了一键部署解决方案,不依赖K8S。
Q:分局分表支持表关联查询吗?
A:支持的