镜像双活容灾查询原理说明
摘要:
一. 浪擎镜像系统的SQLServer查询功能概述 浪擎AgileMirror镜像系统(简称镜像系统)是数据库级别的双活容灾产品,将生产端数据库的业务数据实时复制到容灾端服务器上,当生产端业务系统发生故障时,容灾端的备用系统可以无需恢复直接接替生产端的业务系统使
一. 浪擎镜像系统的SQLServer查询功能概述
浪擎AgileMirror镜像系统(简称镜像系统)是数据库级别的
双活容灾产品,将生产端数据库的业务数据实时复制到容灾端服务器上,当生产端业务系统发生故障时,容灾端的备用系统可以无需恢复直接接替生产端的业务系统使用,以保证业务连续运行。镜像系统支持SQLServer、Oracle的
双活容灾。
镜像系统的查询功能在容灾基础上还能实现一定的业务查询统计,体现了浪擎 的“平灾结合”理念,为用户提供超越容灾的一个特性或功能,使用户的投资物有所值。
二. 查询功能的原理
1. 镜像系统的容灾复制原理
镜像系统包含追逐式全量复制和实时增量复制两大复制功能。
追逐式全量复制在第一次部署时,且在不停止生产业务的要求下,自动的将生产端业务系统的存量数据和活动数据全部复制到备用端的数据库。无需停止生产数据库和无需停止业务系统;无需改变生产数据库的现有配置。
追逐式全量复制原理:∑= ∑存量+ ∑变化,复制存量数据与数据库对象到容灾数据库;复制在第一步复制期间变化的事务;将第二步的复制结果保存到容灾数据库。
实时增量复制在生产系统正常工作期间,实时的将业务数据复制到容灾端的备用系统。
复制数据库的一切变化,自适应业务调整。
实时增量复制流程为:生产端的事务日志实时捕获模块通过操作系统内核驱动驱动程序实时监控SQLServer事务日志文件并捕获其变化数据;传输控制模块从变化数据缓存池中取出数据传输至容灾服务器;容灾服务器将变化数据保存至容灾端的缓冲池中;组装模块依据SQLServer数据库的存储原理将变化数据拼装成可恢复事务;装载线程将组装好的事务数据块通过SQLServer的存储引擎复到容灾数据库。其流程如下图。
容灾复制原理
2. 查询功能原理
镜像系统容灾端采用SQLServer存储层的数据加载接口加载实时增量数据到容灾数据库,这种接口的优点在于速度非常快,资源消耗小,而且不受生产数据库结构变化(数据库DDL操作)的影响,因此整个复制过程非常稳定。但这种接口的不足之处在于在加载数据过程中镜像系统独占数据库,会强行关闭对这个数据库的其他所有连接。因此,如果业务查询程序直接连接容灾数据库时,在镜像系统加载数据时会连接断开。
查询功能原理
为了避免查询连接被断开的弊端,浪擎科技开发了查询代理软件,实现串行化的查询与加载。即,业务查询程序不直接连接容灾数据库,而是连接查询代理软件,再由查询代理软件转发查询请求到容灾数据库,接收数据库的回应后再转发给业务查询程序。在查询时,查询代理软件发出查询标志,所有镜像加载将被挂起,直到所有查询的回应结束,查询代理切换所有查询连接的数据库上下文环境到“master数据库”,再允许镜像系统加载数据;在加载时,所有查询连接处于“master数据库”的安全环境,连接不会被断开,等待加载结束。如上图。
查询代理软件协调了与镜像系统的关系与顺序,即保障了查询的稳定性,也保障了容灾数据库的增量数据更新。
三. 部署要求与限制
查询代理软件必需与镜像系统容灾端部署在一台服务器上。查询代理程序监听SQLServer数据库的1433端口。SQLServer数据库服务器监听其他端口,如15000。这样可使大量的业务查询程序不用变更数据库连接配置。
镜像系统的部署架构不受变化,但需要设置镜像加载频率和容灾数据库监听端口,如设置为5分钟。
此外,查询代理软件不支持业务查询程序对数据库的任何写操作。
四. 与其他技术对比分析
实现SQLServer数据库双活容灾的产品,目前从全球范围来看仅有微软SQLServer数据库自带的发布/订阅、浪擎公司的镜像系统、Oracle公司的GoldenGate产品,三个产品的实现技术路线大致相同。
发布/订阅和GoldenGate的技术路线完全相同,具备相同的优缺点,采用完全精确化的SQL解析技术来复制生产数据库变更的记录,这种技术路线的优势是容灾数据库处于可读可写状态,完全双活,但其致命缺点为不能完全处理数据库结构变化,会丢失数据。
浪擎的镜像系统如前所述,也是复制数据库变化事务,但采用存储层接口加载变化数据,能够完全适应数据库结构变化,不会丢失数据,非常稳定,但不是完全双活。因此采用查询代理实现稳定的查询。
下面列表比较镜像系统与发布/订阅(GoldenGate与GoldenGate完全相同)。
比较项 |
浪擎镜像系统 |
SQLServer复制(发布/订阅) |
复制原理 |
捕获SQLServer事务日志变化,不做完全解析,采用存储层接口加载数据到容灾数据库 |
捕获SQLServer事务日志变化,完全解析每条日志记录成SQL记录,然后保存到容灾数据库 |
系统架构 |
代理端、服务器端两部分 |
发布、分发、订阅服务器三部分 |
复制粒度 |
数据库记录级别 |
数据库记录级别 |
容灾数据库状态 |
容灾数据库处于只读运行状态 |
容灾数据库处于运行状态,可读可写 |
复制与查询并行 |
不支持并行化,仅支持复制与查询串行化 |
支持并行化 |
支持数据库结构和对象变化(DDL) |
完全支持 |
不支持 |
允许表结构更改 |
允许 |
在复制中的表不允许更改结构。表结构变化时,需去除表的复制关系才能修改表结构,然后需重新同步表的全量数据,才能增量复制 |
表的主键要求 |
无要求 |
需复制的表必需定义主键;
可能导致主键冲突,停止复制等待手工处理 |
断点续传 |
支持 |
支持 |
在容灾数据库写数据 |
不支持 |
支持,但可能导致主键冲突 |
其他日志操作对复制的影响,如截断日志 |
无影响 |
不允许其他日志操作,否则可能导致事务不一致,从而导致复制中断 |
自动化全量 |
支持 |
不支持,手工做,且需停止业务 |