SQLServer2008關於可用性的解決方案
高可用性解決方案: http://msdn.microsoft.com/zh-cn/library/bb522583(v=sql.105).aspx
鏡像解決方案:http://msdn.microsoft.com/zh-cn/library/bb934127(v=sql.105).aspx
幾種鏡像方案的對比(圖片來自:http://www.cnblogs.com/killkill/archive/2008/05/23/1205792.html)
(點擊圖片查看大圖)
選擇鏡像的理由如下:
- 選擇熱備份,就只有三個選擇了
- 但故障轉移集群,一需要做集群,麻煩,二需要共享磁盤,服務器是有雙機了,我不想磁盤成為了潛在的單點故障,去年藝龍的宕機也是存儲單點故障導致
- 鏡像可以支持對客戶端透明
同時選擇了不要見證服務器,高性能模式,避免對數據庫性能的影響,當然風險是一旦故障轉移,可能對是部分數據有丟失
鏡像實施准備和過程
在實施之前做了一份數據庫鏡像實施計划,大概有1400字,將實施前中后要做到事情明確,論證到位,同時與相關的同事進行講解,計划大概有以下幾個方面的內容
-
1、需要做到准備工作
- 鏡像的前提工作,SQLServer版本一致等
- 確保鏡像先期測試通過,並整理好使用的鏡像sql腳本
- 鏡像后的數據、日志文件路徑等
- 設置要鏡像的數據為完整模式,並設置完整和日志備份計划
-
2、鏡像工作
- 將需要鏡像的數據庫都做一個完整備份並回復到鏡像服務器
- 做某個庫的鏡像前,備份日志並恢復到鏡像服務器
- 執行鏡像腳本
- 3、更新程序配置的連接字符串,以實現鏡像對客戶端的透明度
鏡像實施中碰到的問題
-
主體、鏡像服務器權限問題,這個問題折騰了兩個多小時,很熟悉的錯誤
服務器網絡地址 “TCP://192.168.1.4:5022″ 無法訪問或不存在。請檢查網絡地址名稱,並檢查本地和遠程端點的端口是否正常運行。 (Microsoft SQL Server,錯誤: 1418)
后來在SQLServer日志中看到了如下錯誤
Database mirroring connection error 4 ‘An error occurred while receiving data: ’10054(遠程主機強迫關閉了一個現有的連接。)’.’ for ‘TCP://192.168.1.4:5022′.
通過這個錯誤找到了問題,c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 沒有讀寫權限,一看真的是這樣,加入管理員(即sqlserver的運行用戶)的讀寫權限后一切正常!(如果還不行,配置權限后,再重新配置鏡像)
具體見:http://dba.stackexchange.com/questions/6222/mirroring-problems-after-removing-domain
解決這個問題的經驗就是,一定要先通過SQLServer日志和系統日志定位更准備的錯誤 ,才能快速解決問題
-
主體服務器備份后,需要拷貝備份文件到鏡像服務器,由於文件太大(500G),真慢
備份、拷貝、恢復的過程占了80%以上的時間
- 原本預計是停掉網站來做鏡像,實際上不需要,只是盡量在業務低峰期進行就可以了
鏡像實施后,可用性的解決辦法
准備好鏡像手工故障轉移到的腳本,主要下面三個語句
–都需要指定數據庫,在主體服務器上執行
ALTER DATABASE AA SET PARTNER SAFETY FULL; –事務安全,同步模式
ALTER DATABASE AA SET PARTNER FAILOVER; –手動故障轉移
ALTER DATABASE AA SET PARTNER SAFETY OFF;–事務不安全,異步模式,高性能模式
其他
實施鏡像后,數據庫的升級就可以采取滾動升級了,如圖所示(來自MSDN官方文檔,具體鏈接忘記了)