- 部署背景及环境
使用命令行方式同步KES的数据至KADB
- 操作系统
mppadmin@mdw \~\]$ uname -a Linux mdw 4.19.90-24.4.v2101.ky10.aarch64 #1 SMP Mon May 24 14:45:37 CST 2021 aarch64 aarch64 aarch64 GNU/Linux 1. KFS版本 KingbaseFlySync-V002R002C004PS002-replicator.tar.gz 1. ruby版本 \[flync@mdw bin\]$ /home/flync/rbenv/ruby/bin.real/ruby --version ruby 2.2.2p95 (2015-04-13 revision 50295) \[aarch64-linux
- KADB版本
PostgreSQL 9.4.24 (Greenplum Database 6.0.0 build dev.V003R002C001B0181.d354cc9) on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.
5 20150623 (Red Hat 4.8.5-36), 64-bit compiled on Dec 30 2021 09:59:37
- KES版本
KingbaseES V008R006C008B0020 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (NeoKylin 4.8.5-36), 64-bit
- Java版本
openjdk version "1.8.0_272"
- 部署架构
使用命令行方式安装KFS不需要安装管控平台,只需要下载精简包(replicator),对所有平台通用。精简包名称:KingbaseFlySync-V002R002C004PS002-replicator.tar.gz。部署架构如下如:

因为测试环境源数据库和目标数据库在一台机器上,只需要安装一个replicator。如果不在一台机器上,则需要在源端和目标端分别安装replicator。源端从kes日志抽取日志,目标端replicator和源端replicator通讯,接收日志,写入KADB

