Sql-Server

如何設置SQL主動/主動集群實現藍/綠實例切換?

  • August 21, 2021

我想知道是否有人曾經使用多實例集群(nee ‘Active/Active’)來實現藍/綠(或 A/B)部署方案,以及配置它的最佳方式是什麼(使用 SQL 2012 / Windows 2008 R2)?

具體來說,我想要實現的場景是能夠在客戶端或 SQL 實例不知道的情況下在客戶端連接到哪個集群實例之間進行切換(我強調我不是在談論節點故障轉移)。我設想實現這一目標的最佳方法是:

  • 設置 2 個節點集群,每個集群都有 InstanceA 和 InstanceB 實例
  • 將 InstanceA 和 InstanceB 都配置為監聽*,就好像它們是*其集群地址上的預設實例一樣(假設集群上的每個實例都有自己的唯一 IP)
  • 使用 DNS 切換客戶端實際連接的虛擬地址。

這應該有望使我能夠做到以下幾點:

  • 將數據庫部署到實例 A,並讓客戶端通過 DNS 別名連接到它*,就像預設實例一樣*
  • 將新版本的數據庫部署到實例 B
  • 審查新版本的數據庫(顯式連接到 cluster\InstanceB)
  • 重定向 DNS 別名以指向實例 B 的集群名稱
  • 客戶端現在連接到 InstanceB 卻沒有意識到任何改變
  • 在真正的中斷中,兩個實例仍然可以故障轉移到另一個節點

加入點,似乎這應該是可能的:

…但我從未見過完整的例子。有人做過嗎?上面的建議會起作用嗎?我錯過了什麼?

您要做的基本上是執行兩個實例,您可以在它們之間重定向客戶端。無需在故障轉移群集中執行此操作,因為這對您沒有任何幫助。這樣做只需要您設置兩個獨立的 SQL Server 實例,每個實例位於單獨的 Windows 伺服器上。然後在 DNS 中設置一個 CNAME 並使用它來將人們指向正確的 SQL 實例。

現在解決一些問題。

  1. 兩個實例之間的數據不會同步。
  2. DNS 需要時間在客戶端電腦的本地記憶體上進行複制和更新,因此您最終會得到連接到兩個系統的使用者。

更好的解決方案是在進行架構更改發布之前拍攝數據庫的快照。如果發布成功,請刪除快照。如果發布失敗並且您必須回滾,則需要從快照中恢復數據庫。這將很快,但是在回滾發生時會出現中斷。

你要找的基本上是行不通的。

我看到您提出的一個問題是,在使用集群時,您只能擁有 1 個預設實例,而其餘集群實例需要唯一的實例名稱。如果您嘗試使用 DNS 將應用程序路由到“活動/活動”數據庫,這將導致問題,因為在嘗試 SQL 客戶端連接啟動時,DNS 條目將不知道導致問題的埠/實例名稱。

如果您想使用 DNS 將連接定向到伺服器實例 - 兩個實例都需要配置為預設實例或使用相同的埠\實例名稱。如果您想使用故障轉移集群,這將需要兩個單獨的集群 - 再次由於實例名稱在該集群上的實例中必須是唯一的限制。

或者,您可以查看 SQL 別名(http://www.mssqltips.com/sqlservertip/1620/how-to-setup-and-use-a-sql-server-alias/)以實現您正在查看的相同想法與 DNS 條目。此選項的挑戰是必須在直接連接到數據庫的每台客戶端電腦上設置別名。為了簡化將客戶端引導到新版本數據庫所花費的管理時間,然後以程式方式更改每台客戶端電腦上的別名。我相信別名儲存在系統資料庫中,因此應該可以使用 powershell 腳本更改該別名。

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