数据复制工具Replication Server 6.2应用测试

什么是Replication Server?

Replication Server是Enterprisedb 开发的一种软件产品,可以实现复制,其目的是使数据的副本从一个位置到另一个位置,并确保所复制的数据是和原来一样随着时间的推移同步,应用于Oracle,SQL Server,PostgreSQL和Advanced Server数据库管理系统的表。

为什么使用Replication Server

Replication Server可用于组织中的各种用例,在这些情况下,在多个设置中使用相同的数据非常重要,这使用户可以处理“真实”数据,这些数据将在多个设置中产生可靠的“真实”结果。Replication Server的单主复制和多主复制提供了广泛的受支持的用例。

Replication Server支持两种复制模型:

•单主复制(SMR):在指定的主数据库中允许对表行进行更改(插入,更新和删除),这些更改将复制到一个或多个从数据库中的表中,从属数据库中的复制表除接受其指定的主数据库外,不允许接受任何更改(这也称为主从复制);

•多主复制(MMR):指定两个或多个数据库,在其中创建具有相同表定义和初始行集的表;在任何数据库中都允许对表行进行更改(插入,更新和删除),对任何给定数据库中的表行所做的更改都将复制到每个其他数据库中的对应表中。

使用场景

单原版复制的一些较常用的用法包括:

卸载报告和商业智能查询

在这种用例中,用户从生产OLTP系统中获取全部或部分数据,并将其复制到另一个数据库,其唯一目的是支持报告查询。这可以带来多种好处:a)从OLTP系统中删除了报告负载,从而提高了事务处理性能,b)查询性能也得到了改善,而没有从属于系统上的事务,并且c)在Oracle安装中,报告服务器的职责可以是由Advanced Server之类的产品处理,从而降低了报表服务器的许可成本。

使用热备用服务器

当许多组织希望提高其数据的可用性时,一种经济高效的解决方案通常是使用热备份服务器。这些是通过复制与在线系统保持最新状态的数据库服务器,如果生产系统发生故障,则可以快速将其联机。热备用服务器也可以通过正常切换到备用服务器来用于常规维护,以便使生产服务器脱机以进行常规维护。

并行测试系统

通常,升级或迁移到新的数据库系统要求新旧系统并行启动并运行,以允许实时测试和比较结果。复制可以在这种用例中使用,并且经常在开发和测试环境中使用。

迁移数据

与并行运行类似,数据可能会以某种“播种”操作从一个系统迁移到另一个系统。在这种情况下,可以通过快速复制数据非常有效。

考虑多主复制的一些原因包括:

写可用性

在单主复制中,只有主数据库可用于写操作。从数据库对于应用程序是只读的。如果复制的目标数据库也必须可用于写访问,则可以将多主复制用于与单主复制概述的用例相同的用例,但是还具有对从属的写访问的其他优点。

写可扩展性

在写密集型应用程序中,多主复制允许您利用位于不同主机上的多个数据库服务器在其自己的主数据库上彼此独立地处理写事务,然后可以根据您选择的时间表在主数据库中协调更改。 本地化数据访问 在地理位置分散的应用程序中,可以将数据库的本地访问提供给客户端区域。使数据库服务器物理上靠近客户端可以减少数据库的延迟。多主复制允许您使用主数据库的WAN连接网络,该网络在地理位置上可以接近客户端组,但仍可以保持主数据库之间的数据一致性。

应用测试

本次测试用3个EDB主节点:(CentOS Linux release 7.6.1810 (Core))

192.168.21.93:5445(master)(192.168.21.97:5445(slave))

192.168.21.94:5445

192.168.21.95:5445

RS服务器:

192.168.21.96 windows server 2012

数据库版本:edb-as96-server-9.6.16.23-2-linux-x64

RS版本:xdbreplicationserver-6.2.7-1-windows

数据库服务器的配置文件postgresql.conf 中需要以下配置参数设置:

wal_level = logical

max_wal_senders=3

max_replication_slots=9 (max_wal_senders*主节点数量)

track_commit_timestamp=on

pg_hba.conf

host all all 0.0.0.0/0 md5

参与复制的表都必须具有主键;

对于使用基于日志的同步复制方法的复制系统,要在其上定义过滤器的发布表必须将REPLICA IDENTITY选项设置为FULL。

REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING } alter table table1 replica identity full;

通常,不得在任何主节点(包括主定义节点)中对表定义进行更改,如果进行了此类更改,则除非使用第 7.8节中描述的DDL更改复制功能进行更改,否则它们不会传播到多主复制系统中的其他节点。如果在不使用DDL更改复制功能的情况下对表进行更改,则可能会导致将来的复制尝试失败。

安装RS的主机需要安装JAVA1.7以上的版本;

安装完成后,服务名称Publication Service 显示名称Publication Service for xDB Replication Server

RS日志保存路径: C:\Users\faxy\.enterprisedb\xdb\6.2

配置文件路径:

C:\Program Files (x86)\PostgreSQL\EnterpriseDB-xDBReplicationServer\etc

参数文件都可保持默认值:

如果需要更多日志,可以更改日志级别:

两个配置文件:( xdb_pubserver.conf )和( xdb_subserver.conf )

#Logging level. Possible values are OFF, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST, ALL

关闭,严重,警告,信息,配置,精细的,细节,最优质,所有

