首页 > 数据库 > > 数据库系统管理-逻辑复制代理(单机部署模式)
GaussDB 100逻辑复制代理解析包含逻辑日志信息的REDO日志和归档日志,将解析到的满足条件的数据发送给HDR工具,然后HDR再将数据回放到目标端数据库,实现将GaussDB 100的数据变化准实时复制到其它同构或异构数据源的能力。相对于物理复制对日志物理格式的强依赖,逻辑复制代理和HDR的使用更加灵活,可以实现GaussDB 100跨版本复制、GaussDB 100向其它异构数据库(如Oracle)复制,以及在源、目标数据库表结构不一致时的定制支持。逻辑复制代理可以应用在主备数据库间的增量数据备份、不同业务系统之间的数据同步、系统升级过程中在线数据迁移等场景。
源数据库中逻辑复制代理用户所需的最小权限 |
|---|
CONNECT CREATE TABLE SELECT ON SYS.SYS_TABLES SELECT ON SYS.SYS_COLUMNS SELECT ON SYS.SYS_USERS SELECT ON SYS.SYS_CONSTRAINT_DEFS SELECT ON SYS.SYS_LOGIC_REPL SELECT ON SYS.DV_DATABASE SELECT ON SYS.DV_LOG_FILES SELECT ON SYS.DV_ARCHIVED_LOGS |

