实现数据库对等复制
2020-04-15河南许红军
■ 河南 许红军
数据库复制的类型
对于复制来说,其实际上提供了快照复制,事务复制,合并复制和异类复制等类型。
对于快照复制来说,类似于完整备份,可以将整个数据库中的所有数据一次性的发送到被复制的订阅服务器中。因为其发送的数据量很大,在实际中应用的较少。
对于事务复制来说,仅仅是复制事务层面的内容,每次复制的数据量比较少,因此其速度较快,是目前企业级应用的主流类型。
根据事务复制,其还衍生出了对等复制类型,其可以实现双向复制功能。对于合并复制来说,适用于客户端和服务器端的复制场景,也称为Web同步,即在Internet客户端和服务器之间复制数据。
对于异类复制来说,主要是和其他数据库产品(例如Oracle等)之间的事务复制。综合来说,事务复制和异类复制是目前比较常用的复制技术。在本例中主要讲解对等复制技术。
事务复制的特点
事务复制拥有很高的性能,可以实现秒级的延时。该技术可以有效节约成本,不需要特殊的硬件支持,实现起来比较简单并且易于管理,可以在数据库级别和表级别来实现。
事务复制包括标准事务复制和对等事务复制两种方式,对于前者来说,是指从订阅服务器发布到发布服务器的单向过程。其具有易于设计,配置和管理的特性,订阅服务器(备用)可以用于报表。
对于后者来说,可以在多个站点之间进行的数据同步,其基于多主模型运作,使用数据分区来支持分布式的应用程序,可以实现高可用和读/写负载平衡,但是不能处理冲突,为此可以通过设计来避免/防止冲突。对等复制实际上是由两个事务复制的组合,其拥有多个数据库副本,每个服务器都由读/写副本。
数据库复制的用途
对于复制技术来说,其用途是多方面的,例如创建和维护数据的多个副本,使数据更接近用户来降低网络延迟,站点自主(由当地站点的管理员自主管理)和减少锁定冲突等。
复制的组件包括项目复制的数据,发布复制单位和订阅项目的接收方等,分别实现发布,分发和订阅服务。和这些组件对应的服务器角色包括发布服务器,分发服务器和订阅服务等。
注意,复制本质上是单向的。在复制过程中,需要使用到大量的中间的服务账户,这被称为复制代理角色。
通过代理角色,可以读取数据库、日志、快照和队列等对象的内容。之所以要使用代理角色,主要为了解决权限问题,合理控制代理服务账户的权限,可以提高安全性。对于服务器和服务器之间的复制来说,适用于集成来自于多个站点的数据,集成异类数据,转移批处理负荷,数据仓库和报表,提高可伸缩性和可用性等场景。对于复制来说,其实际上处于异步工作模式,会存在因为网络故障的原因,导致丢失数据的可能性,此外,其还存在主键冲突和负载均衡的问题。
准备简单实验环境
例如在本例中,存在SQLSRV01、SQLSRV02和SQLSRV03三台SQL Server服务器,在域控上打开Active Directory用户和计算机窗口,在左侧选择名为“Computers”的OU,在右侧显示这些服务器信息。在其中创建名为“SQLServers”的组,在属性窗口中打开“成员”面板,点击“添加”按钮,将上述单三台服务器,以及SQL Server服务账户和管理员账户添加进来。对于SQL Server服务账户(例如“xxxsvcuser”)来说,是一个域账户。用来运行数据库引擎。
对于管理员账户(例如“xxxdbadmin”)来说,是用来管理SQL Server2016服务器,是一个域账户,需要添加到本地的管理员组中。对于这些账户来说,需要坚持最小权限原则。对于服务账户来说,可以打开SQL Server 2016配置管理器,在其中选择“SQL Server(MSSQLSERVER)”服务,在“登录身份为”列中显示服务账户名称。为了安全起见,最好使用指定的域账户。在SQLSRV01上存在名为“RepDB1”的数据库,在Microsoft SQL Server Management Studis窗口中选择该数据库,在其属性窗口(如图1)左侧选择“选项”项,在右侧的“恢复模式”列表中选择“完整”项,这样便于读取其中的事务信息,点击确定按钮保存配置信息。
图1 数据库属性窗口
在该数据库的右键菜单上选择“任务”→“备份”项,在打开窗口中点击“添加”按钮,添加一个共享网络路径。便于其他服务器对其进行访问。点击“确定”按钮,执行完整备份。再次执行上述备份操作,在打开窗口中的“备份类型”列表中选择“事务日志”项,点击确定按钮备份事务日志。在SQLSRV02和SQLSRV03服务器上分别打开Microsoft SQL Server Management Studis窗口,在“数据库”项的右键菜单上点击“还原数据库”项,在打开窗口中选择“设备”项,点击浏览按钮,选择上述共享路径,添加备份文件。
在左侧选择“选项”项,在右侧的“恢复状态”列表中选择“RESTORE WITH RECOVERY”项,点击“确定”按钮,执行恢复操作。为了便于发布数据,需要有文件共享的支持,为此可以在每台每台服务器上创建一个共享目录,让其可以互相进行访问。例如创建名为“repl”的共享目录,允许Everyone用户进行完全控制。在其属性窗口中的“安全”面板中点击“高级”按钮,在打开窗口中点击“禁用继承”按钮,禁止继承权限。
在“权限条目”列表中选择和“Users”相关的组,点击“删除”按钮将其删除。点击“添加”按钮,在权限项目窗口中点击“选择主体”链接,在打开窗口中输入上述“SQLServers”的组,在“基本权限”面板中选择“完全控制”项,让这三台服务器,以及服务账户和数据库管理员有权限访问该共享目录,禁止其他的用户进行访问。点击“确定”按钮,保存权限配置信息。
配置分发服务器
图2 配置分发服务器界面
对于上述三台服务器来说,需要分别负责各自的分发操作。例如在SQLSRV01上选择“数据库”→“复制”项,在其右键菜单上点击“配置分发”项,在向导界面中的“分发服务器”窗口(如图2)中选择第一项,将自身变成分发服务器。点击“下一步”按钮,输入该机上的预设的共享路径(例如“\sqlsrv01 epl”等)。依次点击下一步按钮,保持默认配置,最后点击完成按钮,完成配置操作。按照同样的方法,将其他的主机配置为分发服务器。注意,各服务器使用自身的共享目录。之后在SQLSRV01上打开Microsoft SQL Server Management Studis窗口,可以看到在系统数据库中会出现名为“distribution”的数据库,这说明复制的中间件已经正常运行了。
配置本地发布项目
选择“复制”→“本地发布”项,在其右键菜单上点击“新建发布”项,在向导界面中的发布数据库窗口中选择目标数据库(例如“RepDB1”),点击“下一步”,在“发布类型”列表中提供了快照发布等类型(如图3),这里选择“对等发布”项,点击“下一步”,选择目标数据库中需要发布的对象,包括表、视图和存储过程等。
图3 选择发布类型
注意,对于表来说,是需要有主键的,否则无法执行事务或者对等发布。
点击“项目属性”→“设置所有表项目的属性”项,在打开窗口中设置各种项目参数信息。点击“下一步”按钮,在“日志读取器代理”栏中点击“安全设置”按钮,在打开窗口中选择“在一下Windows账户下运行”项,输入拥有合适权限的账户,该账户需要拥有数据库管理权限,这里就是用上述“xxxdbadmin”账户,并输入密码。点击“下一步”按钮,选择“创建发布”项,输入发布名称(例如“fb1”),点击“完成”按钮,创建项目。
创建对等拓扑结构
选择“复制”→“本地发布”→“[fb1]:fb1”项,在其右键菜单上选择“配置对等拓扑”项,在向导界面中选择发布服务器(即“SQLSRV01”),在“数据库和发布”栏中选择发布的数据库,点击“下一步”按钮。
在配置拓扑窗口中点击右键,在弹出菜单选择“添加新的对等节点”项。
在连接到服务器窗口中的“服务器名称”栏中输入“SQLSRV02”,点击“连接”按钮。
在添加新的对等节点窗口(如图4)中的“选择数据库”列表中该服务器上相应的数据库。
在“对等发起方ID”栏中输入新的数值,选择“连接到所有显示的节点”和“使用推送订阅”项,让数据的更新速度更快延时更低。
点击“确定”按钮,将SQLSRV02的服务器图标添加进来。按照同样的方法,将SQLSRV03服务器也添加进来。
图4 添加新的对等节点
图5 设置对等数据库初始化方式
这样,在三台服务器之间就构成了对等的复制拓扑。
点击“下一步”按钮,选择“对所有其他对等方使用第一个对等方的安全设置”项,表示在所有的节点上都使用和第一个节点相同的代理配置信息。
点击“下一步”按钮,指定如何初始化新的对等数据库(如图5),这里保持默认,点击“完成”按钮,创建该对等拓扑项目。
分别登录到在上述SQL Server服务器上,在本地发布和本地订阅节点下会显示其他服务器的发布和订阅项目。这样,就实现了对等复制功能。
当其中任何一台服务器中的指定数据库内容发生变化时,都会自动同步复制到其他的服务器与之对应的数据库中。
在Microsoft SQL Server Management Studis窗口左侧的的“对象资源管理器”中选择当前数据库实例节点下“复制”项。在其右键菜单上点击“启动复制监控器”项。
在打开窗口左侧选择“复制监视器”→“我的发布服务器”→“服务器名称”→“[fb1]:fb1”项。
在右侧可以显示复制的监控信息,包括状态、订阅、性能、滞后时间和上次同步时间等信息。