#Defaults to WARNING

#logging.level=WARNING

logging.level=ALL

配置文件修改后需要重启RS服务生效。

RS支持单主复制和多主复制,给定的数据库不能同时参与单主复制和多主复制。

RS执行两种不同类型的复制,这两种主要类型称为快照复制和同步复制。

在快照复制中,使用数据库系统的TRUNCATE命令删除目标表中所有现有的行,然后,从出版物的源表中完全重新加载这些表。

在同步复制中,仅将自上次复制以来对源表中的行所做的更改(插入,更新和删除)应用于目标表。

在多主复制系统中,从主定义节点到新添加的主节点的第一个复制必须始终由快照完成。主节点之间的后续复制通过同步进行。

冲突解决策略:

最早的时间戳。选择最早的时间戳选项时,将根据该特定节点上发生更新的时间戳比较来自源主节点和目标主节点的更新冲突中涉及的相关行。应用最早发生的行更改。该行随以后时间戳的更改将被丢弃。

最新时间戳。与最早的时间戳相同的方法,只是接受具有最新时间戳的行更改。具有较早时间戳记的行更改将被丢弃。

节点优先级。应用具有最高节点优先级的主节点的行更改,同时丢弃较低优先级的主节点的更改。节点优先级是1到10范围内的整数,其中1是最高优先级,而10是最低优先级。

自定义 自定义冲突处理仅适用于更新/更新冲突。您必须提供一个PL / pgSQL程序来解决由更新/更新冲突引起的任何冲突。

测试准备:

创建用户:create role user1 login encrypted password 'user1';

创建数据库:create database db1 owner user1;

创建表:create table table1 (id int primary key, info text, c_time timestamp,bz text);

insert into table1 select

generate_series(1,100),md5(random()::text),clock_timestamp(),chr(int4(random()*3)+65);

创建多主发布任务:

注册出版服务器

此处的用户名密码在安装RS的时候设定的。

添加数据库

节点优先级。1到10的整数,是分配给该主节点的优先级,用于根据节点优先级解决冲突。最高优先级是1,最低优先级是10。

用户权限不够,就会报如下错误:

添加用户权限: alter role user1 replication;

添加数据库后,会在对应数据库里创建三个schema(_edb_replicator_pub/ _edb_replicator_sub/ _edb_scheduler)

多主复制模式下,添加第一个数据库后如果不创建发布,就直接添加第二个数据库就会报如下错误:

创建发布

添加第二个数据库

添加第三个数据库

目标数据库中不能存在和源数据库发布表名相同的表,不然会报以下错误,表是通过源数据库创建的:

主键列,数据类型为二进制的,不支持复制。

最初在其中定义发布的数据库(主节点)被专门指定为主定义节点(MDN)。在任何给定时间只能有一个主定义节点,但是,可以更改哪个主节点是主定义节点。

快照

会报如下错误,还是权限不足,需要superuser权限

ERROR: only superusers cаn quегy manipulate replication origins

添加权限 alter role user1 superuser; 然后快照

查看两个库是否一致:

设置筛选条件

应用筛选条件

表可以设置多个筛选条件,但是一个数据库一张表只能选择一个筛选条件;

查看同步情况

同步

配置同步策略 (在MDN上进行)

验证同步情况 有筛选条件的同步,一定要设置:alter table table1 replica identity full;

a、在93上更新满足94筛选条件的数据库测试。

B、在94上插入满足95筛选条件的数据;(不管什么条件,数据都会进入MDN节点)

C、在94上插入不满足95筛选条件的数据;(不管什么条件,数据都会进入MDN节点)

D、在94上删除数据,95上没有。

95上有数据的情况,在94上作删除操作:

在95中插入满足94筛选条件的数据:

在95中插入不满足94筛选条件的数据:

在95中更新满足94筛选条件的数据:

在95中更新不满足94筛选条件的数据::

在95中删除满足94筛选条件的数据:

RS同步任务监控 A、通过RS客户端监控

B、通过数据库

_edb_replicator_pub.xdb_pub_replog

通过psql set search_path="$user", public,_edb_replicator_pub; 然后 \d+ 查看表占用大小

6、数据一致性验证:RS Data validator

这个只能针对全量验证,没有表条件参数,所以,无法针对有筛选条件的两个库的验证。 有筛选条件的通过数据库人工验证。

配置数据库信息: C:\Program Files (x86)\PostgreSQL\EnterpriseDB-xDBReplicationServer\etc\datavalidator.properties

验证命令:C:\Program Files (x86)\PostgreSQL\EnterpriseDB-xDBReplicationServer\bin>runValidation.bat -ss public -ts public -it emp,dept -ld C:\Users\faxy\Desktop\log

命令执行完成后会在指定路径生成文件: Eg: datavalidator_20200515-094451.log

差异数据: datavalidator_20200515-094451.diff

测试结论

1、给定的数据库不能同时参与单主复制和多主复制;

2、单主复制只能单向复制,可以创建多个发布;多主复制可以双向复制,但是只能创建一个发布,里面可以添加多张表;

3、在同步过程中,如果网络故障,会有漏数据风险,如果发现丢数据,需要人工处理(在同步过程中,发生网络故障,期间如果没有数据参与同步,则网络恢复后,RS自动恢复同步任务,不需人工处理);

4、RS不支持高可用;