GaussDB数据库的高可用性依赖于其主备架构的设计,该架构通过多种组件协同工作来保障系统的稳定性与数据一致性。本文将介绍GaussDB集中式主备集群的核心组件,并结合华为云底座和轻量化部署TPOPS两种典型场景,阐述其在不同环境下的高可用部署模式。
1、GaussDB数据库核心组件解析
1.1 集中式主备集群的基本构成
CM(Cluster Manager)是集群管理的关键模块,由三个子组件组成:CM Agent、CM Server 和 OM Monitor,共同实现对整个数据库集群的监控与控制。
- CM Agent:作为运行在每台主机上的管理进程,由OMM按秒级周期启动。它负责DN实例和CMS的启停操作、故障保活、仲裁指标采集以及命令执行。若CMA出现异常,可能导致节点无法正常启停或故障检测失效。
- CM Server:由CM Agent拉起,同样以1秒为周期运作。其主要功能是接收各CMA上报的状态信息,判断集群当前健康状况并决定是否触发修复动作,同时向CM Agent下发指令。此外,CM Server利用ETCD存储集群拓扑结构。
- OM Monitor:通过crontab定时任务每分钟触发一次,用于监控OMM、etcd及cm_agent等关键管理进程的运行状态,确保其持续可用。
- DN节点:即数据节点,承担业务数据的存储、查询处理及结果返回功能,由CM Agent按秒级周期管理启停。主备DN之间采用Quorum复制机制或Paxos协议进行日志同步,保证数据强一致。
- ETCD节点:由OMM自动启动,主要用于协助CMS完成选主流程,持久化保存仲裁相关信息,并维护集群整体的拓扑配置。
1.2 区域(Region)与可用区(AZ)概念说明
在构建高可用系统时,物理位置的划分至关重要。GaussDB通过“区域”和“可用区”的层级模型来组织数据中心布局。
- 区域(Region):代表一个独立的地理数据中心,具备完整的电力、网络与运维体系。一旦资源在某个Region中创建,便不可迁移至其他区域。多Region设计常用于生产中心、同城容灾与异地灾备之间的隔离部署,满足不同的RPO目标。
- 可用区(Available Zone, AZ):位于同一Region内的独立物理单元,如不同机房,彼此间在供电与网络上相互隔离,但通过内网高速互通。这种设计既实现了故障域分离,又提供了低延迟、低成本的内部通信能力。
典型的部署策略可能包括:将生产与同城系统置于同一Region下多个AZ中,而灾备系统则部署在另一个独立Region中,从而形成跨地域的高可用架构。
1.3 主备数据同步机制详解
1.3.1 WAL日志工作机制
为了保障事务的持久性和崩溃恢复能力,GaussDB引入了WAL(Write-Ahead Logging)机制,也称作XLog。其核心原则是“先写日志,后写数据”——所有对数据文件的修改必须首先记录到日志中。
当事务执行时,相关操作会被暂存于内存中的RedoLogBuffer。当缓冲区满或事务提交时,这些日志交由RedoLogHandler处理,并最终写入磁盘上的XLog文件。这种方式避免了每次提交都需刷写数据页,显著提升性能;同时,在系统崩溃后可通过重放WAL日志实现数据恢复。
WAL日志的应用不仅限于本地恢复,还广泛应用于:
- 主备之间的数据同步
- 基于时间点的恢复(PITR)
- 备份恢复过程中的数据重建
值得注意的是,WAL日志关注的是数据页的物理变更,强调日志落盘优先于数据页更新;这与MySQL的binlog有本质区别——后者更多记录逻辑层面的操作,如SQL语句本身。不过,GaussDB支持逻辑复制功能,可将xlog转换为类binlog格式,供外部系统进行逻辑回放使用。
1.3.2 同Region内主备复制流程
在单Region的一主多备架构中,主节点通过WalSender线程向各个备节点推送日志流,备节点则通过WalReceiver线程接收日志并写入本地磁盘。随后,备机读取redo日志内容,应用更改以保持与主机的数据一致。
涉及的主要线程包括:
- WAL Sender:主节点上为每个备节点连接请求创建的发送线程,负责传输日志数据和命令,并接收来自备机的反馈消息。一个主节点可根据备份数量拥有多个WAL Sender线程。
- WAL Receiver:备节点上唯一的接收线程,用于从主机获取日志流、执行写盘操作,并向主机返回确认信息,确保传输可靠性。
- WAL Writer:数据库启动时创建的后台线程,负责将内存中的Redo日志批量写入持久化设备,提高I/O效率。
上述机制共同构成了GaussDB在同区域内实现高性能、高可靠数据复制的基础。
REDO日志用于记录对数据库执行的所有操作,其中包含了重新执行这些操作所需的完整信息。当数据库遭遇故障时,系统可通过重放REDO日志将数据恢复至故障发生前的状态,从而保障数据的完整性与一致性。
GaussDB在同一个Region内通常采用“一主多备”的部署架构,主节点与备节点之间通过Quorum或Paxos等一致性复制协议进行通信。在事务提交前,系统会进行一致性检测,只有当半数以上的节点成功响应后,事务才可被提交。为确保多数派选举机制的有效性,日志节点一般部署为奇数个,以避免出现投票僵局的情况。
根据不同的业务可用性需求,GaussDB支持多种日志同步模式,具体如下:
- 最大保护模式:在“一主多备”场景中,主机必须等待当前事务对应的xlog日志在多数派节点上完成落盘后才能提交。若因网络异常或多数备机故障导致无法满足多数派确认,则主机事务将暂停提交。该模式可实现RPO=0(即无数据丢失),配置参数为 synchronous_commit=on。
- 最大可用模式:当系统检测到部分备机不可用时,会自动从最大保护模式切换至最大可用模式,以保证主机事务的持续执行。虽然提升了系统的可用性,但在此模式下不能确保RPO=0,相关参数设置为 most_avaiable_sync=on。
- 最大性能模式:主机在本地完成xlog日志落盘后即可提交事务,不受备机状态影响,最大程度提升性能。但在主机发生故障时可能存在一定的数据丢失风险,适用于对性能要求高而容忍少量数据损失的场景,参数配置为 synchronous_commit=off。
跨Region流式复制机制
GaussDB在不同Region之间的数据同步采用流式复制方式,通常应用于生产中心与灾备中心之间建立两套独立的数据库集群,并基于WAL(Write Ahead Log)日志构建复制链路。需要注意的是,跨Region的复制由于网络延迟和带宽限制,无法保证RPO=0。
为了控制复制过程中的性能影响,系统通过配置如 max_replication_slots(最大日志复制槽数量)和 max_keep_log_seg(保留的逻辑日志段数)等参数,调节日志传输速率,防止备库积压过多未处理日志而导致资源耗尽或性能下降。
华为云GaussDB数据库高可用部署方案
华为云GaussDB提供两种主要的部署模式:一种是基于华为云HCS基础设施的部署方式,适用于已建设华为云IaaS平台的企业,能够复用现有云平台的运维管理能力,降低重复投入成本;另一种是轻量化的TPOPS平台,该平台不依赖华为云底座即可实现对GaussDB实例的统一运维管理。本文重点介绍集中式架构下的高可用部署实践。
2.1 基于华为云底座的高可用部署
在集中式主备架构下,GaussDB支持同城及异地多种部署组合,包括同Region多AZ部署和跨Region多AZ部署。以下是几种典型的高可用部署方案,其他部署参考官方文档。
1)生产环境同城单Region部署
左图所示为单中心1AZ3副本部署结构,适用于无需站点级容灾,但需具备单数据中心内部高可用能力的业务场景。
- 主备DN节点之间通过流复制实现数据同步,至少确保一份备机数据同步完成,保障RPO=0。
- 当DN备节点发生故障时,业务不受影响;若DN主节点故障,则系统自动触发主备切换,保障服务连续性。
右图展示的是3AZ4副本的同城双活部署架构,由两个业务AZ和一个专用仲裁AZ构成,能够在任意单一AZ故障的情况下仍保持RPO=0。
- AZ1与AZ2为对等业务节点,承担读写流量;AZ3作为纯仲裁节点,不承载实际业务请求。
- 仲裁AZ的作用在于:当某一业务AZ失效时,确保ETCD集群中存活节点数量超过半数,维持元数据一致性和集群可用性。
- 主备DN间使用跨AZ流复制机制,确保有跨可用区的同步副本存在,避免数据丢失。
- 主节点或备节点故障均不影响业务运行;主节点故障时自动完成切换;AZ1与AZ2之间支持手动切换,切换后业务正常继续。
2)生产环境跨Region部署(实现同城RPO=0)
前文提到,GaussDB在不同Region间通常划分为独立集群,采用流式复制方式进行数据同步,此方式无法保证RPO=0。然而,在某些高要求场景中,若希望在生产和同城机房间实现RPO=0,仅靠数据库层复制难以达成目标,需借助存储层面的复制技术。
为此,GaussDB结合华为Dorado存储设备,实现存算分离架构下的高可用解决方案。通过在两个不同Region之间启用存储级远程复制功能,可在跨Region场景下达到RPO=0的目标。
- 每个Region均部署一套完整的数据库集群,拥有全量数据副本。
- 集群内部主备节点之间通过共享存储卷进行数据同步,确保本地RPO=0。
- 主节点或备节点故障时,系统自动完成切换,业务不中断。
- 跨Region级别的容灾切换需要人工介入,执行手动切换流程。
- 底层闪存存储需支持远程复制LUN、NAS文件系统,并通过IP网络与主机连接,以保障复制链路的稳定性和兼容性。
如果业务不要求生产和同城之间实现RPO=0,可采用双Region部署方案,两个集群之间通过数据库层的跨Region流式复制完成数据同步。此外,考虑到生产与同城之间的网络带宽和延迟限制,强一致性同步可能会影响系统性能,因此也常选择双Region部署模式以平衡性能与可靠性。
不过,在大多数实际场景中,生产与同城之间的网络延迟约为0.5ms,完全满足常规业务的访问延迟要求,因此即便采用强同步机制,也不会显著影响整体性能表现。
在灾备站点的部署中,由于物理距离较远,网络延迟显著增加,因此无法保证RPO=0。为应对这一挑战,建议将灾备站点独立划分为一个Region进行部署。对于不采用存储复制方案的高可用架构,推荐将生产环境与同城站点共用一个Region,灾备站点单独作为一个Region的部署模式。
针对GaussDB数据库的高可用性需求,轻量化TPOPS部署提供了一种灵活且高效的解决方案。该方案不依赖于华为云底层基础设施,仅需部署TPOPS云数据库管理平台,即可实现对数据库实例的统一纳管与运维。以下是几种典型的部署形态(更多细节可参考官方文档):
1)生产与同城单Region部署
此方案与基于云底座的部署方式类似,DN主备之间的数据复制支持Quorum和Paxos两种一致性协议。跨可用区(AZ)配置同步备机,确保数据不会丢失,具备较强的容灾能力。
2)同城三AZ五节点 + 异地一AZ一节点(同城RPO=0)
该架构适用于同城双活场景,由两个业务AZ和一个专用仲裁AZ构成。两个业务AZ对等部署,均可承载业务流量;仲裁AZ不参与业务处理,仅用于选举决策。任意单个机房发生故障时,系统仍能保持数据一致并实现RPO=0。
异地站点部署于独立Region,通过跨Region机制提供容灾支持。同城与异地分别部署独立的数据库集群:
- 当单个AZ出现故障时,确保ETCD存活节点数量为多数派,维持集群一致性;
- DN主备间采用流式复制机制,至少同步至两台备机,保障同城RPO=0;
- 同城切换支持跨AZ自动切换,而跨Region容灾则需手动介入完成切换操作。
相较于依赖华为云底座的部署方式,该方案允许异地Region以单节点形式部署,且生产与同城环境无需与云平台的Region网络域绑定,整体部署更加灵活。
3)总结
华为云GaussDB数据库的高可用架构能够在AZ内部、同城AZ之间实现RPO=0,在异地场景下RPO小于5秒,满足绝大多数关键业务的数据保护要求。同时,其部署策略具有高度灵活性,适配多种业务场景。
为确保一致性协议中的多数派选举成功,ETCD实例及其日志副本通常按奇数方式进行部署。在集中式架构下,管控平台与数据库实例实现了解耦设计:每个数据库集群拥有独立的元数据管理节点和故障检测节点,使得DDL变更、故障发现等操作不再依赖中心化管理组件。管控平台主要承担资源调度、性能监控数据采集与可视化展示等功能。
尽管该架构提升了系统的自治能力,但也带来了额外的运维复杂度——例如每个集群都需要维护自身的ETCD、CMS等核心组件,导致整体节点数量增多。
若当前环境中未部署华为云底座,轻量化TPOPS方案更具优势。它不仅避免了对特定云厂商的技术绑定,还在实际部署中提供了更高的自由度和适应性。