項目需要保障數據的高可用,於是可選的方案無非是Oracle集群、 傳統的主從+心跳切換訪問點以及SQL Server AlwaysOn這類方案。(//經驗不多,了解和實踐過的方案就這類,輕拍)
Oracle太大,項目初期的核心開發人員並不會用(從高校中途接手的項目,前期都是研究生在做),所以本身就被限制在SQL Server這個技術棧里了,好在了解到SQL Server 2012開始具備AlwaysOn的組件,完全滿足項目要求,所以這個方案就這么確定了。
【SQL AlwaysOn技術簡介】
Always On 可用性組功能是一個提供替代數據庫鏡像的企業級方案的高可用性和災難恢復解決方案。 SQL Server 2012 中引入了 Always On 可用性組功能,此功能可最大程度地提高一組用戶數據庫對企業的可用性。 “可用性組” 針對一組離散的用戶數據庫(稱為“可用性數據庫” ,它們共同實現故障轉移)支持故障轉移環境。 一個可用性組支持一組讀寫主數據庫以及一至八組對應的輔助數據庫。 (可選)可使輔助數據庫能進行只讀訪問和/或某些備份操作。
可用性組在可用性副本級別進行故障轉移。 故障轉移不是由諸如因數據文件丟失而使數據庫成為可疑數據庫、刪除數據庫或事務日志損壞等此類數據庫問題導致的。
核心內容呢,看上去一樣是個主從的部署方案,但是對於主從而言,僅僅能夠在一個頻率下實現數據的備份,並不能無縫切換。而AlwaysOn在基於windows故障轉移群集技術上實現了自動的轉移,即是說如果你有A B兩個節點,A做主,那么B會保持同步,並且在A掛了后自動銜接服務。對外訪問而言,整個集群暴露的是一個虛擬ip,這個ip就是這個集群的訪問點。
這樣一來,集群建好后,整個集群就被黑箱化了。
按照官方說法,可用性組支持到一個主節點和8個輔助節點(副本)
這樣不管怎么想,對於常規的業務完全足夠富裕。
【硬件、網絡環境】
在我的例子里,硬件環境一共使用了4台電腦。他們的作用分別是:
1. Dell R730 *2, 集群節點,數據庫節點。
2. Dell 3010 集群仲裁見證所需共享存儲。
3. Windows Server 2012 R2 VM, 集群域控。
我的網絡環境是單網,在我的辦公局域網中單獨給這四台PC建立一個域 abc.com。
實際上生產環境絕對不應該這么做,好的做法應該是集群在內網,外網業務單獨走一個對外局域網,用數據中間件進行到數據庫的交互。
只不過先建立好這個雙網環境再來搭建集群,可能會踩到坑。
需要注意,因為是在域環境里,所以域控一定要一直開着,否則你無法使用域賬戶登陸。
所以這里我使用虛擬機做域控並不可取。(我是為了項目現場部署方便)
接下來簡要介紹一下啟動AlwaysOn之前的步驟,因為實在有點多所以暫時不寫細了…
要想看Step By Step的步驟,請移步:
從0開始搭建SQL Server AlwaysOn 第一篇 【配置域控】
從0開始搭建SQL Server AlwaysOn 第二篇 【配置故障轉移集群】
從0開始搭建SQL Server AlwaysOn 第三篇 【配置AlwaysOn】
這三篇講的非常細致,特別感謝博主。
【前序步驟】
0. 系統環境准備
系統環境推薦使用Windows Server 2012 R2系統,並且一定要安裝為 DataCenter,否則不支持故障轉移。
軟件方面,新系統安裝后要使用角色管理器添加 .Net Framework3.5, 否則無法安裝Sql Server 2012 sp1.
修改網絡環境,根據我踩了坑之后的經驗,建議如果你要使用雙網絡環境,優先在只有內網環境(群集用網)上完成搭建,后續再加入外網環境。
SQL Server 此時可以不裝,萬一群集建立失敗要重裝電腦呢。。。
建議到這里,使用Ghost之類的工具把系統備份一下。因為如果群集建立出問題,有可能節點無法清除群集的配置,這樣你沒辦法再加入新的群集,而且很可能無法退出舊集群且無法使用Clear-ClusterNode工具。
退出群集的步驟,以后有時間再寫博客了。
1. 搭建域環境
建立域環境是為了創建故障轉移集群,實際上做完搭建你就會明白,域環境是為了確保能夠直接以windows賬戶進行節點之間的登陸認證。
所以域用戶你可以新增多個,但是最終要在兩個節點上使用一個域用戶登陸進行配置。
節點加域后,務必記得把域賬戶添加到當前PC的Administrators 組里,否則建群容易出現權限問題。
群集仲裁見證是這樣,你可以理解為節點之間總要有共享的位置來進行文件交換,就像雙機的熱鏡像方案一樣,需要一個共享存儲來進行數據的同步。
所以放這個見證文件夾的PC必須要和集群一起運行,且在網絡里能夠被所有節點訪問到。引用的博客第二篇有提到,偶數節點的話一個共享文件夾即可。
為了減少權限問題,我把這個pc一起加入了域環境里。(這個可做可不做)
域環境搭建好之后,進入故障轉移的配置。
2. 配置節點的故障轉移群集
首先你要使用Administrator賬戶登陸,而不是域賬戶。
之后使用服務器管理器,在添加角色和功能里,進入功能選項找到故障轉移群集,讓服務器配置為故障轉移模式並且安裝故障轉移集群管理器。
故障轉移群集管理器長這樣:
因為我這是 事后.jpg (逃) 上邊已經有我的群集列表。
這一步OK后,確保節點上的防火牆都關閉,再繼續配置故障轉移群。(務必注意,建立域環境后網絡會多一個域網絡,所以如果沒有檢查,很可能它的防火牆是開啟狀態。這樣會導致群集找不到對應節點。)
關閉防火牆確保節點之間通信順暢的做法是因為一般會專門使用一個防火牆設備來對外。另外如果多重網絡下,理論對內網(專網)和域網絡之外打開防火牆不存在太大影響。
在故障轉移群集的配置中,驗證配置里警告都可以忽略,但絕對不能有錯誤。 有些警告最好是瀏覽一下。
在驗證通過后的配置中,先不要勾選 “將所有符合條件的共享磁盤加入群集”選項(這個在上文博客里有提到。)
群集建立好后,你能夠按你的配置ping到這個群集的對外ip,如圖:
按我的理解,這個集群相當於對外是一台虛擬機了。
到此,前期准備工作基本OK。
【SQL Server AlwaysON 配置】
0. SQL Server版本要求
務必使用 SQL Server 2012 Sp1或以后版本,否則會踩到一個坑。(引用第三篇有提到這個坑)
1. 安裝SQL Server
使用Administrator賬戶登陸安裝,否則同樣會踩到一個坑。(引用第三篇也提到。)
安裝時要選擇全新安裝,配置按需走即可,但是最好確保數據和日志目錄在每個節點上一樣。
另外在安裝中設置賬戶那一個步驟,引用博客提到要把SQL Server 數據引擎和SQL Server Agent的賬戶從默認的NT 賬戶改成域賬戶,這個我估計是博主寫錯了,因為在Administrator下安裝,這里是選不到域賬戶的。
所以這個步驟建議填寫Administrator賬戶。 (安裝好后會做修改)
一定要使用sa賬戶混合驗證!
其他的按照博客做就好。
安裝后的步驟是,在服務里配置Sql Server服務、SQL Agent服務的默認登陸賬戶為域賬戶,之后務必檢查在兩個節點上是否能夠以對方節點的計算機名+域賬戶登陸。
(一開始使用雙網環境來裝,這里極其容易出問題。雖然SQL Server支持多網卡路由,但是我遇到的情況就是無法以這個組合登陸,只能用內網IP+ sa,這樣AlwaysOn配置的路由是內網的話,最后一步是無法成功的。)
2. 上述工作確認好后,開始進行配置。
首先,SQL的配置管理器打開,啟用AlwaysOn可用性組。 每個節點都要操作,最后在SQL的實例里通過屬性驗證。
驗證AlwaysOn啟用:
驗證好兩個節點后,在SQL Management Studio的對象管理器里可以看到AlwaysOn高可用組可以右鍵添加可用性組了。
這是最后建立的結果。
3. 准備數據庫
因為可用性組是對數據庫而言的,所以這一步要先准備數據庫。 從單機服務器上遷移來的數據庫,你需要進行完整備份后,在其中一個節點上恢復數據庫。
之后在這個節點上再一次對這個數據庫進行備份操作,並且要注意,這個備份必須是With No Recovery的。 【一定要檢查好,否則最終不能鏈接到這個副本進行同步】
這里新備份的數據庫拷貝到節點B上進行恢復即可。
如果是上述操作恢復了之后,B節點上這個數據庫的圖標會有一個綠色的箭頭,並且括號里的狀態是(正在還原...)
以上步驟結束,就可以正式進入可用性組的建立了。
4. 可用性組創建
在上文提到的可用性組上右鍵,選擇新建可用性組向導:
之后選擇數據庫:
需要注意,這里只列出用戶數據庫,即我們之前還原的數據庫。特別要注意狀態列給出的信息,如果不是“滿足先決條件”是不能進入下一步的。
先覺條件主要是1. 用戶數據庫,2. 完整備份 ,滿足這兩個條件這里就不會報錯。
但是如果B節點沒有一個 With No Recovery的還原,B不能被加入可用性副本。
這一步需要注意勾選配置如圖。 (圖自引用博客)
另外端點選項卡的配置,默認的url是計算機名:端口,建議手工填寫 IP:端口,這樣可以強行指定alwaysOn組內部的路由。否則如果保持默認, 在多重網絡下訪問的路由是隨機的。
之后順着向導走即可,到最后一步成功的話,應該如圖:
圖自引用博客
一定注意,如果最后一步失敗,原因大約是: 防火牆、 B節點不是恢復模式、A B節點不能互相使用windows賬戶驗證(檢查域環境、考慮是否存在多網沖突)
實際上到此,你會發現AB節點上的狀態變成已同步,目前也可以直接使用前文提到的故障轉移群集的對外IP + 域賬戶登陸到高可用組的數據庫實例。
可用性組也有了你配置的可用性組對象。
之后對這個可用性組建立偵聽器,我的理解是使用偵聽器可以和群集的IP獨立開。實際上偵聽器可以任意配置另一個訪問點IP。
到此,整個AlwaysON搭建完成。
【后記】
折騰這個還是耗費了不少時間,特此記錄。希望對看到博客的你有所幫助。