Windows 2012 always on 讀寫分離集羣搭建配置。
Always on簡介
AlwaysOn 可用性組 (SQL Server)
AlwaysOn 可用性組功能是一個提供替代數據庫鏡像的企業級方案的高可用性和災難恢復解決方案。SQL Server 2012 中引入了 AlwaysOn 可用性組功能,此功能可最大程度地提高一組用戶數據庫對企業的可用性。“可用性組”針對一組離散的用戶數據庫(稱爲“可用性數據庫”,它們共同實現故障轉移)支持故障轉移環境。一個可用性組支持一組讀寫主數據庫以及一至八組對應的輔助數據庫。(可選)可使輔助數據庫能進行只讀訪問和/或某些備份操作。
可用性組在可用性副本級別進行故障轉移。故障轉移不是由諸如因數據文件丟失而使數據庫成爲可疑數據庫、刪除數據庫或事務日誌損壞等此類數據庫問題導致的。
Always on 優點:
AlwaysOn 可用性組提供了一組豐富的選項來提高數據庫的可用性並改進資源使用情況。主要組件如下:
· 支持最多九個可用性副本。“可用性副本”是可用性組的實例化,此可用性組由特定的 SQL Server 實例承載,該實例維護屬於此可用性組的每個可用性數據庫的本地副本。每個可用性組都支持一個主副本和最多八個輔助副本
支持替代可用性模式:
· 異步提交模式。此可用性模式是一種災難恢復解決方案,適合於可用性副本的分佈距離較遠的情況。
· 同步提交模式。此可用性模式相對於性能而言更強調高可用性和數據保護,爲此付出的代價是事務延遲時間增加。一個給定的可用性組可支持最多三個同步提交可用性副本(包括當前主副本)。
支持幾種形式的可用性組故障轉移:自動故障轉移、計劃的手動故障轉移(通常簡稱爲“手動故障轉移”)和強制的手動故障轉移(通常簡稱爲“強制故障轉移”)。
· 支持幾種形式的可用性組故障轉移:自動故障轉移、計劃的手動故障轉移(通常簡稱爲“手動故障轉移”)和強制的手動故障轉移(通常簡稱爲“強制故障轉移”)。有關詳細信息,請參閱故障轉移和故障轉移模式(AlwaysOn 可用性組)。
· 使您能夠將給定的可用性副本配置爲支持以下一種或兩種活動輔助功能:
o 利用只讀連接訪問,與副本的只讀連接可以在此副本作爲輔助副本運行時訪問和讀取其數據庫。有關詳細信息,請參閱活動輔助副本:可讀輔助副本(AlwaysOn 可用性組)。
o 當副本作爲輔助副本運行時,對副本的數據庫執行備份操作。有關詳細信息,請參閱活動輔助副本:輔助副本備份(AlwaysOn 可用性組)。
通過使用活動輔助功能,可更好地利用輔助硬件資源,從而提高 IT 效率並降低成本。此外,通過將讀意向應用程序和備份作業轉移到輔助副本,有助於提高針對主副本的性能。
· 支持每個可用性組的可用性組偵聽器。“可用性組偵聽器”是一個服務器名稱,客戶端可連接到此服務器以訪問 AlwaysOn 可用性組的主副本或輔助副本中的數據庫。可用性組偵聽器將傳入連接定向到主副本或只讀輔助副本。偵聽器在可用性組故障轉移後提供快速應用程序故障轉移。有關詳細信息,請參閱可用性組偵聽器、客戶端連接和應用程序故障轉移 (SQL Server)。
· 支持靈活的故障轉移策略以便更好地控制可用性組故障轉移。
· 支持用於避免頁損壞的自動頁修復。
· 支持加密和壓縮,這提供了安全且高性能的傳輸方式。
· 提供了一組集成的工具來簡化部署和管理可用性組,這些工具包括:
o 用於創建和管理可用性組的 Transact-SQL DDL 語句。有關詳細信息,請參閱AlwaysOn 可用性組的 Transact-SQL 語句概述 (SQL Server)。
o SQL Server Management Studio 工具,如下所示:
§ 新建可用性組嚮導 創建和配置可用性組。在某些環境中,此嚮導還可以自動準備輔助數據庫並且爲每個數據庫啓動數據同步。有關詳細信息,請參閱使用“新建可用性組”對話框 (SQL Server Management Studio)。
§ 將數據庫添加到可用性組嚮導 向現有可用性組添加一個或多個主數據庫。在某些環境中,此嚮導還可以自動準備輔助數據庫並且爲每個數據庫啓動數據同步。有關詳細信息,請參閱使用“將數據庫添加到可用性組”嚮導 (SQL Server)。
§ 將副本添加到可用性組嚮導 向現有可用性組添加一個或多個輔助副本。在某些環境中,此嚮導還可以自動準備輔助數據庫並且爲每個數據庫啓動數據同步。有關詳細信息,請參閱使用“將副本添加到可用性組嚮導”(SQL Server Management Studio)。
§ 故障轉移可用性組嚮導 啓動對可用性組的手動故障轉移。根據您指定爲故障轉移目標的輔助副本的配置和狀態,該向導可以指定計劃的手動故障轉移或強制手動故障轉移。有關詳細信息,請參閱使用故障轉移可用性組嚮導 (SQL Server Management Studio)。
o AlwaysOn 面板 監視 AlwaysOn 可用性組、可用性副本和可用性數據庫,並且評估 AlwaysOn 策略的結果。有關詳細信息,請參閱使用 AlwaysOn 面板 (SQL Server Management Studio)。
o “對象資源管理器詳細信息”窗格顯示有關現有可用性組的基本信息。關詳細信息,請參閱使用對象資源管理器詳細信息監視可用性(SQLServer Management Studio)。
o PowerShell cmdlet。有關詳細信息,請參閱AlwaysOn 可用性組PowerShell Cmdlet 概述 (SQL Server)。
文檔出處,詳見:https://msdn.microsoft.com/zhcn/library/hh510230(v=sql.120).aspx
測試環境:
4臺Windows 2012 R2 服務器。
服務器功能 | 服務器IP | 系統 | 服務 |
AD節點 | 10.92.37.2 | Windows 2012 R2 | AD |
Sql 2012節點 | 10.92.37.3 | Windows 2012 R2 | 故障轉移+sql2012 |
Sql 2012節點 | 10.92.37.4 | Windows 2012 R2 | 故障轉移+sql2012 |
Sql 2012節點 | 10.92.37.5 | Windows 2012 R2 | 故障轉移+sql2012 |
一、安裝故障轉移
Always on 集羣需要故障轉移集羣支持。首先需要搭建故障轉移集羣。
在10.92.37.2安裝域控。打開服務器管理器,打開-管理-添加角色和功能。
勾選Active Directory 域服務。
等待所有安裝完成。
配置域控服務器。,點擊下圖是所示按鈕。
選擇“添加新林”,在根域名填入您域的名稱。
輸入還原密碼。
下一步
等待系統分配NetBIOS名稱。然後一直下一步。等待完成,重啓服務器。重啓完成注意需要用域賬號登陸。例如jianjian\administrator
安裝
注:域控配置好之後會自動把網卡dns改成127.0.0.1,或者您安裝域控前手動改成127.0.0.1,sql節點的dns爲了加入域需要改成域控的地址:10.92.37.2
二、Sql 節點服務器加入域。
配置sql節點服務器的網卡(和域控在同段)DNS爲域控的地址。確保可以解析域控名稱。
開始我的電腦右鍵屬性à更改設置à更改à選擇域,填入域控名稱。確定,輸入域控的管理員賬號和密碼加入域。重啓服務器。
重啓後通過域用戶登陸服務器。例如:jianjian\administrator
三、安裝故障轉移角色。
在sql節點的所有服務器安裝故障轉移角色服務。
安裝方式都一樣,下一步即可。
故障轉移磁盤配置。完整的故障轉移集羣需要仲裁磁盤和數據盤、MSDTC盤。在發生轉移的時候磁盤也會整體進行轉移從而起到2邊數據同步的作用。具體可以參考相關文檔。
此次我們爲3節點(奇數)集羣,並不需要創建仲裁。
四、建立故障轉移集羣。
下一步
下一步
下一步
角色不選,直接下一步
選擇功能—故障轉移集羣。
下一步直接到安裝結束。
瀏覽查找您需要添加到集羣的節點,爲了更好辨認建議更改計算機名稱。
下一步
下一步
下一步
下一步
下一步
五、安裝sql 2012。
Sql2012在安裝正常操作即可,需要注意的就是服務賬號配置的(如圖1)時候使用域賬號。分別在3臺節點安裝sql 2012。安裝完成後,(圖2所示)打開sql server 配置管理器—SQL Server(MSSQLSERVER)--右鍵屬性。啓用always on 可用性組。重啓數據庫服務。
圖(1)
圖(2)
六、配置讀寫集羣。
首先在你選擇的主節點導入您的數據庫。讀寫集羣配置需要數據庫的完整備份。選擇數據庫,右鍵屬性—選項—調整恢復類型爲完整。
對這個數據做完整備份。
always on 集羣配置。
輸入名稱。隨性即可。
點擊添加副本使用域賬號連接其他2個sql節點。勾選(自動故障轉移)和(同步提交)
輔助副本“可讀輔助副本”選擇爲僅只讀意向。備份首選項默認即可。
添加偵聽器。也可以在創建完後再添加。選擇子網,輸入指定的IP地址即可。注意監聽的端口sql server爲1433
“所有副本可訪問的共享網絡位置。”在任意節點建立共享文件夾,並且在另外2臺掛載(注意開機掛載)。即可。
驗證結果全部成功即可。下一步等待創建完成即可。完成後結果如下。在主節點可以看到“主要”字樣。此時可以做到3臺服務器數據同步(同步有1-2s延遲)並且可以實現故障轉移。當主節點故障後其他節點可以自動成爲主節點接替工作。
此時數據庫集羣還無法做到讀寫分離。由於always on侷限性需要手動配置只讀路由表,這個路由表大致結構是主節點----對應2個只讀節點。並且只讀節點有優先級,前面的優於後面的。 無法實現2個或者多個只讀節點實現負載。其實只爲熱備。只讀路由表通過T-sql語言實現,具體如下。更改相關參數保存爲.sql文件,通過sqlcmd命令執行。Sqlcmd –S 服務器名稱 -U 用戶 -P 密碼 –i 腳本
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH
(
SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH
(
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.3:1433')
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH
(
SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH
(
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.6:1433')
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH
(
SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH
(
SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://10.92.37.5:1433')
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-2N0I1AI1BHC' WITH
(
PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-K0VKE108NM8',N'WIN-LF5RK32CE87',N'WIN-2N0I1AI1BHC'))
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-K0VKE108NM8' WITH
(
PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-2N0I1AI1BHC',N'WIN-K0VKE108NM8','WIN-LF5RK32CE87'))
);
GO
ALTER AVAILABILITY GROUP [weitui_sql_wr]
MODIFY REPLICA ON N'WIN-LF5RK32CE87' WITH
(
PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(N'WIN-K0VKE108NM8',N'WIN-LF5RK32CE87','WIN-2N0I1AI1BHC'))
);
GO
驗證讀寫路由表。使用同樣的命令驗證。
select a.*,c.is_local,c.role_desc,d.endpoint_url,d.read_only_routing_url
from sys.dm_hadr_availability_replica_cluster_nodes a
join sys.dm_hadr_availability_replica_cluster_states b
on a.replica_server_name = b.replica_server_name
join sys.dm_hadr_availability_replica_states c
on b.replica_id = c.replica_id
join sys.availability_replicas d
on c.replica_id = d.replica_id
測試只讀路由是否生效。Always on 集羣web鏈接過程中需要傳遞ApplicationIntent = ReadOnly 此類參數。測試方式如下。
完成以上操作後點鏈接。如果可以連接到只讀節點,並且符合只讀路由表的順序表示配置完成。