DMHS同步配置
1.1 系统环境
源端数据库 DM
目的端 kafka
同步软件 DMHS
1.2 同步规划
源端A机器
服务器IP:192.168.100.3
siteid:1
mgr_port:5345
目的端B机器
服务器IP:192.168.100.100
siteid:11
mgr_port:5345
data_port :5346
安装目录 /dmsoft/dmhs
注意:源端服务器为达梦数据库实例的主库或者备库,建议在备库安装dmhs同步软件,目的端的服务器可以安装在与kafka软件同一台服务器上,也可以单独部署前提是可以访问到kafak服务。
1.3 安装dmhs源端目的端软件
源端目的端安装dmhs软件
源端dm8安装包 dmhs_V4.1.59_dm8_rev102896_rh6_64_veri_20211021.bin
目的端kafka安装包 dmhs_V4.2.11_dm8-kafka_rev104232_rh6_64_veri_20211222.bin
安装过程:
1.4源端DMHS同步配置
1.4.1源端数据库开启归档日志打开逻辑日志
1)设置归档标记和逻辑日志标记。打开DM8 服务器配置文件“dm.ini”,设置如下值:
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
2)添加归档配置文件。在“dm.ini”同目录下创建文件“dmarch.ini”
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /opt/dmdbms/arch #归档目录
ARCH_FILE_SIZE = 128 #归档文件大小,单位MB
ARCH_SPACE_LIMIT = 50000 #空间大小限制,0 表示不限制
3) 重启DM8 数据库,使配置参数生效
4) 验证配置的正确性
检查归档配置的正确性
SELECT ARCH_DEST, ARCH_FILE_SIZE FROM SYS.V$DM_ARCH_INI WHERE ARCH_TYPE=‘LOCAL’ AND ARCH_IS_VALID=‘Y’;
检查逻辑日志配置的正确性
SELECT PARA_VALUE FROM SYS.V$DM_INI WHERE PARA_NAME = ‘RLOG_APPEND_LOGIC’;
如果归档已经打开可以登录数据库直接执行命令开启逻辑日志:
SQL>SP_SET_PARA_VALUE(1,’ RLOG_APPEND_LOGIC ',1);
1.4.2配置dmhs.hs配置文件
A机器:
[dmdba@bin]#vim /dmsoft/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<cpt>
<db_type>DM8</db_type>
<db_server>192.168.100.3</db_server>
<db_user>TEST</db_user>
<db_pwd>TEST123456</db_pwd>
<db_port>5236</db_port>
<idle_time>300</idle_time>
<update_fill_flag>2</update_fill_flag>
<char_code>PG_UTF8</char_code>
<arch>
<clear_interval>6000</clear_interval>
<clear_flag>0</clear_flag>
</arch>
<send>
<ip>192.168.100.100</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
<net_pack_size>256</net_pack_size>
<net_turns>0</net_turns>
<crc_check>0</crc_check>
<trigger>0</trigger>
<constraint>0</constraint>
<identity>0</identity>
<case_sensitive>0</case_sensitive>
<filter>
<enable>
<item>TEST.MYTEST</item>
</enable>
<disable></disable>
</filter>
<map/>
</send>
</cpt>
</dmhs>
dmhs.hs文件说明:
配置标签:<mgr_port>5345</mgr_port>
说明:dmhs进程启动后监听端口
配置标签:<siteid>1</siteid>
说明:dmhs同步节点标识不能与其他dmhs节点相同
配置标签:
<db_server>192.168.100.3</db_server>
<db_user>TEST</db_user>
<db_pwd>TEST123456</db_pwd>
<db_port>5236</db_port>
说明:dmhs同步的源端数据库的连接IP、同步用户、密码、数据库端口
配置标签:
<send>
<ip>192.168.100.100</ip>
<mgr_port>5345</mgr_port>
<data_port>5346</data_port>
说明:源端发送到目的端dmhs服务的IP,端口、数据端口
配置标签:
<enable>
<item>TEST.MYTEST</item>
</enable>
说明:同步对象白名单
1.4.3DMHS启动脚本文件准备
在dmhs的bin目录下service_template目录中存放了 dmhs相关的所有脚本的模板,修改后即可使用
A机器:[dmdba@bin]# cd /dmsoft/dmhs/bin
A机器:[dmdba@bin]# cp -a DmhsService …/DmhsService
复制启动脚本模板:cp -a DmhsService …/DmhsService
修改dmhs启动脚本:
修改前:
修改后:
1.5目的端DMHS配置
1.5.1配置dmhs_kafka.properties文件
B机器:[dmdba@bin]#vim /dmsoft/dmhs/bin/dmhs_kafka.properties
# DMHS config file path
dmhs.conf.path=/dmsoft/dmhs/bin/dmhs.hs
# kafka broker list,such as ip1:port1,ip2:port2,...
bootstrap.servers=10.10.10.150:9092,10.10.10.151:9092
# kafka topic name
kafka.topic.name=DM_TOPIC
# whether to enable JSON format check
json.format.check=0
print.message.num=1000
# kafka serializer class
key.serializer=org.apache.kafka.common.serialization.StringSerializer
value.serializer=org.apache.kafka.common.serialization.StringSerializer
# kafka partitioner config
#partitioner.class=com.dameng.dmhs.dmga.service.impl.SimplePartitioner
partitioner.class=com.dameng.dmhs.dmga.service.impl.OnePartitioner
# kafka request acks config
acks=-1
#batch.size=16777216
#linger.ms=1000
max.request.size=5024000
dmhs.min.batch.size=3000
buffer.memory=268435456
retries=3
send.buffer.bytes=1048576
compression.type=none
metadate.max.age.ms=300000
max.in.flighr.requests.per.connection=1
producer.type=async
batch.size=524288
linger.ms=100
注意:根据实际情况替换标红处内容配置文件路径、topic地址及端口、topic名称(注意大小写区别与kafka端保持完全一致)
配置文件说明:
配置项:dmhs.conf.path=/dmsoft/dmhs/bin/dmhs.hs
说明:dmhs配置文件全目录
配置项:bootstrap.servers=10.10.10.150:9092,10.10.10.151:9092
说明:目的端kafka的连接IP及端口
配置项:kafka.topic.name=DM_TOPIC
说明:需要同步到目的端的kafka下的topic名称,此处区分大小写,注意与kafak中topic名称保持一致。
配置项:dmhs.min.batch.size=3000
说明:批量提交大小,可以根据kafka的同步业务量调整,同步压力大可以调高
1.5.2配置目的端dmhs.hs文件
B机器:
[dmdba@bin]#vim /dmsoft/dmhs/bin/dmhs.hs
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>en</lang>
<version>2.0</version>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>11</siteid>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<name>DM_TOPIC</name>
<enable>1</enable>
<char_code>PG_UTF8</char_code>
<level>0</level>
<exec_thr>16</exec_thr>
<exec_sql>1024</exec_sql>
<exec_trx>5000</exec_trx>
<exec_rows>250</exec_rows>
<recv_caches>8</recv_caches>
<trxid_tables>1</trxid_tables>
<exec_policy>2</exec_policy>
<is_kafka>1</is_kafka>
<json_format>file</json_format>
<max_packet_size>16</max_packet_size>
</exec>
</dmhs>
配置文件dmhs.hs说明:
配置标签:<mgr_port>5345</mgr_port>
说明:dmhs进程启动后监听端口
配置标签:<siteid>11</siteid>
说明:dmhs同步节点唯一标识,不能与其他dmhs的siteid相同
配置标签:<data_port>5346</data_port>
说明:dmhs目标端数据接收端口
配置标签:<name>DM_TOPIC</name>
说明:同步名称可以自定义
1.5.3启动脚本start_kafka_dmhs.sh文件配置
B机器:
[dmdba@bin]#vim /dmsoft/dmhs/bin/start_kafka_dmhs.sh
#!/bin/bash
ulimit -c unlimited
export LANG=zh_CN.UTF-8
java -Djava.ext.dirs=“/dmsoft/dmhs/bin/lib:.” com.dameng.dmhs.dmga.service.impl.ExecDMHSKafkaService /dmsoft/dmhs/bin/dmhs_kafka.properties
配置文件start_kafka_dmhs.sh说明:
配置项:java -Djava.ext.dirs
说明:指定dmhs连接kafka依赖包位置,依赖包是kafak安装后的lib目录下的所有文件,复制到目的端的该目录下,dmhs通过这些依赖文件连接kafka
配置项:/dmsoft/dmhs/bin/dmhs_kafka.properties
说明:dmhs同步配置文件位置
1.5.4目的端json_format.xml配置
B机器:[dmdba@bin]#vim /dmsoft/dmhs/bin/json_format.xml
char_replace=(",\"),(\,\\)
batch_commit=1
gs_flag=1
cur_time_format=(yyyy-mm-ddThh:mi:ss)
commit_time_format=(yyyy-mm-ddThh:mi:ss)
lob_piece=false
clob_format=char
set_null=1
opcmd_len=3
SET_QUOTA=1
need_crlf=false
json_format={"meta":{"time":"#COMMIT_TIME","userid":"#USERID","op":"#OP_TYPE","scn":"#LSN","rowid":"#ROWID","trans":"#TRXID","seq":#MSG_SEQ,"size":#MSG_NUM,"table":"#SCHEMA.#TABLE","idx":"#IDX","posttime":"#TIME"},"data":{#NEW_VALUES},"key":{#OLD_VALUES}}
参数说明:
char_replace=(“,”),(,\):该参数用于定义同步数据如果出现特殊字符‘\’需要通过该参数准换后同步输出为’',否则该特殊字符会丢失。
json_format:该参数用于配置同步后数据输出的格式,可以自定义设置输出格式。
1.5.5准备kafka依赖文件
将kafka软件安装目录下的lib目录下的全部文件打包复制到dmhs目的端的安装目录的bin目录下作为dmhs的依赖文件:
目录结构为:/dmsoft/dmhs/bin/lib/{kafka依赖文件}
1.6运行同步程序
1.6.1启动源端DMHS
A机器:[dmdba@bin]#/dmsoft/dmhs/bin/DmhsService start
1.6.2启动目的端DMHS
1.启动目的端dmhs服务
B机器:
[dmdba@bin]#cd /dmsoft/dmhs/bin/
[dmdba@bin]#nohup ./start_kafka_dmhs.sh &
2.启动目的端EXEC模块
B机器:
[dmdba@bin]#cd /dmsoft/dmhs/bin/
[dmdba@bin]#./dmhs_console
DMHS>start EXEC
1.6.3在源端配置数据库字典
在源端配置数据库字典并启动同步
A机器:
[dmdba@bin]#cd /dmsoft/dmhs/bin/
[dmdba@bin]#./dmhs_console
DMHS>clear exec lsn
DMHS> copy 0 “sch.name=‘TEST’ and tab.name=‘MYTEST’” dict
DMHS>start cpt
DMHS>
装载字典命令:
装载模式下全部表:
DMHS> copy 0 “sch.name=‘TEST’” dict
装载模式下某张表:
DMHS> copy 0 “sch.name=‘TEST’ and tab.name = ‘TEST_01’” dict
装载模式下某几张表:
DMHS> copy 0 “sch.name=‘TEST’ and tab.name in(‘TEST_01’,‘TEST_02’,‘TEST_03’)” dict
注意:首次配置dmhs同步链路可以在装载字典前使用命令:clear exec lsn,来清理同步历史信息,重源端数据库当前lsn开始同步。