以下操作步骤中使用的数据库连接信息说明如下:
mkdir -p /opt/software/tools
cd /opt/software/tools安装包解压后生成文件夹GaussDB_100_1.0.1-LOGICREP-AGENT。
tar -zxvf GaussDB_100_1..1-LOGICREP-AGENT.tar.gz -C /opt/software/tools
[omm@plat tools]$ ll
total 7940
drwxr-xr-x. 3 omm dbgrp 4096 Apr 26 15:13
GaussDB_100_1..1-LOGICREP-AGENT
-rw-r--r--. 1 omm dbgrp 8113682 Apr 29 16:24
GaussDB_100_1..1-LOGICREP-AGENT.tar.gz
cd GaussDB_100_1.0.1-LOGICREP-AGENT
[omm@plat GaussDB_100_1..1-LOGICREP-AGENT]$ ll
total 4
drwx------. 5 omm dbgrp 4096 Apr 26 15:13 logicrep_agent
cd logicrep_agent
[omm@plat logicrep_agent]$ ll
total 12
drwx------ 2 omm dbgrp 4096 Sep 11 09:41 bin
drwx------ 4 omm dbgrp 4096 Sep 11 09:41 conf
drwx------ 2 omm dbgrp 4096 Sep 11 09:41 lib
相关目录说明如下:
cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/conf
vi init.properties
所有改动需要重启逻辑复制服务生效。conf/init.properties文件模版如下,其中斜体表示用户可根据需要替换为实际值。
#unit: number of slots
#value range:[1024,20480]
dispatch.queue.size=1024
#unit: number of transactions
#value range:[100,300]
transaction.buffer.size=100
#unit: MB
#value range:[100,500]
transaction.buffer.memory.size=100
#unit: MB
#value range:[300,800]
logentry.buffer.size=500
#byte order of redo logfiles to be extracted
# little - logfiles generated on little endian platform
# big - logfiles generated on big endian platform
logfile.endian.type=little
#path_to_keystore_file(for zenith)
javax.net.ssl.keyStore=
#encrypted keyStorePassword(for zenith)
javax.net.ssl.keyStorePassword=
#whether skips logs when one table's metadata can not be found.
# true - skip logs of the table, one probable scenario is:
# the table was dropped at the source db, logicrep restarted, and metadata lost.
# false - can not skip, logicrep throws an exception and exits.
skip.table.without.metadata=false
#unit: ms
replay.batch.linger.ms=1000
#should not be less than the number of rmid in kernel
session.number=10240
相关参数解释如下:
工作队列大小。根据可并发事务大小评估,在性能要求不高的场景下,使用默认配置即可。
事务缓存最大存放事务个数。当缓存满时,将等待回放线程处理。初始时使用默认配置。后续可以通过观察性能日志的缓存高水位进行调整。
每个事务占用的最大内存空间,当某个事务超过默认配置值的时候,会导致逻辑复制失败,这个时候可以调大该参数值,确保占用大内存的事务可以正确地进行逻辑复制。
logentry缓存大小。初始时使用默认配置。后续可以通过观察性能日志的缓存高水位进行调整。
指定数据存储在内存中时采用大端模式还是小端模式,此处的大小端配置是指产生逻辑复制工具需要使用的日志文件的机器的大小端。采用大端模式存放数据时,数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中;采用小端模式存放数据时,数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
指定keyStore文件路径,该路径中包括文件名。仅在配置“useSSL=true”时且需要认证客户端时使用该参数。
指定keyStore密码的密文。仅在配置“useSSL=true”时且需要认证客户端时使用该参数。该密文的生成方式请参见步骤4。
批量回放延时时间
数据库最大session数
zsql / as sysdba -D dn_data_dir
GRANT SELECT ON SYS.SYS_TABLES TO omm with grant option;
GRANT SELECT ON SYS.SYS_COLUMNS TO omm with grant option;
GRANT SELECT ON SYS.SYS_USERS TO omm with grant option;
GRANT SELECT ON SYS.SYS_CONSTRAINT_DEFS TO omm with grant option;
GRANT SELECT ON SYS.SYS_LOGIC_REPL TO omm with grant option;
GRANT SELECT ON SYS.DV_DATABASE TO omm with grant option;
GRANT SELECT ON SYS.DV_LOG_FILES TO omm with grant option;
GRANT SELECT ON SYS.DV_ARCHIVED_LOGS TO omm with grant option;
EXIT
omm为安装后创建的系统管理员,其默认密码是gaussdb_123。
假设使用的DN端口号是40000。
zsql omm@127.0.0.1:40000
Please enter password:
***********
CREATE USER LREP IDENTIFIED BY database_234;
GRANT CONNECT, CREATE TABLE TO LREP;
GRANT SELECT ON SYS.SYS_TABLES TO LREP;
GRANT SELECT ON SYS.SYS_COLUMNS TO LREP;
GRANT SELECT ON SYS.SYS_USERS TO LREP;
GRANT SELECT ON SYS.SYS_CONSTRAINT_DEFS TO LREP;
GRANT SELECT ON SYS.SYS_LOGIC_REPL TO LREP;
GRANT SELECT ON SYS.DV_DATABASE TO LREP;
GRANT SELECT ON SYS.DV_LOG_FILES TO LREP;
GRANT SELECT ON SYS.DV_ARCHIVED_LOGS TO LREP;
CREATE TABLE LREP.LOGICREP_PROGRESS
(
ID VARCHAR(128),
COMMITTED_TX_SCN BIGINT,
COMMITTED_TX_TIME TIMESTAMP,
LOGPOINT VARCHAR(128),
UPDATE_TIME TIMESTAMP
);
CREATE UNIQUE INDEX IX_LREP_PROGRESS ON LREP.LOGICREP_PROGRESS(ID);该操作是在源数据库GaussDB 100上使用zencrypt工具完成的。
cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/conf/sec
[omm@plat sec]$ ll
total 8
-rw-------. 1 omm dbgrp 38 Apr 26 15:13 key1.properties
-rw-------. 1 omm dbgrp 100 Apr 26 15:13 key2.properties
key1.properties文件用于保存随机密钥因子,key2.properties文件用于保存工作密钥。
cd $GSDB_HOME/bin
./zencrypt –g
Key: DmLILoFxlCRti8MtW2QlDw==
WorkKey: s0U9unwLKmU4KtieCzoqK0GRgu454GCCBElwd/WnpXJV1m0JxVgkLvarlgI8FcThXRwoYHAeQu+NHYDAXoRzWA==
看到提示信息“Please enter password to encrypt:”时,输入源数据库中为逻辑复制创建的用户LREP的密码,则生成的是LREP用户密码的密文,在步骤5中将该密文配置在源数据库的参数ds.passwd中;输入目标数据库中为逻辑复制创建的用户logicuser的密码,则生成的是logicuser用户密码的密文,在步骤5中将该密文配置在目标数据库的参数ds.passwd中。
./zencrypt -e AES256 -f lCHMm1WvDKU97uVQDd8+ew== -k g/FMnXWyHkp+8TKMa8qm5j+Ojvuy5hHV/p3WloMhNl2DoUT6Dl90Tom5DKP+3J2M6s/jI0mMdUknmUYcOHQN+g==
Please enter password to encrypt:
*********
Please input password again:
*********
Cipher: jFB1xNaKybjU5kAD3gdJeJvdvEdjj0c87L1NBsSWZHA=
cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/conf打开datasource.properties文件,并按i进入编辑模式。
vi datasource.properties
斜体表示需要替换为实际值。其中,用户密码密文的生成请参考步骤4,为逻辑复制服务创建用户在步骤3中完成。
# properties of source/destination datasources defined here
# note:
# 1. section name - datasource name
# 2. mandatory properties:
# ds.type - gauss/capture, needed for logicrep
[srcdb]
ds.type=gauss
ds.url=jdbc:zenith:@127.0.0.1:1611?useSSL=false
ds.username=lrep
ds.passwd=
ds.available.query.sql=select 1
initial.size=5
min.idle=1
max.idle=10
max.active=50
max.wait=100000
[dstCapture]
ds.type=capture
optimize.batch.send.buffer=3145728
agent.monitor.address=10.134.254.240:1889
以上示例包括逻辑复制代理当前支持的二种数据源类型的参数,均为必填字段。参数详细说明如下:
cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/conf/repconfvi repconf_db.xml
源数据库到目标数据库逻辑复制相关的所有信息均通过复制关系定义文件描述,并以xml格式存放在conf/repconf目录下。
<?xml version="1.0" encoding="UTF-8" ?>
<replicationConfig>
<repName>
<repNameInfo name="logicrep"/>
</repName>
<datasource>
<datasourceInfo srcName="srcdb" dstName=" dstCapture"/>
</datasource>
</replicationConfig>复制关系的名称,作为复制关系的唯一标识和复制进程启动时的命令行参数,以指定需要进行复制的内容。
当conf/repconf目录下存在多个定义文件时,要求名称必须唯一。
指定复制的源数据库名称和目标数据库名称,该名称需在datasource.properties中存在定义。
zsql omm@127.0.0.1:40000 -c "ALTER DATABASE ENABLE_LOGIC_REPLICATION ON;"
Please enter password:
***********
omm为安装后创建的系统管理员,其默认密码是gaussdb_123。
zsql omm@127.0.0.1:40000 -c "ALTER TABLE [schema_name.]table_name ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;"
Please enter password:
***********
omm为安装后创建的系统管理员,其默认密码是gaussdb_123。

