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

news/2025/3/3 18:49:15/

  • 部署背景及环境

使用命令行方式同步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


http://www.ppmy.cn/news/1576352.html

相关文章

线上服务器的文件下载到本地Windows电脑

将线上服务器的文件下载到本地Windows电脑,可以根据具体情况选择以下方法: 方法一:使用远程桌面连接(推荐) 开启远程桌面功能 确保服务器已启用远程桌面(RDP)服务,默认端口为3389。检…

【前端知识】Vue2.x与3.x之间的区别以及升级过程需要关注的地方

文章目录 Vue 2.x 与 Vue 3.x**Vue 2.x 与 Vue 3.x 的区别详细说明****1. 核心特性与性能****2. API 变化****3. 新增特性****4. 工具链与生态系统** **从 Vue 2 升级到 Vue 3 的注意事项****1. 检查依赖库兼容性****2. 修改代码以适配 Vue 3 的 API****3. 处理废弃功能****4. …

大模型推理时的尺度扩展定律

大模型推理时的尺度扩展定律 FesianXu at 20250212 at Wechat Search Team 前言 大模型的尺度扩展定律告诉我们:『LLM的性能会随着模型的参数量、模型的训练量、模型的训练数据量的增加而增加』。训练存在尺度扩展定律,测试也存在尺度扩展定律&#xff…

《Effective Objective-C》阅读笔记(下)

目录 内存管理 理解引用计数 引用计数工作原理 自动释放池 保留环 以ARC简化引用计数 使用ARC时必须遵循的方法命名规则 变量的内存管理语义 ARC如何清理实例变量 在dealloc方法中只释放引用并解除监听 编写“异常安全代码”时留意内存管理问题 以弱引用避免保留环 …

本地部署大语言模型-DeepSeek

DeepSeek 是国内顶尖 AI 团队「深度求索」开发的多模态大模型,具备数学推理、代码生成等深度能力,堪称"AI界的六边形战士"。 Hostease AMD 9950X/96G/3.84T NVMe/1G/5IP/RTX4090 GPU服务器提供多种计费模式。 DeepSeek-R1-32B配置 配置项 规…

.gitignore 设置后不见效的解决方法中,方案一就可以了

遇到的问题:你的 .gitignore 文件中包含了 unpackage/ 目录,但它不起作用的原因可能有以下几个: 1. 文件或目录已经被 Git 跟踪 .gitignore 只能忽略 未被 Git 追踪 的文件或目录。如果 unpackage/ 目录已经被提交到 Git 版本库中&#xff…

flutter AnimationController 动画使用总结

1、AnimationController AnimationController 是 Flutter 动画系统中的一个核心类,它负责控制动画的时间进度,并通过与 Tween 结合实现动画效果。AnimationController 通常配合 Animation 来使用,后者代表动画的状态(比如动画的当前值)。 主要功能: 控制动画的开始、停…

Android 布局系列(五):GridLayout 网格布局的使用

引言 在 Android 开发中,布局管理是 UI 设计中的重要环节。随着应用界面的复杂性增加,开发者需要掌握各种布局方式来应对不同的需求。除了常见的 LinearLayout、RelativeLayout和ConstraintLayout,Android还提供了一个非常使用的布局 -- Gri…