根据容灾备份系统对备份类别的要求程度,数据库备份系统可以分为数据级备份和应用级备份。数据备份是指建立一个异地的数据备份系统,该系统是对原本地系统关键应用数据实时复制。当出现故障时,可由异地数据系统迅速恢复本地数据从而保证业务的连续性。应用级备份比数据备份层次更高,即在异地建立一套完整的、与本地数据库系统相当的备份数据库应用系统,同时备份本地数据。可以同本地应用系统互为备份,也可与本地应用系统共同工作,在灾难故障出现后,远程应用系统迅速接管或承担本地应用系统的业务运行。本文基于 Rsync算法设计实现数据库应用级容灾备份方案,并说明方案的部署及实施流程。
Rsync(remote synchronize)是一款开源的Linux/Unix远程数据同步工具,可以通过网络快速同步多台服务器主机之间的文件与目录。其核心为“Rsync算法”,它由澳大利亚计算机工程师Andrew Tridgell发明。算法思路利用差分计算两个文件不同编码值,并将该编码值传给同步源文件,来获取两个文件在不进行文件内容直接网络传输的情况下知道两个文件的不同和相同之处,从而仅仅对文件的不同内容进行同步传输,以减少网络数据传输量,进而提高传输效率达到同步文件的效果。算法核心包括了Checksum算法、传输算法、Checksum searching算法、对比算法。
Checksum算法首先会把同步目标文件平均切分成若干个小块,比如每块512个字节(最后一块会小于这个数),然后对每块计算两个校验和(Checksum):
通过弱滚动校验和来快速计算出两文件块的不同,但该算法碰撞概率较高。因此,通过引入强checksum校验和来计算两文件块的相同。
文件块的校验和计算完毕后,会将一个checksum列表传输给同步源文件,包括rolling checksum(32bits)、md5 checksum(128bits)、文件块编号。源文件会进行同样的校验和算法计算,并与列表进行对比发现文件的不同和相同之处。
同步源文件通过采用checksum searching算法来查找,将目标文件的checksum列表数据存放在一个16bits的hash table中,采用rolling checksum做hash值,以便获得时间复杂度的查找性能。Hash table的大小为216,对rolling checksum的hash会被散列到0到216-1中的某个整数值。对hash值发生碰撞的则做成一个链表进行存放。
最复杂关键的为文件块的对比算法。同步源文件将自身的文件块进行checksum计算后,从hash table中进行查找。如果查到了则说明发现了相同的文件块信息,再计算比较md5的checksum,如果md5 checksum再相同则说明目标文件中存在相同的文件块,并记录文件块编号。如果没有查找到则说明文件块信息不同,也不用再计算md5 checksum值。总之,只要rolling checksum或md5 checksum其中有不匹配的项,那么对比算法就会对文件块进行rolling动作,算法会往后跳1个字节,取2-513字节的文件块计算checksum,重复进行相关的查找对比,直到完成整个源同步文件的对比。通过对比算法可以找出相邻两次匹配中的那些文本字符不同,则需要同步传输给目标文件。对比算法流程如图1所示:
图1.对比算法流程说明
同步源文件通过Rsync算法后会得到一个数据数组表,如图2所示。其中绿色文件块为在目标文件端已匹配上,不用再进行传输。而白色文件块则是匹配不上,需要通过传输进行同步的数据内容,这些数据内容是不定长的字节。最终,同步源文件把这个数据内容和数组表一起压缩传给目标文件端,在目标文件端的Rsync算法会根据这个表重新生成文件,这样同步完成。
图2.数据数组表示例
Rsync是一个客户端与服务端架构部署的网络结构。Rsync服务端指运行rsync deamon守护进程的服务器,并设置备份目录来保存同步目标文件;Rsync客户端则发起rsync连接的服务器,存放备份的同步源文件。Rsync的备份服务器体系结构如图3。
图 3.Rsync备份服务器体系结构
Rsync工具不仅提供了高效快速的增量同步算法,对于数据库备份还具备许多完善、灵活的功能特性:
一个数据库的数据库备份必须是一个数据库的完整的映像,在这个映像的时间点上,没有部分完成的事务存在。因此,数据库备份设计方案必须要求数据库支持在某时刻数据库的静止状态或不会对数据镜像文件进行刷新,希望对数据库系统完成在线数据库备份操作,实现数据库系统高性能的应用级备份。
方案设计思路采用Rsync工具对备份数据库各节点的数据从生产数据库系统上进行增量同步,由于生产数据库系统和备份数据库系统是拓扑结构完全相同的两个环境,因此生产数据库和备份数据库之间节点存在相对应的关系。如果在对应节点之间建立起同步关系,只要保证每个节点上的表结构、数据、日志记录等保持一致,那么整个数据库系统环境总体的表结构、数据和日志等也会一致。整个备份方案设计流程分为备份初始化、增量同步备份、备份恢复。以此来实现数据库系统的在线备份,并支持应用系统通过网络对备份数据库系统的切换和请求。
通过以数据库集群的在线备份为例对设计方案和实施流程进行说明。
数据库备份方案一般主要考虑到数据库系统备份、应用系统访问切换、ETL数据业务流程备份等,整体网络拓扑结构可简单如下图所示。
图4.整体网络拓扑图
备份系统之间网络为确保数据的及时性可采用局域网或城域网,一般推荐提供万兆以上专用网络。应用系统访问可采用HA专用网络设备或DNS软件技术等对备份数据库系统进行切换,同时ETL数据业务流程则通过对控制文件进行备份,确保业务在故障状态下对备份数据库系统的操作。最核心的数据库系统备份则需根据数据库集群系统的特点,以及Rsync备份服务器体系结构进行设计,其网络结构部署图如下。
图 5.数据库集群备份设计方案部署图
备份数据库系统在数据库集群服务器各节点上部署运行备份数据库集群软件和 Rsync Server程序,机器节点称为备份服务器。所有备份服务器节点需要启动Rsync守护(daemon)进程,等待客户端Rsync连接。同时,原生产数据库系统集群节点部署Rsync Client服务程序,为Rsync客户端服务器,在启动备份操作时向备份服务器发送同步请求。生产数据库系统在备份操作启动之前确保数据库系统处于静止状态,生产数据库集群节点与备份数据库集群节点采用一对一方式进行数据的增量同步备份。
图 6.备份初始化流程
1、备份初始化
图 7.增量同步备份流程
2、增量同步备份
图8.备份恢复流程
3、备份恢复
基于Rsync算法的数据库备份设计方案实现了数据库系统的在线备份能力及应用级切换功能,主要优势在于:数据库备份过程中采用Rsync算法灵活高效的实现了数据库数据文件的增量备份,极大减少了日常备份所耗费的时间;方案可支持主流大多数Linux、Unix操作系统,并灵活地选择或设定备份数据文件及目录树;允许备份过程中对生产系统数据库进行查询统计操作;满足备份数据库系统的在线切换,且设计方案具有较高的性价比。
方案的不足之处在于数据库系统对每个集群节点的同步是完全独立于其它节点的,因此务必所有集群节点的增量备份成功,才能确保集群整体增量备份的成功。且生产系统数据库无法做到任意时间点的实时备份同步。
基于数据库的在线备份功能及技术一直是数据库产品研究的重点和难点。方案摒弃了传统关系型数据库采用日志备份的思路,对镜像数据文件进行增量备份的方式来实现。充分利用Rsync算法的优势和开源技术,结合分布式数据库的场景特点,提出了一种切实可行的备份设计方案。
作者: 伍艺 天津南大通用数据技术股份有限公司电信行业售前咨询顾问,主要负责电信行业MPP分布式数据库技术方案及项目管理。责编/刘亚琼