有機會嘗試設定 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 的資料庫執行以下命令:
然後也對 secondary replica 的資料庫執行類似的命令:
執行過後,便可以成功把 secondary replica 的那個 SQL Server 加入可用性群組了。如下圖:
讓 Secondary Replica 的資料庫可供外界讀取
現在看來,AlwaysOn 已經設定完成且順利運行了。接著,我做了點小測試:改動 primary replica 的資料庫,然後去查看 secondary replica 上面的資料庫是不是立刻跟著改動了。結果無法查看,因為先前在設定可用性群組時,Readable Secondary 選項是選擇 No。欲將此選項改為 Yes,可在你建立的可用性群組名稱上點右鍵,選 > Properties,如下圖:
然後在 General 頁中按下圖修改:
暫且記到這裡,有想到別的再補上吧。
註:我不是這方面的專家,只是偶爾碰到,加減學一點。萬一你在設定 SQL Server AlwaysOn 時碰到其他問題,與其在這裡提問,不如把錯誤訊息餵給 Google,會更快找到答案。
相關資料
我是用已經事先建立好的兩台 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,會更快找到答案。
相關資料
- Troubleshoot AlwaysOn Availability Groups Configuration
- Set Up Login Accounts for Database Mirroring or AlwaysOn Availability Groups
- SQL Server 2012 AlwaysOn建置
沒有留言: