天天看點

簡單而快速地搞定 SQL Server 高可用(上篇)

作者:網管小賈
簡單而快速地搞定 SQL Server 高可用(上篇)

網管小賈 / sysadm.cc

公司裡有一台安裝了 SQL Server 的老爺機伺服器已經跑了整整三年。

無人問津、塵封多年的它最近狀況不斷,系統運作不是卡頓就是當機,難不成快了?

這就和人一樣一樣的,就算是台機器,雖固有一死,但這一天誰也不希望盼着它早點來不是?

呃,除非它有病!

哎,它可不真是有病!

這有病就得治,至少藥不能停!

就算暫時不考慮更換伺服器湊合着用,那後續的解決方案還是要提前研究一下啊!

首先嚴正聲明一下哈,這台伺服器可不是我安裝的,最早先是相關部門找的不知道哪個供應商給弄的。

現在當務之急是要考慮 SQL Server 服務不能故障停止的問題,也就是說不能出現中斷工作業務的情況。

那如何預防 SQL Server 服務中斷呢,我想到的就是備援服務,也就是高可用。

于是就有了我後面踩坑的經曆。

話說以前倒也研究過 MySql 的主從複制,并不是非常複雜,但是這個 SQL Server 的沒整過啊。

關于 SQL Server 的高可用實作,網絡上倒有不少文章,可是我找了幾篇看得我頭大了好幾圈。

不過還好,花了好幾天的時間,最後還真被我給折騰出來了。

但是說實話,雖然 Windows 的圖形操作都是點點點和下一步,但這裡面坑是真的多,于是我整理下來與各位小夥伴們一起分享。

由于内容繁多、篇幅較長,為讓大家看得清楚學得紮實,故分為上、中、下共三篇。

好,且聽我細細道來!

原理簡介及實作目标

對面複雜難辦的事兒,我們肯定不能一上來就着急動手,還是要來先簡單地熟悉一下原理以及我們最終想要實作的效果和目标。

SQL Server 的 Always On 資料同步模式一共有兩種,分别是 同步送出模式 和 異步送出模式 。

同步送出模式與異步送出模式的主要差別在于,同步送出模式資料可靠性高一些,但切換時因要保證同步會有一定的延遲,而異步送出模式下資料服務的性能會高一些。

如果你要保證資料更可靠,而且允許犧牲一些服務性能(其實也沒那麼誇張),那麼就選同步送出模式。

同步送出模式原理圖。

詳細具體的原理内容,請參考網友的文章。

文章連結:https://www.cnblogs.com/xuliuzai/p/9847301.html

簡單而快速地搞定 SQL Server 高可用(上篇)

本文就以同步送出模式來展開具體的建立和測試等操作。

最終要實作的效果,就是當任意一個節點故障時,另一個節點能提供正常的 SQL Server 服務。

而當故障節點恢複後,兩個節點之間又能正常同步更新資料庫。

OK,清楚了吧,讓我們開始吧!

準備工作

工欲善其事,必先利其器。

準備工作做得好,快樂收獲少不了!

1、各系統命名、IP位址及功能備注

這裡啰嗦幾句,為了保證系統的可靠性(域名解析、故障轉移和身份驗證等),我們直接采用域環境的方式來搭建 SQL Server 高可用系統。

至于網上還有使用證書驗證的方式,雖然我最後也成功做成了,但因其設定較為複雜麻煩又容易出錯,而且牽連着其他多處設定,是以我還是真心建議小夥伴們通過AD域環境來實作高可用。

  • A89230 192.168.89.230 SQL Server 節點一(主)
  • A89231 192.168.89.231 SQL Server 節點二(輔)
  • A89219 192.168.89.219 檔案共享伺服器(共享見證)
  • A89220 192.168.89.220 AD 伺服器(域名伺服器)域名:sysadm.local
  • MSSql_Cluster 192.168.89.232 群集名稱(虛拟 IP 位址)
  • MSSql_Listener 192.168.89.233 SQL Server Always On 可用性組偵聽器(虛拟 IP 位址)

看過上面的清單清單,我再簡單補充幾句。

a. 本例共兩台伺服器節點,一主一輔。

b. 共享伺服器和 AD 伺服器已是事先架設好的,為保證高可用穩定性,兩者均獨立于節點伺服器之外。

c. 群集和偵聽器的 IP 位址都是虛拟位址,這些虛拟位址均用于直接通路管理。

d. 高可用建立好後,應該使用偵聽器的 IP 位址作為服務位址,而不應該直接用任何節點的 IP 位址。

