分盘存储:实现数据库备集群备份文件分散存储
摘要:为了解决磁盘存储空间限制的问题,提出分盘存储手段,从而实现备集群备份文件分散存储的目的。
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 。
相关文章
- 进行数据库操作的时候,操作错误或者失败,但是不报错
- 数据库原理之存储过程和函数
- MySQL 之【视图】【触发器】【存储过程】【函数】【事物】【数据库锁】【数据库备份】
- 为什么密码要以MD5值存储在数据库
- jetty+mongodb 配置session外部数据库存储
- oracle 判断列是否在数据库中存在
- SAP CRM数据库表COMM_PR_FRG_ROD的存储逻辑
- Atitit 知识图谱管理 谱存储选型 与查询 目录 1. 知识图谱存储系统的选型。1 1.1. 图数据库 neo4j 适合大规模数据1 1.2. 关系数据库 小规模2 2. 知识图谱查询语言
- Atitit 数据存储实现方案总结 提升开发效率 不要一股脑把数据塞到远程关系型数据库,会造成开发效率的降低。。根据不同的要求,选择最简化快速的方案 目录 1. 选择存储原则2 1.1. 简单快
- Atitit。数据库 安全性 重要敏感数据加密存储解决方案
- Atitit.数据库存储引擎的原理与attilax 总结
- Atitit.各种 数据类型 ( 树形结构,表形数据 ) 的结构与存储数据库 attilax 总结
- spring-java项目中连接redis数据库
- 【万字干货】OpenMetric与时序数据库存储模型分析
- 【Python 八股文】- 数据库
- JavaSE学习总结(九)—— Java访问数据库(JDBC)
- 2012在数据库技术会议上的讲话PPT打包
- JAVA连接ACCESS、MYSQL、SQLSEVER、ORACLE数据库
- 数据库炸了——是谁动了我的wait_timeout
- 第44讲:MySQL数据库单列索引与联合索引的区别
- 八、MYSQL8数据库事务
- Akumuli时间序列数据库——列存储,LSM,MVCC
- Hbase分布式列存储数据库
- Python 操作SQLite数据库
- JavaWeb—作业【建立新闻数据库以及插入数据】
- 使用shiro对数据库中的密码进行加密存储(java+springboot+shiro)
- KingbaseES的学习心得和知识总结(一)|Kingbase数据库动态性能视图