■ 河南 許紅軍
對于復制來說,其實際上提供了快照復制,事務復制,合并復制和異類復制等類型。
對于快照復制來說,類似于完整備份,可以將整個數據庫中的所有數據一次性的發送到被復制的訂閱服務器中。因為其發送的數據量很大,在實際中應用的較少。
對于事務復制來說,僅僅是復制事務層面的內容,每次復制的數據量比較少,因此其速度較快,是目前企業級應用的主流類型。
根據事務復制,其還衍生出了對等復制類型,其可以實現雙向復制功能。對于合并復制來說,適用于客戶端和服務器端的復制場景,也稱為Web同步,即在Internet客戶端和服務器之間復制數據。
對于異類復制來說,主要是和其他數據庫產品(例如Oracle等)之間的事務復制。綜合來說,事務復制和異類復制是目前比較常用的復制技術。在本例中主要講解對等復制技術。
事務復制擁有很高的性能,可以實現秒級的延時。該技術可以有效節約成本,不需要特殊的硬件支持,實現起來比較簡單并且易于管理,可以在數據庫級別和表級別來實現。
事務復制包括標準事務復制和對等事務復制兩種方式,對于前者來說,是指從訂閱服務器發布到發布服務器的單向過程。其具有易于設計,配置和管理的特性,訂閱服務器(備用)可以用于報表。
對于后者來說,可以在多個站點之間進行的數據同步,其基于多主模型運作,使用數據分區來支持分布式的應用程序,可以實現高可用和讀/寫負載平衡,但是不能處理沖突,為此可以通過設計來避免/防止沖突。對等復制實際上是由兩個事務復制的組合,其擁有多個數據庫副本,每個服務器都由讀/寫副本。
對于復制技術來說,其用途是多方面的,例如創建和維護數據的多個副本,使數據更接近用戶來降低網絡延遲,站點自主(由當地站點的管理員自主管理)和減少鎖定沖突等。
復制的組件包括項目復制的數據,發布復制單位和訂閱項目的接收方等,分別實現發布,分發和訂閱服務。和這些組件對應的服務器角色包括發布服務器,分發服務器和訂閱服務等。
注意,復制本質上是單向的。在復制過程中,需要使用到大量的中間的服務賬戶,這被稱為復制代理角色。
通過代理角色,可以讀取數據庫、日志、快照和隊列等對象的內容。之所以要使用代理角色,主要為了解決權限問題,合理控制代理服務賬戶的權限,可以提高安全性。對于服務器和服務器之間的復制來說,適用于集成來自于多個站點的數據,集成異類數據,轉移批處理負荷,數據倉庫和報表,提高可伸縮性和可用性等場景。對于復制來說,其實際上處于異步工作模式,會存在因為網絡故障的原因,導致丟失數據的可能性,此外,其還存在主鍵沖突和負載均衡的問題。
例如在本例中,存在SQLSRV01、SQLSRV02和SQLSRV03三臺SQL Server服務器,在域控上打開Active Directory用戶和計算機窗口,在左側選擇名為“Computers”的OU,在右側顯示這些服務器信息。在其中創建名為“SQLServers”的組,在屬性窗口中打開“成員”面板,點擊“添加”按鈕,將上述單三臺服務器,以及SQL Server服務賬戶和管理員賬戶添加進來。對于SQL Server服務賬戶(例如“xxxsvcuser”)來說,是一個域賬戶。用來運行數據庫引擎。
對于管理員賬戶(例如“xxxdbadmin”)來說,是用來管理SQL Server2016服務器,是一個域賬戶,需要添加到本地的管理員組中。對于這些賬戶來說,需要堅持最小權限原則。對于服務賬戶來說,可以打開SQL Server 2016配置管理器,在其中選擇“SQL Server(MSSQLSERVER)”服務,在“登錄身份為”列中顯示服務賬戶名稱。為了安全起見,最好使用指定的域賬戶。在SQLSRV01上存在名為“RepDB1”的數據庫,在Microsoft SQL Server Management Studis窗口中選擇該數據庫,在其屬性窗口(如圖1)左側選擇“選項”項,在右側的“恢復模式”列表中選擇“完整”項,這樣便于讀取其中的事務信息,點擊確定按鈕保存配置信息。

