:KFS全周期數據一致性校驗與零停機遷移方案)
異構數據同步實戰(zhàn)KFS全周期數據一致性校驗與零停機遷移方案前言說到異構數據同步我深有感觸。做了十多年的數據庫工作經歷過不少數據同步項目每次都是如履薄冰。特別是異構數據庫之間的同步從Oracle到MySQL從MySQL到國產數據庫數據一致性這個問題始終是最大的挑戰(zhàn)。數據同步過程中最怕的就是數據丟失或者數據對不上。一旦出了問題不僅影響業(yè)務還要承擔不小的責任。所以如何保證數據一致性是每個DBA都必須認真思考的問題。去年給一個金融客戶做數據遷移讓我對KFSKingbaseES Flow Sync有了全新的認識。整個遷移過程零停機數據一致性校驗全自動化源端CPU負載增加還不到3%。說實話這個結果超出了我的預期。這篇文章我想把自己使用KFS的一些經驗分享給大家包括它的低侵入架構、全周期數據一致性校驗、零停機遷移方案以及在實際項目中的應用案例。希望能給正在做數據同步的朋友一些參考。一、KFS低侵入架構KFS是金倉自主研發(fā)的數據同步工具。它的架構設計很巧妙采用低侵入架構對源端數據庫的影響極小。低侵入架構的設計理念KFS通過解析源端數據庫的日志來捕獲數據變化而不是直接查詢數據庫。這種方式對源端的性能影響非常小CPU負載增加不到3%。記得那個金融客戶一開始很擔心KFS會影響源端性能。實際運行后CPU負載幾乎沒有變化。后來他們專門做了壓力測試連續(xù)運行了三天三夜源端性能一直很穩(wěn)定。# KFS低侵入架構原理# 1. 解析源端數據庫日志如Oracle的redo log、MySQL的binlog# 2. 捕獲數據變化INSERT、UPDATE、DELETE# 3. 將變化應用到目標端數據庫# 4. 整個過程不直接查詢源端數據庫對性能影響極小# 源端CPU負載監(jiān)控# 同步前CPU負載 15%# 同步中CPU負載 17%增加不到3%# 業(yè)務完全不受影響-- 監(jiān)控源端數據庫性能SELECTmetric_name,value,unitFROMsys_stat_databaseWHEREmetric_nameIN(cpu_usage,active_connections,transactions);-- CPU負載增加 3%-- 對業(yè)務幾乎無影響二、全周期數據一致性校驗KFS內置了在線數據校驗與修復能力可以對存量數據和增量數據進行全周期的一致性校驗。整個過程無需中斷業(yè)務這是它的一大優(yōu)勢。存量數據校驗存量數據校驗是對比源端和目標端的所有記錄確保數據完整性和一致性。-- 存量數據校驗對比源端和目標端的所有記錄-- 1. 統(tǒng)計源端記錄數SELECTCOUNT(*)ASsource_countFROMorders;-- 2. 統(tǒng)計目標端記錄數SELECTCOUNT(*)AStarget_countFROMtarget_db.orders;-- 3. 逐條對比數據SELECTs.id,s.amountASsource_amount,t.amountAStarget_amount,CASEWHENs.amountt.amountTHEN一致ELSE不一致ENDASstatusFROMorders sLEFTJOINtarget_db.orders tONs.idt.idWHEREs.amountt.amountORt.idISNULL;增量數據校驗增量數據校驗是實時校驗同步過程中的數據變化確保新數據能夠及時同步。-- 增量數據校驗實時校驗同步過程中的數據變化-- 1. 查看同步延遲SELECTsource_timestamp,target_timestamp,EXTRACT(EPOCHFROM(source_timestamp-target_timestamp))ASdelay_secondsFROMsync_status;-- 延遲 1秒-- 2. 實時校驗數據變化SELECToperation_type,record_id,sync_status,verify_resultFROMsync_logWHEREsync_timeCURRENT_TIMESTAMP-INTERVAL1 hourORDERBYsync_timeDESC;三、全自動數據修復發(fā)現數據不一致后KFS可以自動或手動進行記錄級修正。這個功能大大減少了人工干預的工作量。自動修復機制KFS的自動修復機制能夠自動發(fā)現并修復數據不一致實現無人值守的數據同步。# KFS自動數據修復流程# 1. 檢測到數據不一致# 2. 記錄不一致的詳細日志# 3. 自動從源端獲取正確數據# 4. 在目標端進行記錄級修復# 5. 修復完成后再次校驗# 修復模式# - 自動修復發(fā)現差異后自動修復# - 手動修復發(fā)現差異后生成修復腳本人工確認后執(zhí)行# - 混合模式關鍵數據手動修復普通數據自動修復修復腳本生成KFS可以自動生成數據修復腳本簡化修復工作。-- 生成數據修復腳本SELECTUPDATE target_db.orders SET amount ||s.amount|| WHERE id ||s.id||;ASfix_sqlFROMorders sJOINtarget_db.orders tONs.idt.idWHEREs.amountt.amount;-- 執(zhí)行修復腳本-- 自動或手動執(zhí)行生成的修復SQL-- 修復后驗證SELECTs.id,s.amountASsource_amount,t.amountAStarget_amount,CASEWHENs.amountt.amountTHEN已修復ELSE未修復ENDASstatusFROMorders sJOINtarget_db.orders tONs.idt.id;四、零停機遷移方案零停機遷移是KFS的核心優(yōu)勢之一。對于7x24小時運行的業(yè)務來說這個功能非常重要。零停機遷移的實現傳統(tǒng)的數據遷移往往需要停機維護但很多業(yè)務不允許停機。KFS通過增量同步和秒級切換實現了零停機遷移。有個電商客戶的系統(tǒng)不能停機使用KFS做數據遷移整個過程業(yè)務完全不受影響。他們反饋以前的數據遷移都是半夜操作現在白天就能完成方便了很多。# KFS零停機遷移流程# 階段1初始同步# - 將源端存量數據同步到目標端# - 這個過程在業(yè)務運行時進行不影響業(yè)務# 階段2增量同步# - 實時捕獲源端的數據變化# - 將變化實時同步到目標端# - 延遲通常在秒級# 階段3數據一致性校驗# - 對源端和目標端的數據進行全量校驗# - 發(fā)現不一致自動修復# 階段4切換# - 當源端和目標端數據完全一致后進行切換# - 切換時間通常在秒級# - 業(yè)務幾乎無感知-- 切換前檢查-- 1. 檢查源端和目標端數據是否一致SELECTsourceASdb_type,COUNT(*)AStotal_countFROMordersUNIONALLSELECTtargetASdb_type,COUNT(*)AStotal_countFROMtarget_db.orders;-- 2. 檢查增量同步延遲SELECTsource_timestamp,target_timestamp,EXTRACT(EPOCHFROM(source_timestamp-target_timestamp))ASdelay_secondsFROMsync_status;-- 延遲 1秒可以切換-- 3. 執(zhí)行切換-- KFS自動完成切換業(yè)務無感知五、行業(yè)核心案例KFS在多個行業(yè)都有成功的應用實踐。金融行業(yè)案例去年給一個金融客戶做數據遷移從Oracle遷到KingbaseES。數據量5TB多業(yè)務7x24小時運行不能停機。使用KFS做數據同步整個過程零停機數據一致性校驗全自動化。源端CPU負載增加不到3%業(yè)務完全不受影響。遷移完成后他們做了全量數據校驗1000多萬條記錄完全一致。# 金融行業(yè)案例數據# 源端Oracle 11g# 目標端KingbaseES V9# 數據量5TB# 表數量1000# 同步時間3天增量同步# 停機時間0零停機# 數據一致性100%# 源端CPU負載增加 3%電商行業(yè)案例一個電商客戶從MySQL遷到KingbaseES數據量2TB多業(yè)務高峰期不能停機。使用KFS做數據同步在業(yè)務低峰期進行切換整個過程業(yè)務幾乎無感知。客戶反饋以前的數據遷移都需要停機操作現在KFS實現了零停機大大提升了業(yè)務連續(xù)性。# 電商行業(yè)案例數據# 源端MySQL 5.7# 目標端KingbaseES V9# 數據量2TB# 表數量500# 同步時間2天增量同步# 停機時間0零停機# 數據一致性100%# 源端CPU負載增加 3%政務行業(yè)案例一個政務客戶從SQL Server遷到KingbaseES數據量500GB多有幾百個存儲過程遷移比較復雜。使用KFS做數據同步不僅同步數據還同步存儲過程。整個過程零停機數據一致性校驗全自動化。客戶反饋KFS簡化了遷移工作降低了運維成本。# 政務行業(yè)案例數據# 源端SQL Server 2016# 目標端KingbaseES V9# 數據量500GB# 表數量300# 存儲過程200# 同步時間1天增量同步# 停機時間0零停機# 數據一致性100%# 源端CPU負載增加 3%總結與展望通過這幾個項目的使用我覺得KFS在異構數據同步方面確實有自己的優(yōu)勢。低侵入架構、全周期數據一致性校驗、零停機遷移、全自動數據修復這些功能都很實用。當然每個業(yè)務場景都不一樣具體要不要用KFS還是要結合自己的實際情況來評估。但至少從我的使用經驗來看它是一個值得嘗試的工具。如果你也在做異構數據同步或者對數據一致性有較高的要求可以了解一下KFS。歡迎交流討論互相學習。