設定 SQL Server 2012 的 AlwaysOn 功能

有機會嘗試設定 SQL Server 2012 的 AlwaysOn 功能,記錄一下過程,以及碰到的問題。

我是用已經事先建立好的兩台 Hyper-V 虛擬機器來設定 AlwaysOn。兩台 VM 的電腦名稱分別是 LABVM01 和 LABVM02,它們都各自安裝了 Windows Server 2008 R2 企業版,以及 SQL Server 2012 企業版。

然後參考這篇逐步教學文章來設定:Step-By-Step: Creating a SQL Server 2012 AlwaysOn Availability Group。底下是設定過程中的一些畫面截圖:






設定過程並非一帆風順,但也只是一些小問題,都還算容易解決。

可是,到了最後一步,兩台 SQL Server 開始做第一次的同步作業時,卻失敗了。錯誤訊息如下圖:



我在網路上找到一篇文章,描述了此問題的成因和解法:Failed to join the instance to the availability group while configuring AlwaysON

照該文作者說的,去查看 SQL Server error logs,發現果然有類似的錯誤訊息,表示無法連接另一台 SQL Server 的資料庫。於是按照文中提供的 SQL 命令依樣畫葫蘆,對 primary replica 的資料庫執行以下命令:

use [master]
GO
create login [MY_DOMAIN\LABVM01$] from windows
GO
grant connect on endpoint::[Hadr_endpoint] to [MY_DOMAIN\LABVM01$]
GO

然後也對 secondary replica 的資料庫執行類似的命令:

use [master]
GO
create login [MY_DOMAIN\LABVM02$] from windows
GO
grant connect on endpoint::[Hadr_endpoint] to [MY_DOMAIN\LABVM02$]
GO

執行過後,便可以成功把 secondary replica 的那個 SQL Server 加入可用性群組了。如下圖:


註:皓皓-IT生涯 的〈SQL Server 2012 AlwaysOn建置〉一文中提到,應事先在 AD 網域中建立一個統一管理 SQL Server服務的帳號,例如 sqladmin,而且要用此帳號來安裝各節點的 SQL Server。不只如此,連啟動 SQL Server 服務的帳號也應該從預設的系統內建帳戶改成這個 sqladmin 帳戶。如果事前有做這個動作,我想應該就不會出現上述狀況。

帳戶存取權限不足的問題雖然解決了,可是由於第一次執行的同步動作失敗的緣故,secondary replica 那台 SQL Server 的資料庫全都處於 Restoring... 狀態。此時可以到 secondary replica 機器上利用 SSMS 把這些處於還原狀態的資料庫全數刪除(包括實體的資料檔案)。然後回到 primary replica 機器,把原先加入可用性群組的資料庫移除,再重新加入。過一會兒,就可以看到 secondary replica 機器上的資料庫開始長出來了。

讓 Secondary Replica 的資料庫可供外界讀取

現在看來,AlwaysOn 已經設定完成且順利運行了。接著,我做了點小測試:改動 primary replica 的資料庫,然後去查看 secondary replica 上面的資料庫是不是立刻跟著改動了。結果無法查看,因為先前在設定可用性群組時,Readable Secondary 選項是選擇 No。欲將此選項改為 Yes,可在你建立的可用性群組名稱上點右鍵,選 > Properties,如下圖:


然後在 General 頁中按下圖修改:


暫且記到這裡,有想到別的再補上吧。

註:我不是這方面的專家,只是偶爾碰到,加減學一點。萬一你在設定 SQL Server AlwaysOn 時碰到其他問題,與其在這裡提問,不如把錯誤訊息餵給 Google,會更快找到答案。

相關資料

Post Comments

技術提供:Blogger.