
我們正在為即將推出的網路產品建構生產環境。對於此堆疊,主 SQL Server 2008 將用於即時資料庫操作,輔助 SQL Server 2008 將獲得從主 SQL Server 映像的資料(透過 SQL Server 的內建鏡像能力)。我們將讓報表服務針對輔助 SQL Server 執行,同時在主 SQL Server 不可用時使其具有熱備用狀態。
在應用程式層面,我們有兩個選擇:
- 在應用程式層中實作故障偵測,以便如果主 SQL Server 無回應,讓我們的 DAL 存取輔助 SQL Server。或者
- 讓應用程式層指向 vip 並讓 HAProxy 處理故障檢測。
問題是,選項#2 是可行的選項嗎?
注意:我們知道還有其他方法可以在資料庫層級提供高可用性(例如叢集),但我們的目標是找到一種經濟高效的解決方案。
答案1
“數據鏡像”是什麼意思?
您可以擁有資料庫鏡像,在這種情況下,客戶端(即您的 DAL)可以在連接字串中使用 FailoverPartner 並追蹤故障轉移事件並連接到新主體。您的報告將運行資料庫快照,而不是資料庫本身,因為鏡像不可用。
您可以擁有一個故障轉移集群,並且客戶端連接到集群資源名稱來啟動,並且它不知道啟動時的活動節點主機名,但這並不能讓您存取備用夥伴上的資料。
您可以使用硬體鏡像,但這是一個單獨的主題。
有人說複製是一種選擇,我不屬於那個陣營。
而且……差不多就是這樣。不管這代表什麼,都無法建立自己的內部資料鏡像技術。
更新
如果您使用資料庫鏡像,只需在連線字串中指定故障轉移夥伴,請參閱將客戶端連接到鏡像資料庫。您的應用程式必須在發生故障轉移事件時處理交易一致性。故障轉移事件將突然斷開客戶端連接,並在客戶端程式碼中引發異常。任何待處理的交易都將被中止。客戶端程式碼必須重新連線、讀取持久性並從資料庫中找到的狀態復原工作。正確編寫的應用程式將優雅地處理這個問題,不會有任何問題。
鏡像始終處於離線狀態,無法存取。如果要在鏡像上執行報告,則必須拍攝資料庫快照並在快照上執行報告。快照必須定期刷新(刪除並重新建立)。看資料庫鏡像和資料庫快照。
網路層負載平衡器與鏡像無關,且不解決任何問題。
答案2
怎麼樣以上都不是?
請澄清鏡像 sql 伺服器的意思。您是否使用某種 SAN 來進行鏡像,或使用 SQL Server 的內建鏡像功能?
我知道如何在 Web 層使用 HAProxy,但為什麼要使用 SQL Server 呢? SQL Server 還有其他更多支援的 HA 選項,例如叢集、鏡像和複製。我會先調查那些。