Windows 2012 always on 讀寫分離集羣搭建配置。node
Always on簡介web
AlwaysOn 可用性組 (SQL Server)sql
AlwaysOn 可用性組功能是一個提供替代數據庫鏡像的企業級方案的高可用性和災難恢復解決方案。SQL Server 2012 中引入了 AlwaysOn 可用性組功能,此功能可最大程度地提升一組用戶數據庫對企業的可用性。「可用性組」針對一組離散的用戶數據庫(稱爲「可用性數據庫」,它們共同實現故障轉移)支持故障轉移環境。一個可用性組支持一組讀寫主數據庫以及一至八組對應的輔助數據庫。(可選)可以使輔助數據庫能進行只讀訪問和/或某些備份操做。數據庫
可用性組在可用性副本級別進行故障轉移。故障轉移不是由諸如因數據文件丟失而使數據庫成爲可疑數據庫、刪除數據庫或事務日誌損壞等此類數據庫問題致使的。安全
Always on 優勢:服務器
AlwaysOn 可用性組提供了一組豐富的選項來提升數據庫的可用性並改進資源使用狀況。主要組件以下:網絡
· 支持最多九個可用性副本。「可用性副本」是可用性組的實例化,此可用性組由特定的 SQL Server 實例承載,該實例維護屬於此可用性組的每一個可用性數據庫的本地副本。每一個可用性組都支持一個主副本和最多八個輔助副本異步
支持替代可用性模式:ide
· 異步提交模式。此可用性模式是一種災難恢復解決方案,適合於可用性副本的分佈距離較遠的狀況。工具
· 同步提交模式。此可用性模式相對於性能而言更強調高可用性和數據保護,爲此付出的代價是事務延遲時間增長。一個給定的可用性組可支持最多三個同步提交可用性副本(包括當前主副本)。
支持幾種形式的可用性組故障轉移:自動故障轉移、計劃的手動故障轉移(一般簡稱爲「手動故障轉移」)和強制的手動故障轉移(一般簡稱爲「強制故障轉移」)。
· 支持幾種形式的可用性組故障轉移:自動故障轉移、計劃的手動故障轉移(一般簡稱爲「手動故障轉移」)和強制的手動故障轉移(一般簡稱爲「強制故障轉移」)。有關詳細信息,請參閱故障轉移和故障轉移模式(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 此類參數。測試方式以下。
完成以上操做後點連接。若是能夠鏈接到只讀節點,而且符合只讀路由表的順序表示配置完成。