用户可以使用数据库管理员账户登录源数据库查询全局逻辑复制开关的状态。操作步骤如下:
omm为安装后创建的系统管理员,其默认密码是gaussdb_123。
假设使用的DN端口号是40000。
zsql omm@127.0.0.1:40000
Please enter password:
***********SELECT lrep_point, lrep_mode FROM sys.DV_DATABASE;
--主机上全局逻辑复制开关状态查询结果如下:
LREP_POINT LREP_MODE
-------------------- --------------------
0-2-422-50b ON
1 rows fetched.
用户可以使用数据库管理员账户登录源数据库,通过以下命令查询某张表的逻辑复制开关状态。omm为安装后创建的系统管理员,其默认密码是gaussdb_123。
zsql omm/gaussdb_123@127.0.0.1:1888 -c "SELECT l.status FROM sys.sys_logic_repl l, sys.sys_tables t WHERE t.name='ORDERS' AND t.id=l.table#;"
SQL>
STATUS
------------
1
1 rows fetched.

使用zsql omm/gaussdb_123@127.0.0.1:1888 l.status FROM sys.sys_logic_repl l, sys.sys_tables t WHEREt.name='ORDERS' ANDt.id=l.table#;"查询某张表的逻辑复制开关时,表名必须使用大写,否则查询结果为空。
STATUS
------------
0 rows fetched.cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/bin启动逻辑复制代理。

startup.sh和shutdown.sh脚本需要使用数据库安装帐号运行。
sh startup.sh -n logicrep
program start successfully
其中,-n rep_name为必选参数,指定需要启动的逻辑复制关系,rep_name在复制关系定义文件中定义。该名称将作为后续重启该逻辑复制服务、查询复制进度等一系列操作的唯一标识,因此需保证其唯一性、不要在使用过程中对其进行修改。逻辑复制服务启动时,会检查conf/repconf目录下的所有复制关系定义文件,如果该逻辑复制服务的复制关系定义文件中的rep_name的取值和已启动逻辑复制服务的rep_name相同,将强行退出。
用户可定期查看log目录下的日志,以便检查是否有error级别的错误,及时发现问题并解决问题,同时,通过查看性能日志,可确认是否有性能问题,进而通过调整启动参数来提高性能。仅在主机上进行逻辑复制的例行性检查即可。
cd /opt/software/tools/GaussDB_100_1.0.1-LOGICREP-AGENT/logicrep_agent/logicrep/logicrep/logicrep逻辑复制代理的日志包括告警日志、运行日志、性能日志。
检查alarm目录下的日志,确认是否有线程/进程退出等严重错误。如果有,参考其它日志信息解决问题后重启服务。
检查run目录下的运行日志,确认是否有运行期错误。
检查perf目录下的性能日志,查看各统计项信息,确认是否有性能问题、需要调整各项启动参数。
如果逻辑复制服务运行正常,则例行性检查结束。如果逻辑复制服务运行不正常,则跳转步骤4。
shutdown.sh脚本需要使用数据库安装帐号运行。
sh shutdown.sh -n logicrep
Process is stopping, please wait......
Close logicRepName=logicrep logic process successfully.
startup.sh和shutdown.sh脚本需要使用数据库安装帐号运行。
sh startup.sh -n logicrep
program start successfully
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3171246/ ,如需转载,请注明出处,否则将追究法律责任。