分盘存储:实现数据库备集群备份文件分散存储
摘要:为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的。
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 。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/96e50ae4669e9b7012abe393b】。文章转载请联系作者。
评论