2、安裝 .Net Framework 3.5和 故障轉移群集管理器

操作對象:主輔兩台伺服器

打開 伺服器管理器 ,選擇菜單項 管理 > 添加角色和功能 。

簡單而快速地搞定 SQL Server 高可用(上篇)

在選擇功能界面勾選 .Net Framework 3.5 和 故障轉移群集 。

簡單而快速地搞定 SQL Server 高可用(上篇)

在确認安裝所選内容界面中,點選 指定備用源路徑 。

簡單而快速地搞定 SQL Server 高可用(上篇)

輸入以CD光牒盤符為開頭的安裝路徑,比如 D:\Sources\SxS\ ,同時将 Windows 2016 的安裝CD光牒放入光驅。

簡單而快速地搞定 SQL Server 高可用(上篇)

一切就緒後開始安裝即可。

3、系統服務

確定以下系統服務是否正常啟用并處于運作之中。

  • 網絡共享伺服器 Server
  • 遠端系統資料庫服務 Remote Registry
  • WMI 服務 Windows Management Instrumentation

4、組政策

使用指令 gpedit.msc 打開組政策編輯器。

在視窗左側依次找到 計算機配置 > Windows 設定 > 安全設定 > 本地政策 > 安全選項 。

在視窗右側找到 網絡通路:本地帳戶的共享和安全模型 ,確定設定為 經典 - 對本地使用者進行身份驗證,不改變其本來身份 。

通常這個預設值即是預期設定值。

5、防火牆

開啟 Windows Management Instrumentation (WMI) 應用通路。

簡單而快速地搞定 SQL Server 高可用(上篇)

在防火牆的進階設定中添加入站規則,開啟 1433 和 5022 端口。

前者是 SQL Server 的預設服務端口,而後者是群集的預設服務端口。

簡單而快速地搞定 SQL Server 高可用(上篇)

除以上開放的防火牆規則或端口外,可能還有諸如 Server 服務或遠端管理等多項規則的開啟。

雖然通常它們在預設情況下就是開放的,但還是要注意檢查一下,以免接下來會出現不可描述的問題。

6、DNS 解析

務必要保證各個系統之間都能正常通訊,那麼 DNS 的正常解析就顯得萬分重要了。

本次實踐我們是在域環境中實施的,隻要 DNS 是指向域中的域名伺服器, DNS 解析一般不會有問題。

但有一種情況,即非完全域名(就一個主機名)的解析,有可能會出現問題。

是以可以的話别偷懶,建議小夥伴們在 C:\Windows\System32\Drivers\etc\hosts 檔案中手動追加相應系統的域名解析記錄。

# hosts 域名解析記錄示例
192.168.8.88 yourhost
192.168.8.88 yourhost.sysadm.local           

7、群集見證共享

節點之間最簡單而行之有效的見證方法,就是通過共享來傳遞和驗證。

這個群集見證共享其實就是普通的共享檔案夾,但為了保證其可靠性和穩定性,建議将這個共享建立在獨立于各個節點的第三方。

這樣即便某一台群集節點伺服器故障也不會影響到共享的通路。

本例中将 A89219 設定為共享伺服器,并建立一個共享檔案夾 \\A89219\ClusterSharing 。

為保證各節點都能正常通路它,應該将這個共享檔案夾的權限放開。

那麼具體這個權限如何放開,又放開到什麼程度呢?

經過我找資料并多次測試,得出的結論是,這個共享權限應該開放 Everyone 的修改權限。

沒搞錯吧,肯定有小夥伴會問,那這個共享豈不是誰都可以通路了?

是的,是以為了保障系統安全,隻能通過其他一些折中的辦法來達到屏蔽非法通路的目的,比如限制隻能節點伺服器的 IP 通路等等。

具體的如何安全加強,那就看小夥伴們自己的需求了,這裡就不再一一舉例了。

以上準備工作完畢,開始本文的重點,小夥伴們打起精神來哦!

建立群集及故障轉移

群集是我們實作高可用的基礎,因為要保障高可用,肯定是要用到兩台甚至是更多台伺服器的。

将這些伺服器整合在一起就叫建立群集,而這些伺服器在群集中就叫作節點。

故障轉移則是在某台節點伺服器發生故障後,可以順利切換到其他正常伺服器的功能。

而要實作故障轉移,必須将某項具體服務設定為群集的角色來實作。

比如 SQL Server 的故障轉移功能,就是通過做為群集的一個角色來實作的。

實作故障轉移功能的角色設定我們需要在後面 SQL Server 中詳細說明。

