摘要:为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的。
1. 摘要
双集群容灾场景下,需要将主集群中的数据备份到备集群。然而,随着主集群数据量的增大,备集群不存在一个单独的大容量磁盘用于存放主集群发来的备份集,或存放备份集的盘符空间不足以存储主集群发来的所有备份文件。但是,容灾场景中仍然要能支持双集群的备份恢复。因此,为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的。
2. 分盘存储原理
在双集群容灾设计中,主集群的角色是只做备份,备集群的角色是只做恢复。为了实现主备数据的同步,需要将备份集以.rch的格式进行数据拷贝。
如上图所示,在优化前,主集群会将压缩在roachbackup中的数据全部scp到备集群的roachbackup中,这样的存储方式,会对备集群磁盘空间造成非常大的负担。
在优化后,主集群会将压缩数据scp到备集群实例目录中的roachbackup文件夹,然后通过软链接的方式,备份目录中不同的DN和CN链接到了roachbackup文件夹。由于CN和DN分布在不同的磁盘上,同时软连接使得roach看到的路径和以前一样,这样就实现了数据分盘存放的目的。
3. 分盘存储步骤
第一步:在备集群CN和DN实例目录下创建文件夹roachbackup,主集群根据config.ini创建备集群的media目录下的目录链接:
比如/data1/roach3/mediadata/roach/20210129_181026/ecs-env-2998/dn_6001_6002为一个符号链接,此符号链接可以指向备集群roachbackup目录/data1/ha_install_3/data1/roachbackup/20210129_091422/master1目录。其中,master1子目录为archive/data/data_colstore,分别代表着日志/行存数据/列存数据
第二步:备集群恢复前clean集群时,跳过各实例目录的roachbackup文件夹。
第三步:在备份目录和实例目录不同的backupkey文件夹下,有不同的节点目录,在节点目录下有cn和dn目录,将备份目录下的cn和dn软连接到实例目录。
第四步:只有全量备份和全量恢复时必须这样做,增量备份恢复可选。按照现在的设计逻辑,全量和增量备份都建立了软链接。
第五步:恢复完成后,备集群删除创建的符号链接、各实例目录下的roachbackup文件夹,即恢复即删。对于主集群roachbackup目录,边传输数据,边删除数据,即传输即删。
4. 分盘存储结果
如上图所示,对于cn和dn目录,都通过软连接方式连接到了roachbackup对应的data_cn,master1,dummy1。通过软连接方式,roach在scp时,以为是传输到了一个磁盘上,但实际上写到了软连接对应的其他盘上,这样的话,数据也就实现了存放在不同磁盘上的目的。
5. 软连接含义
分盘存储中,实现的基础就是软连接的建立。那么,软连接是什么意思呢?
软链接有着自己的inode号以及用户数据块。只不过用户数据块中存放的内容是另一文件的路径名的指向。
如上图所示,在备集群恢复dn_6001_6002数据时,实际上是去/data1/ha_install_3/data1/roachbackup/20210129_091422/master1目录中去读取真正的数据,从而完成数据访问,最终实现备集群备份集的恢复功能。
6. 结论
随着数据仓库业务的发展以及客户数据量的增大,这就要求双集群容灾需要不断的迭代,深入挖掘客户需求是研发的第一性原则。
双集群容灾任务存在很多的策略,如分盘存储,生命周期清理,断点续备份和断点续恢复,主备切换。继往开来,双集群新的特性仍需开发,如自动化测试工具、过程监控工具和云化等。未来可期,实现产品生态丰富的目的始终是研发的第一生产力。
本文分享自华为云社区《GaussDB(DWS)备份容灾之分盘存储》,原文作者:zxy_db 。