圖1 數據庫屬性窗口
在該數據庫的右鍵菜單上選擇“任務”→“備份”項,在打開窗口中點擊“添加”按鈕,添加一個共享網絡路徑。便于其他服務器對其進行訪問。點擊“確定”按鈕,執行完整備份。再次執行上述備份操作,在打開窗口中的“備份類型”列表中選擇“事務日志”項,點擊確定按鈕備份事務日志。在SQLSRV02和SQLSRV03服務器上分別打開Microsoft SQL Server Management Studis窗口,在“數據庫”項的右鍵菜單上點擊“還原數據庫”項,在打開窗口中選擇“設備”項,點擊瀏覽按鈕,選擇上述共享路徑,添加備份文件。
在左側選擇“選項”項,在右側的“恢復狀態”列表中選擇“RESTORE WITH RECOVERY”項,點擊“確定”按鈕,執行恢復操作。為了便于發布數據,需要有文件共享的支持,為此可以在每臺每臺服務器上創建一個共享目錄,讓其可以互相進行訪問。例如創建名為“repl”的共享目錄,允許Everyone用戶進行完全控制。在其屬性窗口中的“安全”面板中點擊“高級”按鈕,在打開窗口中點擊“禁用繼承”按鈕,禁止繼承權限。
在“權限條目”列表中選擇和“Users”相關的組,點擊“刪除”按鈕將其刪除。點擊“添加”按鈕,在權限項目窗口中點擊“選擇主體”鏈接,在打開窗口中輸入上述“SQLServers”的組,在“基本權限”面板中選擇“完全控制”項,讓這三臺服務器,以及服務賬戶和數據庫管理員有權限訪問該共享目錄,禁止其他的用戶進行訪問。點擊“確定”按鈕,保存權限配置信息。

圖2 配置分發服務器界面
對于上述三臺服務器來說,需要分別負責各自的分發操作。例如在SQLSRV01上選擇“數據庫”→“復制”項,在其右鍵菜單上點擊“配置分發”項,在向導界面中的“分發服務器”窗口(如圖2)中選擇第一項,將自身變成分發服務器。點擊“下一步”按鈕,輸入該機上的預設的共享路徑(例如“\sqlsrv01 epl”等)。依次點擊下一步按鈕,保持默認配置,最后點擊完成按鈕,完成配置操作。按照同樣的方法,將其他的主機配置為分發服務器。注意,各服務器使用自身的共享目錄。之后在SQLSRV01上打開Microsoft SQL Server Management Studis窗口,可以看到在系統數據庫中會出現名為“distribution”的數據庫,這說明復制的中間件已經正常運行了。
選擇“復制”→“本地發布”項,在其右鍵菜單上點擊“新建發布”項,在向導界面中的發布數據庫窗口中選擇目標數據庫(例如“RepDB1”),點擊“下一步”,在“發布類型”列表中提供了快照發布等類型(如圖3),這里選擇“對等發布”項,點擊“下一步”,選擇目標數據庫中需要發布的對象,包括表、視圖和存儲過程等。

圖3 選擇發布類型
注意,對于表來說,是需要有主鍵的,否則無法執行事務或者對等發布。
點擊“項目屬性”→“設置所有表項目的屬性”項,在打開窗口中設置各種項目參數信息。點擊“下一步”按鈕,在“日志讀取器代理”欄中點擊“安全設置”按鈕,在打開窗口中選擇“在一下Windows賬戶下運行”項,輸入擁有合適權限的賬戶,該賬戶需要擁有數據庫管理權限,這里就是用上述“xxxdbadmin”賬戶,并輸入密碼。點擊“下一步”按鈕,選擇“創建發布”項,輸入發布名稱(例如“fb1”),點擊“完成”按鈕,創建項目。
選擇“復制”→“本地發布”→“[fb1]:fb1”項,在其右鍵菜單上選擇“配置對等拓撲”項,在向導界面中選擇發布服務器(即“SQLSRV01”),在“數據庫和發布”欄中選擇發布的數據庫,點擊“下一步”按鈕。
在配置拓撲窗口中點擊右鍵,在彈出菜單選擇“添加新的對等節點”項。
在連接到服務器窗口中的“服務器名稱”欄中輸入“SQLSRV02”,點擊“連接”按鈕。
在添加新的對等節點窗口(如圖4)中的“選擇數據庫”列表中該服務器上相應的數據庫。
在“對等發起方ID”欄中輸入新的數值,選擇“連接到所有顯示的節點”和“使用推送訂閱”項,讓數據的更新速度更快延時更低。
點擊“確定”按鈕,將SQLSRV02的服務器圖標添加進來。按照同樣的方法,將SQLSRV03服務器也添加進來。

圖4 添加新的對等節點

圖5 設置對等數據庫初始化方式
這樣,在三臺服務器之間就構成了對等的復制拓撲。
點擊“下一步”按鈕,選擇“對所有其他對等方使用第一個對等方的安全設置”項,表示在所有的節點上都使用和第一個節點相同的代理配置信息。
點擊“下一步”按鈕,指定如何初始化新的對等數據庫(如圖5),這里保持默認,點擊“完成”按鈕,創建該對等拓撲項目。
分別登錄到在上述SQL Server服務器上,在本地發布和本地訂閱節點下會顯示其他服務器的發布和訂閱項目。這樣,就實現了對等復制功能。
當其中任何一臺服務器中的指定數據庫內容發生變化時,都會自動同步復制到其他的服務器與之對應的數據庫中。
在Microsoft SQL Server Management Studis窗口左側的的“對象資源管理器”中選擇當前數據庫實例節點下“復制”項。在其右鍵菜單上點擊“啟動復制監控器”項。
在打開窗口左側選擇“復制監視器”→“我的發布服務器”→“服務器名稱”→“[fb1]:fb1”項。
在右側可以顯示復制的監控信息,包括狀態、訂閱、性能、滯后時間和上次同步時間等信息。