Sql-Server

需要在兩個伺服器之間保持數據的事務一致性,需要在沒有人工干預的情況下實現這些目標

  • November 30, 2019

我收到了這個關於 MS SQL Server 2012 管理的問題,同一數據中心的兩台生產伺服器。如果發生災難性的伺服器故障或磁碟故障,您需要確保數據庫仍然可用。

您需要跨兩個伺服器保持數據的事務一致性。您需要在沒有人工干預的情況下實現這些目標。

上述問題的正確答案是

>> 在同一子網中配置的兩台伺服器 SQL Server 可用性組以同步送出可用性模式配置 <<

但我認為正確的答案應該是

> > 在同一數據中心的 Windows 故障轉移群集中配置的兩台伺服器 SQL Server 配置為群集實例<< > > >

棘手的部分在於這個要求:

如果發生災難性的伺服器故障或磁碟故障,您需要確保數據庫仍然可用。您需要跨兩個伺服器保持數據的事務一致性。您需要在沒有人工干預的情況下實現這些目標。

磁碟故障部分意味著單獨的故障轉移集群將無法工作,因為儲存與兩個節點共享。如果數據文件所在的儲存發生故障,那麼兩個節點都會受到影響。

但是,2 節點同步可用性組也不是答案,因為正如 Microsoft 自己的文件指出的那樣

如果輔助副本超過了主副本的會話超時期限,則主副本會暫時切換到該輔助副本的非同步送出模式。當輔助副本與主副本重新連接時,它們會恢復同步送出模式。

進一步閱讀“破壞數據同步的因素”部分的連結,Microsoft 詳細說明了您無法保證 2 節點 AG 在故障轉移時不會失去數據的原因。

那麼 SQL Server 2012 的正確答案是什麼?

沒有一個。如果沒有第三方工具(如 SAN 複製,即使那樣,也需要大量工作),您無法保證使用 2 個獨立的 SQL Server 2012 實現零數據失去。我猜這個問題來自某人編寫的測試或認證沒有現實世界的經驗。這不會是第一次,也不會是最後一次。

以後的版本有正確的答案嗎?

是的,SQL Server 2017 在可用性組級別引入了新的 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 設置。預設值為 0,這意味著只要主節點接收到事務,它就會被送出。您可以將其更改為 1(或更多),這意味著如果至少該數量的輔助節點沒有送出事務,則事務將失敗。

第一種情況實際上是更正確的實現。在 SQL Server 的未來版本(從 2016 年開始)中,不推薦使用標準的“故障轉移群集”模型。微軟正在通過 SQL Server 可用性組轉向 HA(高可用性)模型,該模型本質上是將鏡像和集群混合在一起(不需要見證伺服器),數據完全複製到組中的每個節點。

根據 Microsoft 專業人員的說法,故障轉移時間小於 1 秒,而標準故障轉移群集可能需要 1 分鐘以上才能成功自動故障轉移。SQL Server 可用性組將是從這一點前進的方式。

引用自:https://dba.stackexchange.com/questions/115087