[SQL][問題處理]SQL Server Cluster 安裝在 CSV ( Cluster Shared Volumes ) 上的注意事項
最近在測試新版本的 SQL Server 2014 的時候,剛好看到 MSDN 上面有篇介紹 Deploying SQL Server 2014 with Cluster Shared Volumes 的文章,可以讓新版本的 SQL Server 安裝在叢集共享磁區上,而非跟傳統一樣安裝在共享磁碟上,而在 Tech-ed 2014 上,也有專門的一堂課程來介紹這個部分,看起來這應該是未來主推的一種方式,因此我也決定自己架設一個 Lab 環境來測試看看。
基本上跟其他之前的 SQL Server 版本是一樣的,我們必須先預備好一個 WSFC ( Windows Server Failover Clustering ) 的環境,為了配合可以使用 gMSA ( Group Managed Service Accounts ),因此我先用 Windows Server 2012 建立一個新的 AD,並且將測試用的 VM 都安裝好 Windows Server 2012 R2,完成期初的預備工作。
安裝好之後,我先把 LUN 1 的部分先設定為「仲裁磁碟」,基本上這個佔用的空間並不需要太大,但我的 NAS 在切割 iSCSI LUN 的時候最小要設定 10G,因此就先給他 10GB 來使用。接著我們將 LUN 2 上面,選擇「新增至叢集共用磁碟區」
設定好之後,我們就會發現原本是共用磁碟 R,會轉變成為 「C:\ClusterStorage\Volumn1」 了
完成上述步驟之後,我們就可以開始來安裝了。基本上安裝 SQL Server Cluster ( 在 SQL Server 2012 改稱為 SQL Server AlwaysOn Failover Cluster Instances ) 和一般安裝 SQL Server 的程序差不多,但要注意安裝的時候一開始的選像是不同的。在這個步驟可不要選錯了喔~~
接下來大部分的步驟都是相同的,我就不再赘述了,因為主要是測試 Cluster 的安裝和使用,因此在安裝的時候我就只單純選擇資料庫引擎服務和管理工具這兩個部分
接下來會有個比較重要的地方,在這個步驟你要設定一個 「SQL Server 網路名稱」,以後你要連接這個 SQL Server 就必須要使用這個名稱來連接。
這裡可以先忽略
到這個步驟要稍微注意一下,因為原本我有三個叢集磁碟,但第一個已經分配去當仲裁了,而我是把第二個磁碟設定成為「叢集共享磁區」,因此在這個步驟我要選擇安裝到叢集磁碟 2 上面。
接著在這裡要指定剛剛前幾個步驟所設定 SQL Server 叢集網路名稱所對應的 IP 位址,雖然這個部分是可以設定使用 DHCP,但一般我們都比較常使用固定 IP 來做分配使用。
在服務帳戶的設定上,我個人比較偏號使用 gMSA,這樣比較不會有密碼被被更改或者是被一值登入而被鎖定或者是換密碼的問題,如果你不習慣使用 gMSA 的話,那麼也可以指定一個網域的使用者帳號也是可以的啦。
接下來也都沒有甚麼太大的不同
接下來要到最後一步要開始安裝前,我們可以發現的確 SQL Server 會把資料的目錄都安裝到 CSV 上面去了。
按下「安裝」的按鈕之後,此時就是考驗你設備的等級了,因為我的兩個環境是在 Hyper-V 上面的 Guest VM,又是使用普通的 NSA 來當 iSCSI Server,因此整個安裝時間大約花上 30mins。
當第一個 SQL Server CLuster 節點安裝好之後,接下來第 2 個之後的安裝步驟就相對簡單多了,只是要注意在一開始的安裝選項,可不要選錯了。
接下來大部分都是直接按下「下一步」就可以了,到了這個步驟的時候,要檢查一下「叢集網路名稱」是否是正確,一般來說如果只有一個 SQL Server 叢集是不會有甚麼問題的,如果有多個的時候,則要注意一下可別選錯了。
在這裡他會自動從 Active 節點上的 SQL Server 設定值給帶過來
相對第一個節點來說,安裝步驟所要設定的東西少了很多,但安裝也差不多要花上 20~30 mins 的時間。
安裝過程算簡單,原本以為這樣就大功告成了,於是想要掛一個資料庫進來測試一下,因此我想透過 SSMS 來還原資料庫。
很自然的會去選擇「加入」來挑選我的備份檔案。
但悲劇就出現了,居然在這裡告訴我權限不足,或者是路徑不存在的問題。但看起來這個是預設的目錄,在前面安裝的過程中,是有建立這個目錄,因此應該不會不存在才對。
因此決定手動下指令先建立一個資料庫,然後利用 BACKUP DATABASE 的指令,將資料庫備份到那個部分下,看起來都沒有問題。但如果在前面的步驟,我們手動輸入備份檔案的位置,而不要用 GUI 去選擇,也都不會有問題,因此到底是甚麼樣的問題造成會有這樣的錯誤呢 ?! 花了一個多月總算找到答案了,原來是 SSMS 的管理工具,並沒有考慮到安裝 SQL Server Cluster 的時候,有可能沒有設定任何共用磁碟,而導致 SSMS 去抓取目錄資訊的時候,因為沒有取到共用磁碟的資訊,因此就直接送出這樣的訊息。
既然知道問題了,那我們就可以來做處理了。首先先開啟「容錯移轉叢集管理員」,選擇角色下的 「SQL Server」,接著按下滑鼠右鍵,選擇「新增存放裝置」
加入一個叢集磁碟專門給 SQL Server 叢集來使用,後續你不一定要使用他來存放東西,但一定要有一個給 SQL Server 叢集專用的叢集磁碟。
案下「確定」之後,在 SQL Server 角色下就可以看到有新增一個「存放裝置」
此時選擇上圖中的「其他資源」→「SQL Server」,在其上按下滑鼠右鍵選擇「屬性」→「相依性」,將剛剛所新增的叢集磁碟 3 給加入到相依性的條件內。
此時再重新選擇還原資料庫的處理,就可以發現可以開啟 SQL Server 的預設備份檔目錄了,而且沒有任何的錯誤訊息。
或者是要切換到叢集磁碟 S 上也沒有問題。
一個看似很簡單的問題,卻反反覆覆的查了將近一個月,有測試過重裝、更換服務帳戶、調整備份目錄權限、利用 Backup Device 等方式,但就是沒有成功,後來總算是找到幾個關鍵的 DMV,從這些 DMV 的結果才找到最後的問題。如果想要研究的朋友,可以查看看以下這幾個 DMV 的回傳結果和說明:
sys.dm_io_cluster_shared_drives
這個檢視會傳回每個共用磁碟機的磁碟機名稱。 如果目前的伺服器執行個體不是叢集執行個體,它會傳回空的資料列集
sys.dm_os_cluster_nodes
如果目前的執行個體是容錯移轉叢集執行個體,將會傳回定義有此容錯移轉叢集執行個體之節點的清單,並可以判斷哪個節點為目前擁有者
sys.dm_io_cluster_valid_path_names
傳回 SQL Server 容錯移轉叢集執行個體之所有有效共用磁碟的相關資訊,包括叢集共用磁碟區。