教學課程:為 Linux 虛擬機器設定可用性群組接聽程式

適用於:Azure VM 上的 SQL Server

本教學課程將逐步說明如何為 Azure 中 Linux 虛擬機器 (VM) 上的 SQL Server 建立可用性群組 (AG) 接聽程式,適用於 Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES) 和 Ubuntu。

您將了解如何:

  • 在 Azure 入口網站中建立負載平衡器
  • 設定負載平衡器的後端 IP 集區
  • 建立負載平衡器的探查
  • 設定負載平衡規則
  • 在叢集中建立負載平衡器資源
  • 建立 AG 接聽程式
  • 測試接聽程式連線
  • 測試容錯移轉

注意

無偏差通訊

本發行項包含字詞「奴隸」的參考;Microsoft 將此內容中使用該字詞視為有冒犯性。 因為該字詞目前出現在軟體中,所以也會出現在本發行項中。 當軟體移除該字詞時,我們也會將其從發行項中移除。

必要條件

在 Azure 入口網站中建立負載平衡器

下列指示會帶您了解建立與設定負載平衡器和可用性群組接聽程式 (Azure VM 上的 SQL Server)文章的在 Azure 入口網站中建立和設定負載平衡器一節中的步驟 1 到 4。

建立負載平衡器

  1. 在 Azure 入口網站中,開啟包含 SQL Server 虛擬機器的資源群組。

  2. 在資源群組中,選取 [新增]。

  3. 搜尋負載平衡器,然後在搜尋結果中,選取由 Microsoft 發佈的 [負載平衡器]。

  4. [負載平衡器] 窗格上,選取 [建立]

  5. 在 [建立負載平衡器] 對話方塊中,依下列方式設定負載平衡器︰

    設定
    名稱 代表負載平衡器的文字名稱。 例如: sqlLB
    類型 內部
    虛擬網路 建立的預設虛擬網路應命名為 VM1VNET
    子網路 選取 SQL Server 執行個體所在的子網路。 預設值應為 VM1Subnet
    IP 位址指派 靜態
    私人 IP 位址 使用在叢集中建立的 virtualip IP 位址。
    訂用帳戶 使用您的資源群組所使用的訂用帳戶。
    資源群組 選取 SQL Server 執行個體所在的資源群組。
    位置 選取 SQL Server 執行個體所在的 Azure 位置。

設定後端集區

Azure 會呼叫後端位址集區 backend pool。 在此情況下,後端集區是您的 AG 中三部 SQL Server 執行個體的位址。

  1. 在資源群組中,選取您建立的負載平衡器。

  2. [設定] 中選取 [後端集區]

  3. [後端集區] 上,按一下 [新增] 以建立後端位址集區。

  4. 在 [新增後端集區] 的 [名稱] 之下,輸入後端集區的名稱。

  5. 在 [關聯性] 下,選取 [虛擬機器]。

  6. 選取環境中的每部虛擬機器,並將適當的 IP 位址與每個選項產生關聯。

    Screenshot showing how to add a backend pool.

  7. 選取 [新增]。

建立探查

探查會定義 Azure 如何確認哪一個 SQL Server 執行個體目前擁有 AG 接聽程式。 Azure 會根據在建立探查時定義的連接埠上的 IP 位址來探查服務。

  1. 在負載平衡器的 [設定] 窗格上,選取 [健全狀態探查]

  2. [健全狀態探查] 窗格中,選取 [新增]

  3. [新增探查] 窗格上設定探查。 使用下列值來設定探查:

    設定
    名稱 代表探查的文字名稱。 例如: SQLAlwaysOnEndPointProbe
    通訊協定 TCP
    通訊埠 您可以使用任何可用的連接埠。 例如: 59999
    間隔 5
    狀況不良臨界值 2
  4. 選取 [確定]。

  5. 登入您所有的虛擬機器,然後使用下列命令來開啟探查連接埠:

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure 會建立探查,然後使用它來測試那一個 SQL Server 執行個體具有 AG 的接聽程式。

設定負載平衡規則

負載平衡規則會設定負載平衡器如何將流量路由到 SQL Server 執行個體。 對此負載平衡器,您會啟用伺服器直接回傳,因為三個 SQL Server 執行個體中一次只有一個會擁有 AG 接聽程式資源。

  1. 在負載平衡器的 [設定] 窗格中,選取 [負載平衡規則]

  2. [負載平衡規則] 窗格中,選取 [新增]

  3. [新增負載平衡規則] 窗格中,設定負載平衡規則。 使用下列設定:

    設定
    名稱 代表負載平衡規則的文字名稱。 例如: SQLAlwaysOnEndPointListener
    通訊協定 TCP
    通訊埠 1433
    後端連接埠 1433. 系統會忽略此值,因為此規則使用 [浮動 IP (伺服器直接回傳)]
    探查 使用您為此負載平衡器建立之探查的名稱。
    工作階段持續性 None
    閒置逾時 (分鐘) 4
    浮動 IP (伺服器直接回傳) 已啟用

    Screenshot showing how to add a load balancing rule.

  4. 選取 [確定]。

  5. Azure 會設定負載平衡規則。 負載平衡器現已設定成將流量路由傳送到裝載 AG 接聽程式的 SQL Server 執行個體。

此時,資源群組有一個與所有 SQL Server 電腦連線的負載平衡器。 負載平衡器也包含 SQL Server AlwaysOn AG 接聽程式的 IP 位址,以便電腦回應對 AG 的要求。

