命令行方式安装KFS同步KES到KADB

  • 部署背景及环境

使用命令行方式同步KES的数据至KADB

  1. 操作系统

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

  1. 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

  1. KES版本

KingbaseES V008R006C008B0020 on aarch64-unknown-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (NeoKylin 4.8.5-36), 64-bit

  1. Java版本

openjdk version "1.8.0_272"

  • 部署架构

使用命令行方式安装KFS不需要安装管控平台,只需要下载精简包(replicator),对所有平台通用。精简包名称:KingbaseFlySync-V002R002C004PS002-replicator.tar.gz。部署架构如下如:

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

注意:ruby跟随replicator安装

  • 安装步骤
  1. 创建KFS用户

groupadd flysync

useradd --g flysync flysync

  1. 解压replicator安装包

tar --xvf KingbaseFlySync-V002R002C004PS002-replicator.tar.gz

  1. 创建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

  1. 安装ruby数据库

上传ruby安装包,解压,然后在.bash_profile中配置下面环境变量(路径按照实际的改)

export RUBY_HOME=/home/flysync/rbenv/ruby --假设ruby解压到/home/flysync/rbenv目录

PATH=RUBY_HOME/bin:PATH

export PATH

  1. KES作为源端的数据库配置

KingbaseES V8 数据库配置 (xlogical 相关配置)

在复制中我们使用了decoderbufs 插件进行中间数据的存储, 因此首先检查V8 数据库是否已经支持decoderbufs 插件。在Kingbase FlySync 的安装包中extensions 目录中提供了相关依赖文件(kfs_decoderbufs_lib_mips64_v8r2.zip),解压zip 包可得到。

  1. 检查V8 安装目录下的/lib 目录,是否有decoderbuf.so 和kfs_current_query.so 包,若没有,将KingbaseFlySync 安装包中附带的decoderbuf.so 和kfs_current_query.so 复制到Kingbase 安装目录的/lib 目录下。

  2. 检查V8 安装目录下的/share/extension 目录,是否有decoderbufs.control 文件,若没有,将Kingbase FlySync安装包中附带的decoderbuf.control 复制到Kingbase 安装目录的/share/extension 目录下。

注意: KingbaseES V8R3C002B0261 及以上版本和V8R6 不需要替换decoderbuf 文件。

其次开始进行数据库的相关配置:

  1. 编辑安装目录下data/sys_hba.conf 文件, 增加如下配置,使用户有复制权限:

host replication all 127.0.0.1/32 md5

host replication all 0.0.0.0/0 md5

  1. 编辑安装目录下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 兼容模式需配置)

全部配置完成后,重启数据库使配置生效。

  1. 拷贝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目录下。

  1. 根据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

  1. 日志位置:

/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

相关推荐
888CC++10 分钟前
java 并发编程
java·开发语言·python
无风听海28 分钟前
JSON Web Token(JWT)完全指南
java·前端·json
Leon-Ning Liu1 小时前
【真实经验分享】 ORA-600 [qesmaGetTblSeg1]
数据库·oracle
与数据交流的路上1 小时前
MySQL 优化 -- 相关
数据库·mysql
Rooting++1 小时前
为什么mysql的表字段的collation会自动变
数据库·mysql
Wch1G0z8A1 小时前
Google 开源了啥,让 AI Agent 碰数据库不再是定时炸弹
数据库·人工智能·开源
JAVA社区1 小时前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes
暴躁小师兄数据学院1 小时前
【AI大数据工程师特训笔记】第14讲:Linux操作系统与shell脚本
大数据·人工智能·笔记
tedcloud1231 小时前
cc-switch评测:多AI Coding Agent管理工具详解
数据库·人工智能·sql·学习·自动化
土狗TuGou2 小时前
SQL内功笔记 · 第8篇:事务的四大特性与隔离级别
数据库·笔记·后端·sql·mysql·oracle