數據庫實時同步和復制
談到這個概念的時候,最容易想到的就是數據庫本身的異地災備,通過數據庫的實時同步和復制,在A地出現機房故障和問題的時候可以平滑快速的遷移到B地。雖然這種遠程數據復制和同步存在一定的延遲,但是基本已經可以滿足業務連續性的需求。
談到數據庫的實時復制,一般會談到一個重要產品,即Oracle公司的GoldenGate,該軟件是一種基于日志的結構化數據復制軟件,它通過解析源數據庫在線日志或歸檔日志獲得數據的增刪改變化,再將這些變化應用到目標數據庫,實現源數據庫與目標數據庫同步、雙活。GoldenGate可以在異構的IT基礎結構(包括幾乎所有常用操作系統平臺和數據庫平臺)之間實現大量數據亞秒一級的實時復制。
GoldenGate是一種基于軟件的數據復制方式,它從數據庫的日志解析數據的變化(數據量只有日志的四分之一左右)。該將數據變化轉化為自己的格式,直接通過TCP/IP網絡傳輸,無需依賴于數據庫自身的傳遞方式,而且可以通過高達9:1的壓縮率對數據進行壓縮,可以大大降低帶寬需求。在目標端,GoldenGate TDM可以通過交易重組,分批加載等技術手段大大加快數據投遞的速度和效率,降低目標系統的資源占用,可以在亞秒級實現大量數據的復制。
在任何實時數據同步和復制中,需要考慮如下幾個關鍵問題:
事務一致性:在復制目標端需要按照源端相同的事務環境進行提交,確保目標上數據一致性。
檢查點機制:在抽取和負責時都需要記錄檢查點位置,確保網絡故障或GG本身故障下仍然能夠完整復制。
可靠數據傳輸:需要保證數據傳輸的完整性,請求和應答,同時提供數據加密和傳輸過程中的壓縮。
對于數據實時同步和復制工具,其核心是需要基于日志來實現,這一方面是可以實現準實時的數據同步,一方面是基于日志實現不會要求數據庫本身在設計和實現中帶來任何額外的約束。我們也看到有些基于數據庫表設計增加觸發器或存儲過程來實現的數據庫復制,這些本身都是損耗了性能和增加了復雜度。
對于數據庫的實時同步和復制,阿里巴巴專門有一個開源項目,即otter來實現分布式數據庫的同步復制,其核心思想仍然是通過獲取數據庫的增量數據日志,來進行準實時的同步復制。因此otter本身又依賴于另外一個開源項目即canal,該項目重點則是獲取增量數據庫同步日志信息。
當前otter的重點是實現mysql間的數據庫同步復制,其實這個在前面我一些文檔里面談到基于mysql數據庫的dual-master架構的時候已經談到過,基本即利用的類似技術來實現兩個mysql數據庫間的雙向同步數據庫復制。要注意這個雙向本身指既可以A->B,也可以從 B->A,在某個時間節點本身是單向的。
對于otter的功能和支持的數據庫比GoldenGate要少得多,除了支持mysql數據庫間的實時數據同步和復制外,還支持 mysql->oracle的單向數據同步和復制。但是不支持oracle->mysql的數據同步和復制。但是otter本身提供了一個很好的開源框架,我們可以基于該框架擴展對其它數據庫的支持。
在擴展的時候有一個重點,即數據庫本身是否提供了增量數據日志,對于mysql數據庫容易實現其主要原因還是mysql數據庫提供了相當方便的 binlog日志功能,這些log日志本身就很方面的轉換為朝目標端執行的sql語句。而對于常見的數據庫,在網上搜索下,可以看到一些做法。
對于oracle,重點是監控oracle的redo log,即在線重做日志和歸檔日志。對于一些商用產品可以直接監控到redo log,僅僅依賴于該文件而不耗費其它資源。而如果我們來實現,則常用的方法還是基于oracle logminer來對redo log進行解析。雖然性能上稍微有差異,但是基本可以達到準實時的數據庫解析和同步,可參考:
http://www.cnblogs.com/qiangqiang/archive/2010/10/21/1857429.html
http://blog.itpub.net/90618/viewspace-660550/
對于Sql Server數據庫的日志分析,首先可以看到網上有一個專門的商業工具,即log explorer,這個工具可以用來做sql server數據庫的日志解析和分析。其中對于事務,檢查點等都有詳細的記錄。其次可以使用fn_dblog解析Sql Server的數據庫日志,網上有專門的方法在這里不展開,現在還沒有具體測試過,但是整個方法思路是沒有問題的。
而對于sql server 之間的數據庫同步和復制,則sql server本身就提供有方便的基于快照或基于事務的數據庫同步復制工具,只需要經過簡單的配置即可以實現。正因為這個原因,我們也看到,對于sql server數據庫本身在日志解析和分析方面開放出來的能力本身是相當較弱的。
隨著國家對自主研發數據庫和中間件技術的大力支持,當前還沒一個能夠實現國產數據庫如人大金倉,達夢數據庫同國外的oracle ,sql server數據庫間的數據實時同步和復制工具。對于這類工具是可以基于開源otter產品的思路來進行定制開發和實現的,但是前提還是各個數據庫廠家需要開放相應的日志采集和處理能力。