前段時間在作國產化項目時,寫了一篇關於國產數據庫達夢實時同步軟件的介紹,簡單介紹了一下原理和框架。今天正好項目要搭建個DM8到Kafka的同步,本身琢磨了一下,這裏把搭建步驟分享出來。java
須要在源端和目的端分別安裝dmhs軟件,若是爲HA雙機環境,分別在兩臺服務器上安裝dmhs。linux
1) 將安裝包上傳至服務器,並授予可執行權限sql
chmod 777 數據庫 dmhs_V3.1.3_dm8-kafka_rev82884sp3_rh7_64_veri_20190617.binbootstrap |
2) 運行安裝程序服務器
./dmhs_V3.1.3_dm8-kafka_rev82884sp3_rh7_64_veri_20190617.bin -ioracle |
3) 輸入key文件 框架
[root@localhost dmdba]# ./dmhs_V3.0.2.01_dm7_rock4.2_64\(20151009\).ide bin -iui Extract install files......... Welecom to DMHS Install Program Require Space:100M Whether to input the path of Key File? (Y/y:yes N/n:No)[Y/y]Y Please Input the Path of the Key File [dmhs.key]:/home/dmdba/dmhs.key |
4) 輸入安裝路徑
輸入安裝路徑
Please input the install path [/opt/dmhs]:/home/dmdba/dmhs Available Space :1488M Please Confirm the install path?(Y/y:yes N/n:No)[Y/y]Y |
5) 輸入安裝參數,[]中的爲默認值,直接輸入回車選擇默認值,該步驟參數也能夠隨便填寫,後期經過配置修改。其中源端和目的端的siteid要設置的不一樣(如源端使用1,目的端使用2)。
Please input the language (ch/en)[ch]:ch Please input the mgr_port (1000-65535)[5345]: Please input the chk_interval (1-60) second[3]: Please input the ckpt_interval (10-65536) second[60]: Please input the siteid (0-65536):1 Whether to config statistical analysis? (Y/y:Yes N/n:No)[Y/y] Please input the database type (dm7/dm6/oracle)[dm7]: Please input the status collection Interval (0-60)[5]: Please input the database IP:127.0.0.1 Please input the database port (1000-65535)[5236]: Please input the database user name:SYSDBA Please input the database user password:SYSDBA |
1.2.1修改源端和目的端dmhs.xml配置文件。
源端配置內容以下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</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>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<dict_dir>/home/dmdba/dm/dmhs_kafka/dmhs_dict</dict_dir>
<char_code>PG_GB18030</char_code>
<ddl_mask></ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>1</clear_flag>
</arch>
<send>
<ip>10.147.232.159</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>
<filter>
<enable>
<item>*.*</item>
</enable>
<disable/>
</filter>
<map>
</map>
</send>
</cpt>
</dmhs>
目的端配置文件內容以下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>2</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_name></db_name>
<exec_thr>1</exec_thr>
<case_sensitive>0</case_sensitive>
<exec_policy>2</exec_policy>
<toggle_case>0</toggle_case>
<commit_policy>1</commit_policy>
<enable_merge>0</enable_merge>
<is_kafka>1</is_kafka>
</exec>
</dmhs>
若是源端和目的端在同一臺服務器能夠把配置集合到一塊兒,內容以下:
<?xml version="1.0" encoding="GB2312" standalone="no"?>
<dmhs>
<base>
<lang>ch</lang>
<mgr_port>5345</mgr_port>
<chk_interval>3</chk_interval>
<ckpt_interval>60</ckpt_interval>
<siteid>1</siteid>
<version>2.0</version>
</base>
<exec>
<recv>
<data_port>5346</data_port>
</recv>
<db_name></db_name>
<exec_thr>1</exec_thr>
<case_sensitive>0</case_sensitive>
<exec_policy>2</exec_policy>
<toggle_case>0</toggle_case>
<commit_policy>1</commit_policy>
<enable_merge>0</enable_merge>
<is_kafka>1</is_kafka>
</exec>
<cpt>
<db_type>dm8</db_type>
<db_server>127.0.0.1</db_server>
<db_user>SYSDBA</db_user>
<db_pwd>SYSDBA</db_pwd>
<db_port>5236</db_port>
<dict_dir>/home/dmdba/dm/dmhs_kafka/dmhs_dict</dict_dir>
<char_code>PG_GB18030</char_code>
<ddl_mask></ddl_mask>
<arch>
<clear_interval>600</clear_interval>
<clear_flag>1</clear_flag>
</arch>
<send>
<ip>10.147.232.159</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>
<filter>
<enable>
<item>*.*</item>
</enable>
<disable/>
</filter>
<map>
</map>
</send>
</cpt>
</dmhs>
1.2.2源端數據庫修改配置參數
修改dm.ini中參數RLOG_APPEND_LOGIC=1
開啓歸檔日誌ARCH_INI=1,(通常默認未開啓)增長歸檔配置文件dmarch.ini:
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dbarch/dmarch
ARCH_FILE_SIZE = 512
ARCH_SPACE_LIMIT = 300000
1.2.3在源端數據庫創建數據庫對象
爲了同步DDL操做和維護源端字典信息,使用SYSDBA用戶創建下面的數據庫對象。該腳本以相應版本安裝目錄中./scripts/ddl_sql_dm8.sql爲準。
[dmdba@master kafka_2.11-1.1.0]$ bin/kafka-topics.sh --list --zookeeper localhos
t:2181
[dmdba@master kafka_2.11-1.1.0]$ bin/kafka-topics.sh --create --zookeeper local
host:2181 --replication-factor 1 --partitions 1 --topic DMHS
[dmdba@master kafka_2.11-1.1.0]$ bin/kafka-topics.sh --list --zookeeper localhost:2181
DMHS
[dmdba@master kafka_2.11-1.1.0]$ bin/kafka-console-consumer.sh --bootstrap-ser
ver 10.147.232.159:9092 --topic DMHS --from-beginning
注:以上紅色部分爲建立的topic話題,須要和後期啓動腳本中的話題名稱一致,區分大小寫。
若是源端和目的端在同一服務器只需啓動一個進程便可,在兩臺服務器須要分別啓動。本篇以在同一臺服務器舉例。
建立DMHS服務啓動腳本名爲start_dmhs_kafka.sh,內容以下:
#!/bin/sh
export.GBK
export LD_LIBRARY_PATH=/home/dmdba/dm/dmdbms/bin:/home/dmdba/dm/dmhs_kafka/bin
java -Djava.ext.dirs="/home/dmdba/dm/dmhs_kafka/bin" com.dameng.dmhs.dmga.service.impl.ExecDMHSKafkaService /home/dmdba/dm/dmhs_kafka/bin/dmhs.hs 10.147.232.159:9092 DMHS
說明:
① "/home/dmdba/dm/dmhs_kafka/bin"爲kafka的libs目錄以及DMHS 輔助jar包路徑。
② com.dameng.dmhs.dmga.service.impl.ExecDMHSKafkaService 爲DMHS實現kafka同步服務的類名。
③ /home/dmdba/dm/dmhs_kafka/bin/dmhs.hs爲DMHS配置文件dmhs.xml。
④ 10.147.232.159:9092爲kafka集羣節點。
⑤ DMHS 爲topic話題。topic可選,若是不填寫topic,則每張表會建一個topic,名稱即爲表名。指定topic的話全部的表都填寫在一個topic中,該topic話題必須和KAFKA話題一致。
以上各項路徑參數根據實際環境進行修改。建議使用jdk1.7以上版本。
進入啓動腳本目錄,使用dmdba用戶執行./start_dmhs_kafka.sh後,DMHS執行服務自動啓動並監聽相應數據端口。示例以下:
圖中出現的錯誤:庫文件libexec_ins_ora.so未找到,不須要管
啓動的時候若是有個報錯,庫文件 libdmhs_exec_dll.so 未找到,緣由是有依賴問題,ldd一下把依賴解決就好。
處理過程當中遇到缺乏libodbc.so.1的動態庫須要安裝一下unixodbc。操做以下:
1) 安裝 UNIXODBC-2.3.0 的方法。
將壓縮包上傳到 linux /usr/local 下,而後執行 tar -xzf unixODBC-2.3.0.tar.gz ./configure make && make install 經過 odbc_config --version 肯定odbc安裝是否成功 |
2) 拷貝odbc動態庫。
進入/usr/local/lib/下執行cp libodbc.so.2 到dmhs/bin下libodbc.so.1
而後另起一個終端窗口,進入DMHS目錄執行./dmhs_console程序鏈接DMHS服務,進行字典裝載操做後,啓動捕獲服務:
COPY 0 「SCH.NAME=’DMHS’」 DICT
START CPT
至此,完成DMHS同步服務啓動。
./kafka-console-consumer.sh --bootstrap-server 10.147.232.159:9092 --topic DMHS--from-beginning