建立可用性群組接聽程式資源

在 Pacemaker 中建立負載平衡器資源之前,請先建立接聽程式資源:

sudo crm configure primitive virtualip \
ocf:heartbeat:IPaddr2 \
params ip=x.y.z.a

在上一個範例中, x.y.z.a 是指負載平衡器前端 IP位址。

在叢集中建立負載平衡器資源

依照設定散發的指示進行。

  1. 登入主要虛擬機器。 我們需要建立資源來啟用 Azure 負載平衡器探查連接埠 (在我們的範例中使用 59999)。 執行以下命令:

    sudo pcs resource create azure_load_balancer azure-lb port=59999
    
  2. 建立包含 virtualipazure_load_balancer 資源的群組:

    sudo pcs resource group add virtualip_group azure_load_balancer virtualip
    

新增限制式

  1. 為了確保 Azure 負載平衡器 IP 位址和 AG 資源在相同的節點上執行,必須設定共置限制式。 執行以下命令:

    sudo pcs constraint colocation add azure_load_balancer ag_cluster-master INFINITY with-rsc-role=Master
    
  2. 建立排序限制式,以確保 AG 資源會在 Azure 負載平衡器 IP 位址之前啟動並執行。 雖然共置限制式隱含排序限制式,但此步驟會強制執行它。

    sudo pcs constraint order promote ag_cluster-master then start azure_load_balancer
    
  3. 若要驗證限制式,請執行下列命令:

    sudo pcs constraint list --full
    

    您應該會看見下列輸出:

    Location Constraints:
    Ordering Constraints:
      promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
      promote ag_cluster-master then start azure_load_balancer (kind:Mandatory) (id:order-ag_cluster-master-azure_load_balancer-mandatory)
    Colocation Constraints:
      virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
      azure_load_balancer with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-azure_load_balancer-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

建立可用性群組接聽程式

  1. 在主要節點上以 sqlcmd 或 SSMS 執行下列命令。 以 virtualip IP 位址取代下列使用的 IP 位址。

    • SQL Server 2022 及更新版本:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '0.0.0.0'
          )),
          PORT = 1433
      );
      GO
      
    • * SQL Server 2017 SQL Server 2019:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '255.255.255.255'
          )),
          PORT = 1433
      );
      GO
      
  2. 登入每個 VM 節點。 使用下列命令開啟主機檔案,並為每部機器的 ag1-listener 設定主機名稱解析。

    sudo vi /etc/hosts
    

    vi 編輯器中,輸入 i 以插入文字,並在空白行上新增 ag1-listener 的 IP。 然後,在 IP 旁的空格後面新增 ag1-listener

    <IP of ag1-listener> ag1-listener
    

    若要結束 vi 編輯器,請先按 Esc 鍵,然後輸入命令 :wq 以寫入檔案並結束。 請在每個節點上執行此動作。

測試接聽程式和容錯移轉

本節涵蓋登入 SQL Server AG 接聽程式,以及測試容錯移轉。

使用可用性群組接聽程式,測試登入 SQL Server

  1. 使用 sqlcmd,登入使用 AG 接聽程式名稱的 SQL Server 主要節點:

    • 使用先前建立的登入,並將 <YourPassword> 取代為正確的密碼。 以下範例會使用以 SQL Server 建立的 sa 登入。
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  2. 檢查您要連線的伺服器名稱。 在 sqlcmd 中執行下列命令:

    SELECT @@SERVERNAME;
    

    您的輸出應該會顯示目前的主要節點。 如果您從未測試過容錯移轉,應該會顯示 VM1

    鍵入 exit 命令,以結束 SQL Server 工作階段。

測試容錯移轉

  1. 執行下列命令,手動將主要複本容錯移轉至 <VM2> 或另一個複本。 將 <VM2> 取代為您伺服器名稱的值。

    sudo pcs resource move ag_cluster-master <VM2> --master
    
  2. 如果您檢查限制式,會看到因為手動容錯移轉而新增了另一個限制式:

    sudo pcs constraint list --full
    

    已新增識別碼為 cli-prefer-ag_cluster-master 的限制式。

  3. 使用下列命令,移除識別碼為 cli-prefer-ag_cluster-master 的限制式:

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    
  4. 使用命令 sudo pcs resource 檢查您的叢集資源,您應該會看到此時的主要執行個體為 <VM2>

    注意

    本文包含「從屬」一詞的參考,Microsoft 已不再使用該字詞。 從軟體中移除該字詞時,我們也會將其從本文中移除。

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
        Masters: [ <VM2> ]
        Slaves: [ <VM1> <VM3> ]
    Resource Group: virtualip_group
        azure_load_balancer        (ocf::heartbeat:azure-lb):      Started <VM2>
        virtualip  (ocf::heartbeat:IPaddr2):       Started <VM2>
    
  5. 使用 sqlcmd 登入使用接聽程式名稱的主要複本:

    • 使用先前建立的登入,並將 <YourPassword> 取代為正確的密碼。 以下範例會使用以 SQL Server 建立的 sa 登入。
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  6. 檢查您已連線的伺服器。 在 sqlcmd 中執行下列命令:

    SELECT @@SERVERNAME;
    

    您應該會看到現在已連線到您已進行容錯移轉的 VM。

後續步驟

若要對您的 SQL Server 執行個體使用可用性群組接聽程式,必須建立及設定負載平衡器。