Sql-Server

可用性組多個實例、多個偵聽器

  • December 7, 2020

在我的工作環境中,我有兩台數據庫機器:

  • DB01
  • DB02

每台數據庫機器都有三個 SQL Server 實例:

  • 微軟SQL伺服器
  • 光纖光柵
  • 中央

我已經設法為兩台機器上的第一個 SQL Server 實例設置了帶有 SQL Server 偵聽器的可用性組,並創建了 SQL Server 複製,它工作正常。

現在,我想在兩台伺服器上為第二個 SQL Server 實例 FBG 設置一個新的可用性組,我做到了,但問題是當我為第二個可用性組創建偵聽器時,它適用於第一個可用性組,我必須鍵入偵聽器名稱/實例名稱才能使其正常工作。

我希望僅鍵入可用性組偵聽器名稱。例如:

  • 第一個可用性組名稱是 AVG01 及其偵聽器 AvgList01
  • 第二個可用性組名稱是 AVG02 及其偵聽器 AvgList02

當我使用名稱 AvgList02 連接到 AVG02 時,它會將我連接到 AVG01,儘管我沒有使用它的偵聽器名稱。

我必須以這種方式使用它才能使其正常工作 AvgList02\FBG 其中 FBG 是 SQL Server 實例的名稱。

問題

問題出在哪裡,如何解決?

當我使用名稱 AvgList02 連接到 AVG02 時,它會將我連接到 AVG01,儘管我沒有使用它的偵聽器名稱。問題出在哪裡,如何解決?

考慮埠配置通常起關鍵作用。在您的情況下,很可能會發生以下情況。

  1. 兩個可用性組的主副本是同一個節點(DB01 或 DB02)
  2. 每個 SQL Server 中必須執行 SQL Browser 服務
  3. 必須為偵聽器分配預設 SQL 埠 (1433)

當客戶端嘗試連接偵聽器名稱時,IP 將基於 DNS 響應(在多子網第一個成功的 IP 綁定中)進行綁定,這導致客戶端連接指向主副本。

從 AvgList02 到 AG01 (AVG01) 的連接:

當請求命中主副本時(在從偵聽器名稱綁定 IP 之後),下一部分是埠(根據第 3 點考慮錯誤的埠),將建立到在特定上執行的服務的連接埠號 (1433)。

從 AvgList02\FBG 到 AG02 (AVG02) 的連接:

與上述情況類似(在從偵聽器名稱綁定 IP 之後),因為FBG連接 SQL 瀏覽器中提到的實例名稱 ( ) 將採取行動將連接與與實例匹配的相應 SQL 服務綁定連接中提到的名稱。

總結:

我個人建議使用 SQL Server 的自定義埠,特別是當多個實例在同一伺服器上執行時,並禁用 SQL Browser 服務,讓每個連接在連接字元串中硬編碼自定義埠號來連接各自的實例,而不依賴於 SQL Browser 服務。

對於可用性組實施,請考慮自定義埠並避免以下部分中的埠衝突:

  1. SQL 埠(預設值:1433)
  2. 端點埠(預設:5022)
  3. 偵聽器埠(無預設值)

讓我試著回答三個問題;

  1. >

我希望僅鍵入可用性組偵聽器名稱。例如:

第一個可用性組名稱是 AVG01 及其偵聽器 AvgList01

第二個可用性組名稱是 AVG02 及其偵聽器 AvgList02

為您的命名 SQL Server 實例FBG創建一個名為AvgList02的別名, 因為它是 AvgList01 工作,因此無需創建別名

  1. >

當我使用名稱 AvgList02 連接到 AVG02 時,它會將我連接到 AVG01,儘管我沒有使用它的偵聽器名稱。

這可能是由於 SQL Server 配置管理器中預設實例協議的 TCP/IP 屬性造成的。預設情況下,Listen All參數設置為 Yes,如果我沒記錯的話,這將允許此伺服器上的所有 IP 地址(包括 AvgList02)能夠使用TCP/IP 屬性的IPALL選項卡中指定的埠連接到此實例

  1. >

我必須以這種方式使用它才能使其正常工作 AvgList02\FBG 其中 FBG 是 SQL Server 實例的名稱。

這是連接到命名實例的可用選項之一。如果您不想這樣連接,您可以創建別名(更簡單的選項)或查看您的 TCP/IP 配置

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