Gaussdb(DWS)双集群容灾方案的设计

1. 摘要

不同于“数据备份”的概念,双集群的容灾是为了在遭遇灾害时保证信息系统正常运行,帮助企业实现业务连续性的目标。

为了实现集群容灾目的,主要通过switchover进行主备切换,最终实现服务的不间断。集群在执行switchover后,主要完成如下工作:

第一步是先保证双集群备份恢复脚本先完成一次全量的数据备份,备集群上完成一次全量数据恢复。

第二步是在切换时,原主集群设置为只读,且做最后一次增量。原备集群设置为可读可写,且完成所有正在恢复备份集的恢复。

第三步是完成主备切换后,新主集群做一次全量备份(这里是轻量备份,后面会讲到),此时标志着主备切换switchover操作的结束。

如下图所示,经过switchover操作,主备集群角色进行了互换:

2. 备份

备份从类型划分,可以分为全量备份和增量备份。

备份从策略角度,主要包括分盘存储,生命周期处理,断点续备份。本文主要介绍分盘存储流程。

2.1 全量备份和增量备份

  • 概念差异

全量全量备份会将源数据完整备份,而增量备份仅将上次备份后所做的更改进行备份,这里的上次备份可以全量备份(累计增量备份),也可以是全量备份之后的增量备份(差分增量备份)。

  • 执行命令差异

双集群备份命令:python $GPHOME/script/SyncDataToStby.py -t backup --config-file ***

全量备份和增量备份的区别是增量备份命令增加了--prior-backup-key参数,该参数所传的值是上次备份的backup key。通过该参数,系统可以获取到上次备份信息,以判断继上次备份之后所更改的数据,用于执行本次的增量备份。

双集群执行全量备份和增量备份命令时,都是在主集群主节点上,使用GaussRoach.py拉起gs_roach(master)。然后,gs_roach(master)拉起主节点和其他节点的gs_roach(agent)。备份过程的调用关系如下图所示:

执行备份命令后,集群进行增量备份和全量备份的屏显如下图所示:

  • 备份列表差异

如果是全量备份,则将整个列表文件进行复制,生成全量备份列表清单,然后进行全量备份。

如果是增量备份,则根据startLsn和endLsn,调用file_list_impl.cpp/GetFileListByIncrementBlockType()中的getMergedCBM(),从CBM中获取数据库和文件的修改记录,生成增量备份列表,然后进行增量备份。

下图为C侧生成全量和增量备份清单时的流程图:

2.2 分盘存储

  • 如果没有一个超大盘用于存储备份集,则需要分盘存储备份集

以往的存储方式是将数据放到一个足够大的磁盘上,而修改后的分盘存储,通过软连接到各个实例来实现分盘目的。

  • 步骤

1. 在备集群CN和DN实例目录下创建文件夹roachbackup,主集群根据config.ini创建备集群media目录下的目录链接。

2. 备集群恢复前clean集群时,跳过各实例目录的roachbackup文件夹。

3. 备集群恢复时及时删除解压完的rch文件。

4. 恢复完成后,备集群删除创建的符号链接、各实例目录下的roachbackup文件夹。

备集群mediadata目录下通过软连接进行分盘存储示意图如下所示:

每个实例的roachbackup下,所包含的文件如下图所示:

对于data_cn下,所包含的文件如下图所示:

3. 主备切换

  • 双集群框架支持主备集群切换,通过SyncDataToStby.py -t switchover命令,这样原主集群在发生failover时,备集群就升为主集群,接管原来主集群的业务,从而达到容灾的目的。
  • 主备切换主要指对DN的切换,即将备DN切换为主DN。

下图为执行switchover后,涉及到的动作及耗时统计。

3.1 主备切换后新主集群的轻量备份

正常做完switchover后,新主集群需要做全量。而全量备份的流程是1.生成备份的文件列表 2.在对应的实例下,创建软连接 3.开始备份数据文件。

如果继续做全量,可用性不高,因为1主备集群数据一样2做全量的成本太高,因此提出了轻量备份。

问:轻量是什么意思呢?为什么一定要做一次备份呢?

答:1. 所谓轻量,就是对行存清单、xlog清单和列存清单的准备过程略过,这样就不再备份对应的文件。只在新备上生成CSV信息,并将状态置为“PASS”,即代表了当前备份集已经恢复过。2. 之所以要做一次备份,是因为集群在后面做增量恢复时,都需要prior backupkey作为基准。

switchover后轻量备份的流程如下,图中标记为颜色的过程都进行了跳过。

4. 展望

首先,随着数据量的不断增加,数据仓库业务也在不断的扩展,这就要求双集群的备份恢复以及容灾功能需要不断的迭代。充分挖掘客户需求以及不同的场景差异,是提高集群产品化质量以及开发集群特性的第一性原则。

另外,随着数仓数据量和集群规模的扩大,如何把握网络的带宽和不同介质读写的性能,从而选择合适的组网方式和介质,是接下来需求开发的第一驱动力。

合智互联客户成功服务热线:400-1565-661

admin
admin管理员

上一篇:C语言非数值计算常用经典算法之排序
下一篇:[oracle] 查看oracle数据库表空间使用率,定位数据size较大对象

留言评论

暂无留言
取消
扫码支持