注意:ruby跟随replicator安装
- 安装步骤
- 创建KFS用户
groupadd flysync
useradd --g flysync flysync
- 解压replicator安装包
tar --xvf KingbaseFlySync-V002R002C004PS002-replicator.tar.gz
- 创建flysync.ini文件,描述部署架构及源\目标数据信息
Ini文件的模板在:/home/flync/KingbaseFlySync-V002R002C004PS002-replicator/flysync-replicator/samples/ini
因为测试环境的源和目标数据库在一台机器上,可以在flysync.ini分别写源和目标的配置信息,如果在两台机器,则分别在源端和目标端的kfs用户家目录配置两个flysync.ini文件,分别写源和目标端的配置信息,以下为在一个flysync.ini文件使用不同的标签分别配置源和目标的信息
本文以KESV8作为源端,拷贝flysync_kingbase8_source.ini模板文件到flysync的家目录,命名为flysync.ini,并修改如下:
defaults
install-directory=/home/flync/flysync //KFS将要安装的目录
profile-script=~/.bashrc
rmi-port=11000
oracle11kadb\] //KADB作为目标配置 role=slave //目标端必为:slave master=mdw //源端主机名称 master-kufl-port=3113 //源端kufl端口,注意和kingbase8标签配置一致 members=mdw //目标端主机名 kufl-port=3112 //目标端kufl端口 replication-host=10.225.56.112 //当前主机名称,用于连接目标端数据库 replication-port=5432 //数据库端口 replication-user=mppadmin //数据库用户 replication-password=Kingbase@1234 //数据库密码 datasource-type=kadb //目标端数据库类型 kadb-dbname=target //目标端数据库名称 svc-parallelization-type=none svc-remote-filters=casetransform,rename property=replicator.filter.casetransform.to_upper_case=false property=replicator.applier.dbms.optimizeRowEvents=true property=replicator.applier.dbms.maxRowBatchSize=5000 \[kingbase8
role=master //源端必须为:master
master=mdw //源端主机名称
members=mdw //目标端主机名称
kufl-port=3113 //源端kufl端口
replication-host=10.225.56.112 //源端主机地址,用于数据连接
replication-port=54322
replication-user=SYSTEM //源端数据库用户名
replication-password=123456 //密码
datasource-type=kingbase //源端数据库类型
datasource-version=8 //kes版本
kingbase-extractor-method=xlogical
kingbase-dbname=source
svc-extractor-filters=replicate,ignoreddl
property=replicator.filter.replicate.do=public.* //源端需要同步的表
property=replicator.filter.replicate.ignore=public.t1 //源端忽略的表
property=replicator.extractor.dbms.minRowsPerBlock=4000
property=replicator.extractor.dbms.keepMixDML=true
property=replicator.filter.ignoreddl.ignore=CREATE;ALTER;DROP;TURNCATE
- 安装ruby数据库
上传ruby安装包,解压,然后在.bash_profile中配置下面环境变量(路径按照实际的改)
export RUBY_HOME=/home/flysync/rbenv/ruby --假设ruby解压到/home/flysync/rbenv目录
PATH=RUBY_HOME/bin:PATH
export PATH
- KES作为源端的数据库配置
KingbaseES V8 数据库配置 (xlogical 相关配置)
在复制中我们使用了decoderbufs 插件进行中间数据的存储, 因此首先检查V8 数据库是否已经支持decoderbufs 插件。在Kingbase FlySync 的安装包中extensions 目录中提供了相关依赖文件(kfs_decoderbufs_lib_mips64_v8r2.zip),解压zip 包可得到。
-
检查V8 安装目录下的/lib 目录,是否有decoderbuf.so 和kfs_current_query.so 包,若没有,将KingbaseFlySync 安装包中附带的decoderbuf.so 和kfs_current_query.so 复制到Kingbase 安装目录的/lib 目录下。
-
检查V8 安装目录下的/share/extension 目录,是否有decoderbufs.control 文件,若没有,将Kingbase FlySync安装包中附带的decoderbuf.control 复制到Kingbase 安装目录的/share/extension 目录下。
注意: KingbaseES V8R3C002B0261 及以上版本和V8R6 不需要替换decoderbuf 文件。
其次开始进行数据库的相关配置:
- 编辑安装目录下data/sys_hba.conf 文件, 增加如下配置,使用户有复制权限:
host replication all 127.0.0.1/32 md5
host replication all 0.0.0.0/0 md5
- 编辑安装目录下data/kingbase.conf 文件, 修改如下配置:
max_wal_senders = 2* //数据库个数日志发送进程数(最小为4)
wal_keep_segments = 4 //保留日志数量,根据磁盘空间设置,越大越好
wal_level = logical //日志级别
max_replication_slots = 2* //数据库个数复制槽数量(最小为4)
ora_input_emptystr_isnull=off //关闭空字符串显示为null(pg 兼容模式需配置)
全部配置完成后,重启数据库使配置生效。
- 拷贝KESV8的jdbc驱动到lib目录
在部署之前需确认KingbaseES V8 的具体版本,如果为V8R3(不含)之上的版本,需要将Kingbase FlySync 的安装包中extensions/jdbc/kingbase8-8.6.0.jar 拷贝到同步包的flysync-replicator/lib 目录下,如果为V8R3(含) 以下版本,需要Kingbase FlySync 的安装包中extensions/jdbc/kingbase8-8.2.0.jar 拷贝到同步包的flysync-replicator/lib目录下。
- 根据flysync.ini文件的配置,安装replicator
进入replicator解压目录下面的tools目录,执行./fspm install
flync@mdw \~\]$ cd KingbaseFlySync-V002R002C004PS002-replicator/ \[flync@mdw KingbaseFlySync-V002R002C004PS002-replicator\]$ cd tools \[flync@mdw tools\]$ ls -lrt 总用量 32 drwxr-xr-x 3 flync flync 4096 11月 19 13:40 ruby-fspm -rwxr-xr-x 1 flync flync 1279 2月 12 17:47 fspm -rwxr-xr-x 1 flync flync 16959 2月 12 17:47 flysync_prep_upgrade -rwxr-xr-x 1 flync flync 1554 2月 12 17:47 clean_release_directory \[flync@mdw tools\]$ ./fspm install 1. 安装完成后,根据安装程序提示启动replicator replicator start 或者 /home/flsync/flysync/cluster_home/bin/startall 1. 查看服务状态 命令:fsrepctl services \[flync@mdw tools\]$ fsrepctl services Processing services command... NAME VALUE ---- ----- appliedLastSeqno: 4 //日志抽取序列号 appliedLatency : 0.009 role : master serviceName : kingbase8 serviceType : local started : true state : ONLINE //online表示正常 NAME VALUE ---- ----- appliedLastSeqno: 4 //日志应用序列号 appliedLatency : 0.136 role : slave serviceName : oracle11kadb serviceType : local started : true state : ONLINE //online表示正常 Finished services command... * 补充 1. 常用命令 查看服务状态 \[flync@mdw tools\]$ fsrepctl -service kingbase8 status Processing status command... NAME VALUE ---- ----- appliedLastEventId : kb:33006448:33008696 appliedLastSeqno : 4 appliedLatency : 0.009 autoRecoveryEnabled : true autoRecoveryTotal : 0 channels : 1 clusterName : kingbase8 currentEventId : kb:33006448:33008928 currentTimeMillis : 1740649124074 dataServerHost : 10.225.56.112 extensions : host : 10.225.56.112 latestEpochNumber : 1 masterConnectUri : kufl://localhost:/ masterListenUri : kufl://mdw:3113/ maximumStoredSeqNo : 4 minimumStoredSeqNo : 0 offlineRequests : NONE pendingError : NONE pendingErrorCode : NONE pendingErrorEventId : NONE pendingErrorSeqno : -1 pendingExceptionMessage: NONE pipelineSource : UNKNOWN relativeLatency : 172358.892 resourcePrecedence : 99 rmiPort : 11000 role : master seqnoType : java.lang.Long serviceName : kingbase8 serviceType : local simpleServiceName : kingbase8 siteName : default sourceId : 10.225.56.112 state : ONLINE timeInStateSeconds : 173037.96 timezone : GMT+08:00 transitioningTo : uptimeSeconds : 173039.419 useSSLConnection : false version : Kingbase FlySync V002R002C004PS002 查看服务的日志解析情况 \[flync@mdw tools\]$ kufl -service kingbase8 list SEQ# = 0 / FRAG# = 0 (last frag) - TIME = 2025-02-25 17:22:34.665 - EPOCH# = 0 - EVENTID = kb:32948840:32949728 - SOURCEID = 10.225.56.112 - METADATA = \[tz_aware=true;dbms_type=kingbase;client_id;all_tables=\[public.test\];service=kingbase8;shard=public
-
TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
-
OPTIONS = []
-
SQL(0) =
-
ACTION = INSERT
-
SCHEMA = public
-
TABLE = test
-
ROW# = 0
-
COL(1: a) = 5
-
COL(2: b) = ddd
SEQ# = 1 / FRAG# = 0 (last frag)
-
TIME = 2025-02-25 17:34:46.106
-
EPOCH# = 1
-
EVENTID = kb:32948840:33005616
-
SOURCEID = 10.225.56.112
-
METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[flysync_kingbase8.heartbeat];is_metadata=true;service=kingbase8;shard=#UNKNOWN;source_service_name=flysync_kingbase8;heartbeat=MASTER_ONLINE]
-
TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
-
OPTIONS = []
-
SQL(0) =
-
ACTION = UPDATE
-
SCHEMA = flysync_kingbase8
-
TABLE = heartbeat
-
ROW# = 0
-
COL(1: id) = 1
-
COL(2: seqno) = NULL
-
COL(3: eventid) = NULL
-
COL(4: source_tstamp) = 2025-02-25 17:34:46.104
-
COL(5: target_tstamp) = NULL
-
COL(6: lag_millis) = NULL
-
COL(7: salt) = 0
-
COL(8: name) = MASTER_ONLINE
-
KEY(1: id) = 1
SEQ# = 2 / FRAG# = 0 (last frag)
-
TIME = 2025-02-25 17:43:46.936
-
EPOCH# = 1
-
EVENTID = kb:32948928:33007256
-
SOURCEID = 10.225.56.112
-
METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[public.test];service=kingbase8;shard=public]
-
TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
-
OPTIONS = []
-
SQL(0) =
-
ACTION = INSERT
-
SCHEMA = public
-
TABLE = test
-
ROW# = 0
-
COL(1: a) = 6
-
COL(2: b) = eee
SEQ# = 3 / FRAG# = 0 (last frag)
-
TIME = 2025-02-25 17:44:47.481
-
EPOCH# = 1
-
EVENTID = kb:32948928:33008288
-
SOURCEID = 10.225.56.112
-
METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[public.test];service=kingbase8;shard=public]
-
TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
-
OPTIONS = []
-
SQL(0) =
-
ACTION = DELETE
-
SCHEMA = public
-
TABLE = test
-
ROW# = 0
-
KEY(1: a) = 1
SEQ# = 4 / FRAG# = 0 (last frag)
-
TIME = 2025-02-25 17:46:05.182
-
EPOCH# = 1
-
EVENTID = kb:33006448:33008696
-
SOURCEID = 10.225.56.112
-
METADATA = [tz_aware=true;dbms_type=kingbase;client_id;all_tables=[public.test];service=kingbase8;shard=public]
-
TYPE = com.kingbase.flysync.replicator.event.ReplDBMSEvent
-
OPTIONS = []
-
SQL(0) =
-
ACTION = UPDATE
-
SCHEMA = public
-
TABLE = test
-
ROW# = 0
-
COL(1: a) = 6
-
COL(2: b) = fff
-
KEY(1: a) = 6
- 日志位置:
/home/flync/flysync/flysync/flysync-replicator/log
flync@mdw log\]$ ls -lrt 总用量 348 -rw-r--r-- 1 flync flync 0 2月 25 17:12 replicate_change.log -rw-r--r-- 1 flync flync 0 2月 25 17:12 failure_record_file.log -rw-r--r-- 1 flync flync 0 2月 25 17:12 discard.index -rw-r--r-- 1 flync flync 37455 2月 25 17:34 fsrepsvc-main.log -rw-r--r-- 1 flync flync 1814 2月 25 17:34 replicator-user.log -rw-r--r-- 1 flync flync 60584 2月 25 17:34 fsrepsvc-oracle11kadb.log -rw-r--r-- 1 flync flync 67146 2月 25 17:34 fsrepsvc-kingbase8.log -rw-r--r-- 1 flync flync 167551 2月 25 17:34 fsrepsvc.log \[flync@mdw log\]$ pwd /home/flync/flysync/flysync/flysync-replicator/log 1. 更新flyshnc.ini文件 每次对flysync.ini进行了修改需要执行下面的动作 replicator stop fspm update