GBase RTSync實時同步之設定按組同步
GBase RTSync 是南大通用自主研發的資料庫增量資料實時同步產品,用於支援異構資料來源的資料同步,包含指定庫,指定表,指定列的增量同步及全量資料同步,其 具備實時性、一致性、精準性、易擴充套件性 特性。GBase RTSync 支援多種資料來源之間的資料同步,如下圖所示:
GBase RTSync 同步的基本原理,概念以及簡單使用之前文章已經講解過,我們這裡不再過多講解,只是簡單幫大家回顧下:支援市面上主流的事務型資料庫之間的增量資料同步,能夠將某一種資料來源的增量資料近乎實時的同步到指定的資料庫中,在資料庫部署主備架構及異地災備架構以及不同資料庫間的資料遷移場景中發揮著巨大的作用
GBase RTSync 的主要優勢如下表
準實時性 |
通過流模式實現源資料庫到目標資料庫的秒級同步 |
靈活部署 |
元件間可以獨立部署到不同機器上,充分利用機器資源;同時支援部署部分元件用於將增量資料寫入 kafka ,提供給第三方使用 |
斷點續傳 |
出現網路異常,當機等情況導致服務退出後,重啟服務能夠接著之前同步的點繼續同步資料,保證資料不丟失。 |
雙向同步 |
雙活叢集中兩邊都會有寫入資料的操作, RTSync 能夠很好的支援這種需要雙向同步的場景,且不會導致資料的環形同步 |
高可用 |
支援部署多套搭建高可用服務 |
靈活同步 |
支援自定義的庫級,表級,列級別的同步;支援按組配置同步任務 |
GBase RTSync 【靈活同步 - 按組設定同步任務】是比較高階且實用的同步方式,我們以例項的方式幫大家講解下
1. 應用場景
設想我們有這樣一種簡化場景,資料庫包含主備節點,主節點對外提供寫服務,備節點對外提供讀服務,主備間需要做資料同步。同時主節點的資料變化還要同步到歷史庫中,供其他應用資料分析使用。
我們能想到的一種部署方式是部署兩套RTSync 分別負責主備間同步,主到歷史庫間同步。這種方式優點是部署簡單,但缺點也顯而易見,主要有: 1 )因為增量資料需要解析邏輯日誌,多個服務同時讀取會造成資料庫 io 壓力,影響資料庫效能
2) 需要單獨維護兩套RTSync 服務,如果兩套服務因網路等原因導致同步延遲不一致會造成運維繁瑣
針對這種場景我們有更好的部署方式來解決這些問題,即按組分源配置它是RTSync 同步中的一個高階特性,資料流轉如下:
所謂按組分源,就是允許我們在任務中配置多個同步任務(配置中體現為多個source-target 對),其中每個 source 間配置為同一個資料庫例項的不同或者相同表, target 端為目標端資料庫的配置。我們將這多個同步任務標記為同一個 group 下,這樣 RTSync 服務啟動後會將組內同步任務的後設資料合併處理,然後交由 miner 元件挖掘資料,參考上圖黃橘黃色背景 Miner 元件。同時 RTSync 內部會有分發元件負責將挖掘的資料按配置的同步任務分發到不同的任務節點中,確保一份資料會被多個任務節點處理,最終同步到目標端,參考上圖橘黃色背景資料分發元件。
2. 部署環境
提供三臺伺服器:192.168.88.135,192.168.88.136,192.168.88.137
各服務元件分別部署如下:
Z ookeeper |
192.168.88.135192.168.88.136192.168.88.137 |
/opt/zookeeper-3.4.9 |
K afka |
192.168.88.135192.168.88.136192.168.88.137 |
/opt/kafka_2.11-0.10.2.1 |
GBase8s 主節點資料庫 |
192.168.88.135 |
/opt/gbase8s |
GBase8s 備節點資料庫 |
192.168.88.136 |
/opt/gbase8s |
GBase8s 歷史資料庫 |
192.168.88.137 |
/opt/gbase8s |
RTSync |
192.168.88.135 |
/opt/RTSync |
3. 服務配置
1) 修改/opt/RTSync/config_kafka_8tto8t.properties
內容如下:
kafka.producer.paramers=request.timeout.ms\=600000;metadata.fetch.timeout.ms\=60000;linger.ms\=10; kafka.send.issuccess=true kafka.consumer.paramers=session.timeout.ms\=10000;request.timeout.ms\=60000;enable.auto.commit\=false; zookeeper.session.timeout.ms=8000 kafka.resend.max.retries=3 topic.replication.num=1 send.data.max.size=30485760 kafka.batch.commit.time=300 fetch.message.max.bytes=104857600 group.id=test08061 zookeeper.sync.time.ms=4000 bootstrap.servers=192.168.88.135:9092,192.168.88.136:9092,192.168.88.137:9092 auto.commit.offset.enable=false kafka.acks=all kafka.batch.commit.count=1000 topic.enable.auto.create=true topic.name=bht1120,sstest71,sstest81 auto.commit.interval.ms=5000 zookeeper.connect=192.168.88.135:2181,192.168.88.136:2181 |
2) 修改/opt/RTSync/config_task.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <servers> <server dataFormatType="PUREDATA" dataRecoveryMode="file" id="zbbserver210" isHighAvailable="false" mqType="kafka" queueName="8tto8tMQ" syncMode="increment"> <manager heartbeatPort="9000" heartbeatTimeOut="500" httpPort="8087" ip="192.168.88.135" isTableHotPatch="true" isValidateMetadata="false" port="9432" useErrorDataRecovery="false" /> <source dataFormatParallel="10" dbObjToUpperCase="true" ip="192.168.88.135" isConvertSingleQuote="true" monitorInterval="100" openMonitor="true" password="******" path="/opt/RTSync/" queuePollTimeOut="20" queueSize="100" readParseAdapter="adapter" rpcPort="9191" user="root" /> <target errorishandle="false" ip="192.168.88.135" monitorInterval="100" password="******" path="/opt/RTSync" rpcPort="9192" sendDataBySocket="false" useHighVersionConsumer="true" user="root" writeDataAdapter="adapter" /> <mappings> <source-target groupName="8sgroup" id="idno0"> <db> <sourcedb allowPrimaryKeyNull="true" catalog="dbmaster" charset="UTF8" columnTypeFormat="time=hh:mm:ss.SSSSSSS;date=yyyy-MM-dd;datetime=yyyy-MM-dd HH:mm:ss;smalldatetime=yyyy-MM-dd HH:mm:ss.SSSSSS;datetime2=yyyy-MM-dd HH:mm:ss.SSSSSS" delayTimeThreshold="0" driver="com.gbasedbt.jdbc.Driver" dyntal="true" fetchSize="100" isGetDBspace="true" isMineWholeTransaction="fasle" isOverDelayTimeThresholdExit="false" isParallelForMysql="true" isUseMinerCache="true" longTxCheckIntervalTime="10" longTxMaxWaitTime="60" maxRecordsPerRead="200" maxSizeOfPerRecord="1024" mysqlSlaveId="00" operationType="dml" packetMaxRecord="2" parallel="4" password="******" startLSN="0" timeOut="2" timestampWithFraction="true" transMaxCount="10000" type="MYSQL" url="jdbc:gbasedbt-sqli://192.168.88.135:16351/syscdcv1:gbasedbtserver=ol_gbasedbt1210;IFX_SOC_TIMEOUT=180000;IFX_LOCK_MODE_WAIT=100;" useAddFile="false" user="gbasedbt" /> <targetdb catalog="dbslave" charset="UTF8" commitSize="50" driver="com.gbasedbt.jdbc.Driver" isInitMetadata="true" parallel="8" password="******" queueSize="2000" timeOut="10" type="GBASE8S" url="jdbc:gbasedbt-sqli://192.168.88.136:16351/sysmaster:gbasedbtserver=ol_gbasedbt1210;IFX_SOC_TIMEOUT=180000;IFX_LOCK_MODE_WAIT=100;" user="gbasedbt" /> </db> </source-target> <source-target groupName="8sgroup" id="idno1"> <db> <sourcedb allowPrimaryKeyNull="true" catalog="dbmaster" charset="UTF8" columnTypeFormat="time=hh:mm:ss.SSSSSSS;date=yyyy-MM-dd;datetime=yyyy-MM-dd HH:mm:ss;smalldatetime=yyyy-MM-dd HH:mm:ss.SSSSSS;datetime2=yyyy-MM-dd HH:mm:ss.SSSSSS" delayTimeThreshold="0" driver="com.gbasedbt.jdbc.Driver" dyntal="true" fetchSize="100" isGetDBspace="true" isMineWholeTransaction="fasle" isOverDelayTimeThresholdExit="false" isParallelForMysql="true" isUseMinerCache="true" longTxCheckIntervalTime="10" longTxMaxWaitTime="60" maxRecordsPerRead="200" maxSizeOfPerRecord="1024" mysqlSlaveId="00" operationType="dml" packetMaxRecord="2" parallel="4" password="******" startLSN="0" timeOut="2" timestampWithFraction="true" transMaxCount="10000" type="MYSQL" url="jdbc:gbasedbt-sqli://192.168.88.135:16351/syscdcv1:gbasedbtserver=ol_gbasedbt1210;IFX_SOC_TIMEOUT=180000;IFX_LOCK_MODE_WAIT=100;" useAddFile="false" user="gbasedbt" /> <targetdb catalog="dbhistory" charset="UTF8" commitSize="50" driver="com.gbasedbt.jdbc.Driver" isInitMetadata="true" parallel="8" password="******" queueSize="2000" timeOut="10" type="GBASE8S" url="jdbc:gbasedbt-sqli://192.168.88.137:16351/sysmaster:gbasedbtserver=ol_gbasedbt1210;IFX_SOC_TIMEOUT=180000;IFX_LOCK_MODE_WAIT=100;" user="gbasedbt" /> </db> </source-target> </mappings> </server> </servers>
|
4. 服務啟動
執行sh /opt/RTSync/RTSyncManagerServer.sh start命令
5. 總結
從配置檔案看到按組分源與普通的增量同步設定的唯一區別就是通過在source-target 節點增加屬性 groupName, 將同屬於同一例項資料庫的需要分發到不同目標資料庫的同步任務設定成相同的 groupName 即可。使用者使用該功能非常方便,但這確是 GBase RTSync 在整體架構設計上的考量,在設計之初在架構上便支援了這種處理,該功能重點在於後設資料合併處理後進行資料探勘及後續資料的複製分發。
按組分源進行同步的特性很好解決了增量資料在源端重複挖掘的問題,特別是需要將同一例項的相同庫或者不同庫間的資料發到不同目標端的時候,極大降低了資料庫io 的壓力,同時將之前需要獨立運維的同步任務通過組的設定合併到一個組內處理,所有任務公用一套斷點續傳管理介面,提高了運維的可操作性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993860/viewspace-2844317/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JMeter定時器設定延遲與同步JMeter定時器
- 如何在 Ubuntu 上設定時間同步Ubuntu
- Ubuntu的NTP同步時鐘設定方法Ubuntu
- SpringBoot之非同步、定時、郵件任務Spring Boot非同步
- Windows ntp時間同步設定(bat指令碼)WindowsBAT指令碼
- 雲伺服器Linux系統設定時間同步設定伺服器Linux
- 定時同步和Costas環
- win10系統internet時間同步怎麼設定_win10系統internet時間同步如何設定Win10
- rsync實時同步
- flink sql 實時同步及離線同步SQL
- Ubuntu 時間不準,怎麼設定NTP時間同步?Ubuntu
- 實時同步服務
- win10怎麼用同步設定_windows10系統如何同步設定Win10Windows
- zotero的同步設定問題
- Oracle實時同步技術Oracle
- rsync+inotify實時同步
- 【Python】Python 使用http時間同步設定系統時間原始碼PythonHTTP原始碼
- Centos系統伺服器設定時間自動同步!CentOS伺服器
- CompletableFuture 組合式非同步程式設計非同步程式設計
- mysql半同步複製的設定MySql
- 什麼是資料實時同步,為什麼資料實時同步很重要
- JavaScript 定時器函式非同步原理JavaScript定時器函式非同步
- Mysql資料實時同步實踐MySql
- python之非同步程式設計Python非同步程式設計
- 小白都會的rsync遠端同步原理及-------(定期同步與rsync+inotify實時同步)實驗
- 時態同步
- 記一次.net core 非同步執行緒設定超時時間非同步執行緒
- 透過Github同步你的VScode設定GithubVSCode
- 非同步網路模組之aiohttp的使用非同步AIHTTP
- Spring boot 非同步/定時任務/郵件Spring Boot非同步
- JS非同步程式設計之PromiseJS非同步程式設計Promise
- JS非同步程式設計之callbackJS非同步程式設計
- JS非同步程式設計之GeneratorJS非同步程式設計
- 前端筆記之JavaScript(九)定時器&JSON&同步非同步/回撥函式&函式節流&call/apply前端筆記JavaScript定時器JSON非同步函式APP
- python——asyncio模組實現協程、非同步程式設計(三)Python非同步程式設計
- 打破延遲,實時同步不再難!
- flink-cdc實時同步(oracle to mysql)OracleMySql
- logstash mysql 準實時同步到 elasticsearchMySqlElasticsearch