Windows-Server-2008

使用 SQL Server 2008 R2 Web 版實現自動故障轉移

  • May 27, 2011

我正在嘗試為在 Windows 2008 R2 Web 版/SQL Server 2008 R2 Web 版上執行的 ASP.NET MVC 網站實現自動故障轉移。我知道開箱即用不支持此功能,但我必須使用目前可用的軟體許可證。

通過自動故障轉移,我的意思是在發生災難時,輔助伺服器應該啟動主伺服器數據庫中的所有數據。如果這不是一個選項,我也對“所有數據減去過去 5 分鐘內寫入數據庫的任何數據”感到滿意。

如有必要,我很樂意切換回主伺服器。

到目前為止,這是我想出的:

  • 以非常短的時間間隔(5 分鐘)將日誌從主伺服器的數據庫傳送到輔助伺服器。數據庫不是太大(<50 MB)並且寫入很少,所以希望這不會對性能產生很大影響。我更喜歡鏡像,但 SQL Server Web 版不支持
  • 始終將網站部署到兩台伺服器
  • 使用 DnsMadeEasy (dnsmadeeasy.com) 監控主伺服器並在主伺服器出現故障時動態切換到輔助伺服器
  • 在輔助節點上執行一個服務任務,每分鐘監控一次 dns 條目。如果它指向輔助,則嘗試再觸發一次日誌傳送執行(以防主 Web 伺服器已關閉,但主數據庫仍在執行)。最後但並非最不重要的一點是停用日誌傳送。

你怎麼看?有沒有更簡單的方法(不使用不同的數據庫或云解決方案)?

謝謝,

阿德里安

根據此處的高可用性資訊,Web 版的唯一選擇是日誌傳送。(複製也不是一種選擇,儘管我只建議在有限的情況下這樣做,因為它對應用程序的數據庫架構非常具有侵入性。)

話雖如此,如果您可以容忍幾分鐘的數據失去,日誌傳送將非常棒。

然而,“自動”是冒險的。需要記住的一些事項: 日誌傳送故障轉移不是自動的。“監控伺服器”只是監控,出現問題時不採取行動。某事或某人將不得不決定原始伺服器已關閉並且故障轉移伺服器上的數據庫應該退出恢復。您可以編寫一個程序來執行此操作,但如果您有 24x7 全天候監控,則需要依賴人工來執行此操作,這會使五分鐘的停機時間視窗非常不舒服。

無論你有什麼工作(無論是“管理”的東西,比如備份和重新索引或特定於你的應用程序的東西)都應該存在於兩台伺服器上,但它們不應該在故障轉移上執行,直到你需要它。如果您有大量工作,您將需要某種自動化方式來啟用/禁用它們。最近有一篇關於這個的文章,我現在找不到它,但你應該可以通過Google搜尋找到一些可以給你想法的東西。

同樣適用於包、連結伺服器和任何其他伺服器級別的東西。這些對象應始終位於兩台伺服器上,並且您不能將這些對象的更改從主伺服器“記錄”到故障伺服器。對於復雜的伺服器配置,在兩台伺服器上保持相同可能是一項需要大量時間或某些軟體的任務。

您需要確保兩台伺服器上的登錄名、密碼和 SID 匹配。否則,您的 Web 應用程序在啟動時可能無法訪問故障轉移伺服器上的數據庫。如果您對應用程序的登錄使用域安全性,這會更容易,因為您無需擔心 SID。如果您使用 SQL Server 安全性,則需要更加小心。

主伺服器和故障轉移伺服器將具有不同的主機名。您將需要一種方法將 Web 應用程序的數據源從 SQLServer A 更改為 SQLServer B。我們使用 DNS C 名稱,因此我們可以更新 DNS 中的條目,而不是更新 Web 伺服器上的文件.

自然,您想在真正需要它之前對其進行測試。

如果您計劃中斷每月一次的 Windows 更新檔程序,您應該將手動故障轉移集成到修補伺服器的過程中。這將最大限度地減少應用程序的停機時間,測試故障轉移過程並為任何工作人員提供現實的練習。

由於實際的緊急情況,您可能會因修補視窗和類似的東西而進行故障轉移的次數多於故障轉移。

手動故障轉移測試您的過程,因此您知道在真正的緊急情況下是否可以工作。它還迫使您在另一個方向重新設置日誌傳送,如果您有一個大型數據庫,這可能會花費大量時間。

引用自:https://serverfault.com/questions/274456