分發/訂閱模式實現SqlServer主從同步
在文章開始之前,我們先了解一下幾個關鍵的概念:
分發服務器
分發服務器是負責存儲在同步過程中所用復制信息的服務器。可以比喻成報刊發行商。
分發數據庫
分發數據庫用於存儲發布數據庫所做的更改。它還可以存儲快照和合並發布的歷史信息。存在於系統數據庫中,默認為destribution.
發布服務器
使服務器能夠成為發布服務器后使用此分發服務器。它通過復制向其他位置提供數據。可以比喻成報刊出版商,實際生產報刊的地方。
發布數據庫
包含要發布的數據或對象的數據庫,即主庫。
訂閱服務器
從庫(slave節點)所在的數據服務器。可以比喻成閱讀報刊的人
環境准備
1.SqlServer2008R2數據庫
2.啟動數據庫服務器SQL Server 代理 (MSSQLSERVER)服務
配置分發
分發服務器可以和發布服務器是同一台服務器,也可以單獨指定分發服務器。本文以同一台服務器為例。
1) 選擇當前服務器作為分發服務器
2)啟動SqlServer代理
3)配置快照文件夾
快照是可以存儲主庫數據架構和初始數據,也可以存儲主庫某一段時間內數據庫發生的變化。
4)配置分發數據庫
分發數據庫以數據庫文件的形式存儲主庫發布的數據變化。
新建發布
1)選擇發布數據庫
2)選擇發布類型
SqlServer數據庫提供了以下四種發布類型:
快照發布
發布服務器按預定的時間間隔向訂閱服務器發送已發布數據的快照。
可以理解為發布數據庫將一段時間間隔內的數據變化打包到數據文件中,一次性提交給訂閱服務器。適用於數據量小,允許數據延遲的主從數據庫同步。
事務發布
在訂閱服務器收到已發布數據的初始快照后,發布服務器將事務流式傳輸到訂閱服務器。
創建了初始快照后,接着在發布服務器上所做的數據更改和數據結構更改通常在修改后同步傳遞給訂閱服務器,數據更改將按照其在發布服務器上的事務順序應用於訂閱服務器,保證了發布內的事務一致性。
事務發布能夠將發布數據變化的信息及時傳遞給訂閱服務,並在短時間內完成。數據近似於同步更新,適用於對數據實時性要求較高的場景。
具有可更新訂閱的事務發布
在 SQL Server 訂閱服務器收到已發布數據的初始快照后,發布服務器將事務流式傳輸到訂閱服務器。來自訂閱服務器的事務被應用於發布服務器。
在事務發布的基礎上,支持訂閱服務器向發布服務器提交更新。
合並發布
在訂閱服務器收到已發布數據的初始快照后,發布服務器和訂閱服務器可以獨立更新已發布數據。更改會定期合並。Microsoft SQL Server Compact Edition 只能訂閱合並發布。
3)選擇要發布的數據庫對象,可以是表,也可是某個字段
4)自定義數據過濾條件
5)快照代理
快照代理運行於分發服務器上,用於連接發布服務器,每個發布服務器都有專屬於自己的一個快照代理。其主要作用是:將發布數據庫的數據架構和初始數據同步到分發數據庫中;存儲快照文件並記錄歷史同步信息。
對於事務性發布,還存在日志讀取器代理:該代理與事務性復制一起使用,運行於分發服務器上並與發布服務器連接。其主要作用是:將發布服務器上數據庫事務日志中標記為復制的事務移至分發數據庫中。
6)配置代理賬戶,用於連接發布服務器
新建訂閱
1)選擇訂閱的發布
2)配置訂閱模式
推送訂閱
分發服務器接收到分發服務器變化的數據之后,主動像訂閱服務器推送。(推薦)
請求訂閱
訂閱服務器主動向分發服務器訂閱變化的數據。如果選擇請求訂閱,那么訂閱服務器需要能夠訪問分發服務器存儲的快照文件夾位置。
分發代理
分發代理與快照復制和事務性復制一起使用。其主要作用是:將發布數據庫初始快照發送到訂閱服務器,並將分發數據庫中保存的數據庫事務移至訂閱服務器。分發代理既可以運行於分發服務器(推送訂閱模式),也可運行於訂閱服務器(請求訂閱模式)
3)配置訂閱服務器和從庫
4)配置訂閱服務器代理賬戶
5)配置同步計划模式
6)初始化發布數據庫數據和架構
以上步驟就完成了分發服務器、發布服務器和訂閱服務器的配置。
同步過程(事務性復制):
1.發布服務器選擇關聯對應的分發服務器,快照代理將發布數據庫數據架構和初始化數據存儲到分發服務器上
2.當發布數據庫數據變動時,日志讀取器代理會將變更的事務日志記錄到分發服務器指定的分發數據庫文件中(日志文件和數據文件、.MDF—存儲數據,.LDF—存儲數據更新)
3.分發代理將分發數據庫中的初始信息和變更信息更新到訂閱服務器。