現在我們先來說一說群集的建立,具體怎麼做呢?

1、建立群集

操作對象:主伺服器(A89230)

打開 伺服器管理器 ,依次點選 工具 > 故障轉移群集管理器 。

簡單而快速地搞定 SQL Server 高可用(上篇)

在 故障轉移群集管理器 界面中,右擊左側項,在右鍵菜單中選擇 驗證配置 。

簡單而快速地搞定 SQL Server 高可用(上篇)

根據你需要添加多少個節點伺服器,依次輸入伺服器的名稱,然後再點選 添加 。

注意,不要點選 浏覽 ,那個沒有任何作用。

簡單而快速地搞定 SQL Server 高可用(上篇)

添加完畢,運作所有測試,一路下一步。

簡單而快速地搞定 SQL Server 高可用(上篇)
簡單而快速地搞定 SQL Server 高可用(上篇)
簡單而快速地搞定 SQL Server 高可用(上篇)

如果測試中存在錯誤,請參照前面的準備工作所涉内容,務必保證通訊及權限的設定正确。

測試成功完成後,即可直接建立群集,隻要在測試結果界面下方勾選 立即使用經過驗證的節點建立群集... 并點選完成按鈕即可。

簡單而快速地搞定 SQL Server 高可用(上篇)

在建立群集向導界面中,輸入你喜歡的群集名稱,比如 MSSql_Cluster 。

然後在下方表格中填寫群集 IP 位址,這個 IP 位址必須是空閑的、虛拟的,但須保證與各節點在同一網段,比如 192.168.89.232 。

注意,這個群集名稱是一個 DNS 名稱,也就是它必須解析為你設定的 IP 位址,并且同時它的完全域名也應該能正常解析為這個 IP 位址。

比如本例的 MSSql_Cluster.sysadm.local 也應該可以解析成 192.168.89.232 。

簡單而快速地搞定 SQL Server 高可用(上篇)

一切 OK 後,點選下一步開始建立群集。

簡單而快速地搞定 SQL Server 高可用(上篇)

稍等一會兒,建立群集即可初步完成。

簡單而快速地搞定 SQL Server 高可用(上篇)

哎,怎麼叫初步完成呢?

小夥伴們也應該能注意到,在最後的完成畫面中有一項警告,系統無法為見證磁盤找到合适的磁盤。

這是什麼意思呢?

其實簡單的說,就是當故障發生需要故障轉移時,系統需要一個判斷,這個判斷就叫作仲裁。

為啥要這個仲裁?

因為如果沒有這個判斷,那系統就不知道是誰故障誰正常,也就無法完成故障轉移等一系列動作。

好,我們接下來就來搞定仲裁配置。

2、仲裁配置

右擊剛才建立的群集名稱,依次選擇 更多操作(M) > 配置群集仲裁設定(Q)... 。

簡單而快速地搞定 SQL Server 高可用(上篇)

仲裁配置選項中,選擇 選擇仲裁見證 。

簡單而快速地搞定 SQL Server 高可用(上篇)

選擇仲裁見證中,選擇 配置檔案共享見證 。

簡單而快速地搞定 SQL Server 高可用(上篇)

輸入檔案共享路徑(準備工作中已建立的共享檔案夾),比如 \\A89219\ClusterSharing 。

簡單而快速地搞定 SQL Server 高可用(上篇)

點選下一步,完成仲裁設定。

簡單而快速地搞定 SQL Server 高可用(上篇)
簡單而快速地搞定 SQL Server 高可用(上篇)

系統會在共享檔案夾中建立一些随機檔案,用于分析和測試等動作。

最終完成後應該是這個樣子。

簡單而快速地搞定 SQL Server 高可用(上篇)

兩個節點伺服器狀态正常。

簡單而快速地搞定 SQL Server 高可用(上篇)

而此時,角色一欄内仍然是空的,因為涉及到具體的某個服務,就是我們需要到某個服務中來添加實作。

是以接下來我們就要轉戰 SQL Server ,來聊一下具體如何實作高可用功能。

簡單而快速地搞定 SQL Server 高可用(上篇)

小結

由于文章整體篇幅較長,是以在下一篇文章中,我們将繼續和小夥伴們詳細探讨 SQL Server 的 Always On 高可用的具體建立和使用方法。

最後說句題外話,在此衷心祝賀聯考考得比較好的同學們和屏蔽生同學們能盡早收獲喜報,預祝你們前程似錦,将來造福社會,為祖國和人民多多貢獻自己的力量!

繼續閱讀