GaussDB数据库高可用部署方案
GaussDB数据库主备架构的基本组件,以及基于华为云底座和轻量化部署TPOPS两种方式的典型高可用部署场景介绍。
GaussDB数据库主备架构的基本组件,以及基于华为云底座和轻量化部署TPOPS两种方式的典型高可用部署场景介绍。
1、GaussDB数据库组件
1.1 GaussDB数据库集中式主备集群基本组件
-
CM由CM Agent、CM Server和OM monitor构成:
-
CM Agent:管理服务组件,由OMM拉起(周期1秒),主要负责CMS、DN进程的保活及启停,仲裁指标采集、仲裁命令执行等。集群的每台主机上均有CM Agent进程。CMA故障可能会导致启停能力丢失、实例故障检测能力丢失。
-
CM Server:管理服务组件,由CMA拉起(周期1秒),根据CM Agent上报的实例状态判定当前状态是否正常,是否需要修复,并下发指令给CM Agent执行。CM Server会将集群的拓扑信息保存在ETCD。
-
OM Monitor:管理服务组件,由crontab定时任务控制拉起(周期1分钟),主要负责OMM、etcd、cm_agent进程的保活及启停
-
-
DN节点:数据服务组件,由CMA拉起(周期1秒),负责存储业务数据、执行数据查询任务以及返回应用结果。DN主备节点之间采用Quorum复制或Paxos协议复制。
-
ETCD节点:管理服务组件,由OMM自动拉起(周期1秒),主要协助CMS选主、持久化集群仲裁信息、保存集群的拓扑信息等。
1.2 区域和可用区
在高可用部署架构中区域(Region)和可用区(Available Zone)用来描述数据中心的位置。
-
区域Region:指物理上相对独立的数据中心。每个区域完全独立,这样可以实现最大限度的容错能力和稳定性。在GaussDB数据库中资源创建成功后不能更换区域。
-
可用区AZ:指同一区域内,电力和网络互相隔离的物理区域,比如同一个区域内的两个机房,一个AZ故障不会影响其它AZ。GaussDB数据库中在同一个Region内可以有多个AZ可用区,不同可用区之间物理隔离,但内网互通,既保障了可用区的独立性,又提供了低价、低时延的网络连接。
不同Region的划分和多中心的高可用架构有关,比如生产/同城/灾备机房划分为不同的Region,然后在同一个Region内按照机房模块划分为不同的AZ域。也有可能生产和同城划分为同一个Region,灾备作为一个单独的Region,不同Region之间的RPO要求也是不同的。
1.3 主备节点数据同步机制
1.3.1 WAL日志机制
GaussDB数据库为了保证数据在数据库发生故障时候可恢复,引入了Redo机制,也就是WAL日志,其思想是对数据文件的修改在提交之前都需要记录到日志文件中,也就是先写日志后写数据。当事务发生时,相关的操作记录会被组装并写入基于内存的RedoLogBuffer中。当RedoLogBuffer写满或事务没有更多日志记录需要写入时,这些日志记录会被提交给RedoLogHandler,并最终写入到XLog(即WAL日志)中。这样不需要在每次事务提交的时候都把数据页刷回到磁盘,因为出现崩溃的情况下可以用日志REDO来恢复数据库。
WAL日志机制在数据库发生故障后可以通过xlog日志文件恢复数据、主备节点也可以通过日志文件进行数据同步、备份恢复时通过WAL日志可以实现PITR恢复。与MySQL中binlog不同之处是WAL日志主要关注于数据的物理修改记录,确保在数据文件修改之前相应的日志已经写入磁盘;而binlog日志则可能更侧重于记录数据的逻辑变化,如SQL语句的执行等。在GaussDB中可以使用逻辑复制的功能将xlog日志转换为类binlog日志格式进行逻辑回放等使用场景。
1.3.2 同Region内主备节点复制
在一主多备架构中,主机通过WalSender线程向备机同步日志,备机通过WalReceiver线程接受日志,并刷到本地盘,备机读取redo日志,完成主备之间的数据同步。
-
WAL:Write-Ahead Logging,也称为XLog,预写日志系统。实现事务日志的标准方法,是指对数据文件(表和索引的载体)持久化修改之前必须先持久化相应的日志。
-
WAL Receiver:数据库复制时备机创建的一个线程的名称。此线程用于从主机接收数据、命令,并反馈确认信息至主机。一个备机只有一个WALReceiver线程。
-
WAL Sender:数据库复制过程中,主机接受到备机的连接请求后创建的一个线程的名称。此线程用于发送命令、数据到备机,并从备机接收信息。一个主机可能会有多个WAL Sender线程,每一个WAL Sender线程对应一个备机的一个连接请求。
-
WAL Writer:数据库启动时创建的一个写Redo日志的线程,用于将内存中的日志写入到持久性设备中。
-
REDO日志:记录对数据库进行操作的日志,这些日志包含重新执行这些操作所需要的信息。当数据库故障时,可以利用REDO日志将数据库恢复到故障前的状态。
GaussDB数据库在同一个Region内1主多备的部署架构下,主备节点间采用Quorum或Paxos一致性复制协议,在事务提交前会进行一致性检测,满足半数以上的多数派响应后才可以提交。因此为了满足多数派选举,日志节点会部署为奇数。
同时根据不同的业务可用模式,将日志同步分为不同的模式,有以下几种:
-
最大保护模式:一主多备场景下,如果主机的一个事务必须等到该事务对应的xlog日志在多数派主机上都落盘后才能提交。如果因为网络原因或者多数的备机发生故障,此时主机的事务将无法提交。该模式下,可以保证RPO=0,参数设置synchronous_commit=on
-
最大可用模式:当发现备机不可用时,会自动从最大保护模式切换为最大可用模式,保证在备机不可用时主机的事务能够继续执行。该模式下无法保证RPO=0,参数设置most_avaiable_sync=on
-
最大性能模式:主机的事务在该事务对应的xlog日志在本地落盘之后就可以提交,主机的性能不受备机的影响。该模式下,在主机故障时,可能会有一定的数据丢失,参数配置synchronous_commit=off
1.3.3 跨Region流式复制
GaussDB跨Region之间的数据同步采用流式复制的方式,一般是在生产和灾备建立两套数据库集群,基于WAL日志建立日志复制关系。跨Region之间的复制不能保证RPO=0。
流式复制是使用max_replication_slots(日志复制槽)、max_keep_log_seg(逻辑日志数)等配置来控制复制的速率,防止备机堆积过多日志影响性能。
2、华为云GaussDB数据库高可用部署
华为云GaussDB数据库有两种部署模式,一种是基于华为云HCS底座的,适合于本身已经建设了华为云IAAS平台,基于现有的云平台底座的运维和管理能力,减少重复建设的成本;另一种是轻量化TPOPS平台,TPOPS不依赖于华为云底座实现对GaussDB数据库实例的运维管理。本文主要介绍集中式架构下的高可用部署。
2.1 基于华为云底座的高可用部署
集中式主备版本的同城和异地部署的时候有不同的组合,有同Region多AZ部署、跨Region的多AZ部署。这里介绍几种典型的部署方案,其它参考官网材料。
1)生产同城单Region部署
左图为生产单中心1AZ3副本部署,适用于不要求站点级容灾,但是需要保证单中心故障高可用的场景。
-
DN主备之间采用流复制进行数据同步,至少同步到一台备机,保证RPO=0。
-
DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换。
右图为生产同城3AZ4副本同城双活部署,由两个业务AZ和1个仲裁AZ组成,任何AZ故障能够保证RPO=0。
-
AZ1和AZ2对等部署,AZ3作为第三方仲裁节点,不接入业务;
-
AZ3作为仲裁AZ,在1个AZ故障状态下,保证ETCD的存活节点超过多数,从而保证数据的一致性
-
DN主备之间采用流复制进行数据同步,跨AZ存在同步备,数据不会丢失。
-
DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换。
-
AZ1和AZ2之间可以手动切换,切换完成后业务继续运行
2)生产同城跨Region部署(保证同城RPO=0)
前文已经介绍到GaussDB数据库在不同Region之间划分为不同的集群进行部署,不同集群之间采用流式复制,不能保证RPO=0。基于华为云底座部署的时候,可能因为生产和同城机房在网络部署上划分为不同的网络区域Region,此时如果要保证RPO=0只能采用存储复制的方案。GaussDB数据库结合Dorado存储实现存算分离和存储级别的高可用方案,两个不同Region之间通过存储复制保证RPO=0。
-
每个Region都有一套完整的数据库集群,并有完整的数据;集群内主备节点之间采用共享卷进行数据同步,保证RPO=0
-
DN备节点故障,不中断业务的进行;DN主节点故障,自动进行主备切换
-
跨region容灾需要手工切换
-
闪存存储需要支持远程复制LUN,支持NAS文件系统并且和主机之间的连接使用IP网络连接
如果没有要求生产和同城之间RPO=0,采用双Region部署,两个集群之间采用数据库跨Region流式复制的方式实现数据同步。另外有时候考虑到生产和同城的网络带宽及时延限制,主备之间的强一致同步会影响到性能,也会考虑生产同城双Region部署。但其实大多数场景下,生产和同城之间的网络时延在0.5ms左右,已经满足业务访问的时延要求了。
对于灾备站点由于物理距离上的限制,网络时延会大很多,所以需要单独划分Region部署,并且不能保证RPO=0。因此,对于不想使用存储复制方案的高可用部署,推荐生产和同城一个Region、灾备站点一个Region的方案。
2.2 基于轻量化TPOPS高可用部署
GaussDB数据库的TPOPS轻量化部署不依赖于华为云底座,只需要部署TPOPS云数据库管理平台,然后基于TPOPS进行数据库实例的纳管和维护即可。在部署形态上也是支持多种,这里介绍几种典型的部署方案,其它参考官网材料。
1)生产同城单Region部署
与基于云底座的部署方式相同,DN主备复制支持Quorum和Paxos两种协议,跨AZ存在同步备,数据不会丢失。
2)同城3AZ5节点+异地1AZ1节点(同城RPO=0)
生产同城双活部署,由两个业务AZ和一个仲裁AZ组成。两个业务AZ之间对等部署,任何一个机房都接入业务;仲裁AZ不接入业务;任何机房故障可保证RPO=0;异地Region支持跨Region的容灾能力。
-
同城和异地跨Region分别部署一套单独的数据库集群;
-
单AZ故障下,保证ETCD存活节点为多数,从而保证数据一致性;
-
DN主备节点之间采用流式复制,至少同步到2台备机,保证RPO=0;
-
同城切换支持跨AZ切换;跨Region容灾需要手动切换
相比基于华为云底座的部署,异地Region支持单节点部署,并且生产和同城不需要和云底座的Region网络域捆绑,在部署方式上更为灵活。
3、总结
华为云GaussDB数据库高可用架构能够保证AZ内RPO=0、同城AZ间RPO=0,异地RPO<10s。另外高可用部署上有灵活的配置满足不同的场景,同时还有以下特性:
-
为保证一致性协议的多数派选举成功,ETCD实例或日志副本等按照奇数部署;
-
集中式架构下管控平台和数据库实例之间解耦,每个数据库集群都有自己的元数据管理节点、故障检测节点,在故障检测、DDL变更等场景下不依赖于集中式的管理节点。而管控平台的作用就是资源的管理、性能指标数据的采集和展示等。缺点就是需要维护的节点增多了,比如每个集群都有自己的ETCD、CMS等。
-
在部署模式上如果没有现成的华为云底座,还是轻量化部署更为合适,数据库也不需要和某一类云厂商捆绑,在实际部署方案上也会更为灵活。
GaussDB数据库基于云底座和云管平台实现实例的统一管理、指标采集展示、DBMind智能化运维等功能模块,并且结合DRS等迁移工具和Oracle数据库迁移国产中的兼容性及性能上的优势,在国产数据库的引进中已经具备相当的竞争力。不过吐槽一点是GaussDB数据库在实例部署时候的资源最小限制为8C64G并且在实例纳管时候无法规避,这对于小的应用或开发测试环境来说是相当不友好的。
参考资料:
-
https://doc.hcs.huawei.com/db/zh-cn/gaussdbqlh/24.1.30/tg/gaussdb-38-0122.html
本文作者:大唐小少
更多推荐
所有评论(0)