教學課程:使用 HPE Serviceguard for Linux 設定三個節點的 Always On 可用性群組

適用於:SQL Server - Linux

本教學課程說明如何使用在內部部署虛擬機器 (VM) 或 Azure 型虛擬機器上執行的 HPE Serviceguard for Linux,設定 SQL Server 可用性群組。

如需 HPE Serviceguard 叢集的概觀,請參閱 HPE Serviceguard 叢集

注意

Microsoft 支援資料移動、可用性群組和 SQL Server 元件。 請連絡 HPE,以取得與 HPE Serviceguard 叢集和仲裁管理文件相關的支援。

本教學課程包含下列工作:

  • 在將成為可用性群組一部分的這三部 VM 上安裝 SQL Server
  • 在 VM 上安裝 HPE Serviceguard
  • 建立 HPE Serviceguard 叢集
  • 在 Azure 入口網站中建立負載平衡器
  • 建立可用性群組,並將範例資料庫新增至可用性群組
  • 透過 Serviceguard 叢集管理員,在可用性群組上部署 SQL Server 工作負載
  • 執行自動容錯移轉,並將節點聯結回叢集

Prerequisites

  • 在 Azure 中,建立三個以 Linux 為基礎的 VM (虛擬機器)。 若要在 Azure 中建立以 Linux 為基礎的虛擬機器,請參閱快速入門:在 Azure 入口網站中建立 Linux 虛擬機器。 部署 VM 時,請務必使用 HPE Serviceguard 支援的 Linux 發行版本。 如果您想要的話,也可以在內部部署環境中本機部署 VM。

    如需所支援發行版本的範例,請參閱 HPE Serviceguard for Linux。 如需公用雲端環境支援的詳細資訊,請洽詢 HPE。

    本教學課程中的指示已針對 HPE Serviceguard for Linux 進行驗證。 您可以從 HPE 下載試用版。

  • 在這三部虛擬機器中邏輯磁碟區掛接 (LVM) 上的 SQL Server 資料庫檔案。 請參閱 Serviceguard Linux 的快速入門指南 (HPE)

  • 確定您已在 VM 上安裝 OpenJDK JAVA 執行階段。 不支援 IBM JAVA SDK。

安裝 SQL Server

在這三部 VM 上,請根據您在本教學課程中選擇的 Linux 發行版本,依照下列其中一個步驟安裝 SQL Server 和工具。

Red Hat Enterprise Linux (RHEL)

SUSE Linux Enterprise Server (SLES)

完成此步驟之後,將會參與可用性群組的三部 VM 上應該有安裝完成的 SQL Server 服務和工具。

在 VM 上安裝 HPE Serviceguard

在此步驟中,請於這三部 VM 上安裝 HPE Serviceguard for Linux。 下表描述每個伺服器在叢集中所扮演的角色。

VM 數目 HPE Serviceguard 角色 Microsoft SQL Server 可用性群組複本角色
1 HPE Serviceguard 叢集節點 主要複本
1 或多個 HPE Serviceguard 叢集節點 次要複本
1 HPE Serviceguard 仲裁伺服器 僅限組態複本

注意

請參閱 HPE 的這段影片,說明 如何透過 UI 安裝和設定 HPE Serviceguard 叢集。

若要安裝 Serviceguard,請使用 cminstaller 方法。 下列連結提供特定的指示:

完成 HPE Serviceguard 叢集的安裝之後,您可以在主要複本節點的 TCP 通訊埠 5522 上啟用叢集管理入口網站。 下列步驟可將規則新增至防火牆以允許 5522。 下列命令適用於 Red Hat Enterprise Linux (RHEL)。 您需要對其他發行版本執行類似的命令:

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

建立 HPE Serviceguard 叢集

請依照下列指示設定並建立 HPE Serviceguard 叢集。 在此步驟中,您也可設定仲裁伺服器。

  1. 在第三個節點上設定 Serviceguard 仲裁伺服器。 請參閱 Configure_QS 一節。
  2. 在其他兩個節點上設定並建立 Serviceguard 叢集。 請參閱 Configure_and_create_Cluster 一節。

注意

建立 VM 時,您可以透過從 Azure VM 市集新增 HPE Serviceguard for Linux (SGLX) 延伸模組來略過 HPE Serviceguard 叢集和仲裁的手動安裝。

建立可用性群組及新增範例資料庫

在此步驟中,建立具有兩個 (或以上) 同步複本和僅限組態複本的可用性群組,這可提供資料保護,還可能會提供高可用性。 下圖呈現這個架構:

Screenshot showing how the primary replica synchronizes user data and configuration data with the secondary replica. The primary replica only synchronizes configuration data with the configuration only replica. The configuration only replica doesn't have user data replicas.

  1. 將使用者資料同步複寫到次要複本。 它也包含可用性群組的設定中繼資料。

  2. 同步複寫可用性群組的設定中繼資料。 它不包含使用者資料。

如需詳細資訊,請參閱兩個同步複本和僅限組態複本

若要建立可用性群組,請遵循下列步驟:

  1. 在所有 VM 上 (包括僅限組態複本) 啟用可用性群組並重新啟動 mssql-server
  2. 啟用 AlwaysOn_health 事件工作階段 (選用)
  3. 在主要 VM 上建立憑證
  4. 在次要伺服器上建立憑證
  5. 在複本上建立資料庫鏡像端點
  6. 建立可用性群組
  7. 聯結次要複本
  8. 將資料庫新增至可用性群組

啟用可用性群組並重新啟動 mssql-server

在所有託管 SQL Server 執行個體的節點上啟用可用性群組。 然後,重新啟動 mssql-server。 在這三個節點上執行下列指令碼:

sudo /opt/mssql/bin/mssql-conf
set hadr.hadrenabled 1 sudo systemctl restart mssql-server

啟用 AlwaysOn_health 事件工作階段 (選用)

當您針對 Always On 可用性群組進行疑難排解時,您可以選擇啟用 Always On 可用性群組擴充事件協助診斷根本原因。 在每個 SQL Server 執行個體上執行下列命令:

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

在主要 VM 上建立憑證

下列 Transact-SQL 指令碼會建立主要金鑰和憑證。 然後它會備份憑證,並使用私密金鑰保護檔案。 請以強式密碼更新指令碼。 連線到主要 SQL Server 執行個體,然後執行下列 Transact-SQL 指令碼:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';

BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY
    ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
      ENCRYPTION BY PASSWORD = '<Private_Key_Password>' );

此時,主要 SQL Server 複本含有一個位於 /var/opt/mssql/data/dbm_certificate.cer 的憑證,以及一個位於 var/opt/mssql/data/dbm_certificate.pvk 的私密金鑰。 將這兩個檔案複製到將裝載可用性複本的所有伺服器上的相同位置。 使用 mssql 使用者,或授與 mssql 使用者存取這些檔案的權限。

例如,在來源伺服器上,下列命令會將檔案複製到目標電腦。 將 node2 值取代為執行次要 SQL Server 執行個體的主機名稱。 也請在僅限組態複本上複製憑證,同時在該節點上執行下列命令。

cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/

現在,請在執行次要執行個體的次要 VM 和 SQL Server 的僅限組態複本上執行下列命令,讓 mssql 使用者可以擁有複製的證書:

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

在次要伺服器上建立憑證

下列 Transact-SQL 指令碼會從您在 SQL Server 主要複本上建立的備份來建立主要金鑰和憑證。 請以強式密碼更新指令碼。 解密密碼與您在上一個步驟中用來建立 .pvk 檔案的密碼相同。 若要建立憑證,請在除了僅限組態複本之外的所有次要伺服器上執行下列指令碼:

CREATE MASTER KEY ENCRYPTION BY PASSWORD =
'<Master_Key_Password>';

CREATE CERTIFICATE dbm_certificate FROM FILE =
'/var/opt/mssql/data/dbm_certificate.cer'
WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
DECRYPTION BY PASSWORD = '<Private_Key_Password>' );

在複本上建立資料庫鏡像端點

在主要和次要複本上,執行下列命令以建立資料庫鏡像端點:

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING
        (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

注意

5022 是用於資料庫鏡像端點的標準連接埠,但您可以將其變更為任何可用的連接埠。

在僅限組態複本上,使用下列命令建立資料庫鏡像端點,請注意,這裡的 Role 值會設定為 WITNESS,這是僅限組態複本所需的內容。

CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;

建立可用性群組

在主要複本執行個體上,執行下列命令。 這些命令會建立名為 ag1 且具有 EXTERNAL cluster_type 的可用性群組,並將建立資料庫權限授與可用性群組。

執行下列指令碼之前,請使用您在先前步驟中建立的 VM 名稱取代 <node1><node2><node3> (僅限組態複本) 預留位置。

CREATE AVAILABILITY GROUP [ag1]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR REPLICA ON
    N'<node1>' WITH (
        ENDPOINT_URL = N'tcp://<node1>:<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),

    N'<node2>' WITH (
        ENDPOINT_URL = N'tcp://<node2>:\<5022>',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    
    N'<node3>' WITH (
        ENDPOINT_URL = N'tcp://<node3>:<5022>',
        AVAILABILITY_MODE = CONFIGURATION_ONLY
        );
          
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

聯結次要複本

在所有次要複本上執行下列命令。 這些命令會將次要複本聯結至具有主要複本的 ag1 可用性群組,並將建立資料庫存取權提供給 ag1 可用性群組。

ALTER AVAILABILITY GROUP [ag1]
JOIN WITH (CLUSTER_TYPE = EXTERNAL);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO

將資料庫新增至可用性群組

連線至主要複本,然後執行下列 T-SQL 命令以執行下列動作:

  1. 建立名為 db1 的範例資料庫,這將會新增至可用性群組。
  2. 將資料庫的復原模式設定為完整。 可用性群組中的所有資料庫都需要完整復原模式。
  3. 備份資料庫。 資料庫至少需要有一個完整備份,您才能將其新增至可用性群組。
-- creates a database named db1
CREATE DATABASE [db1];
GO

-- set the database in full recovery model
ALTER DATABASE [db1] SET RECOVERY FULL; 
GO

-- backs up the database to disk
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO

-- adds the database db1 to the AG
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
GO

成功完成先前的步驟之後,您可以看到已建立 ag1 可用性群組,並將三個 VM 新增為具有一個主要複本、一個次要複本以及一個僅限組態複本的複本。 ag1 包含一個資料庫。

部署 SQL Server 可用性群組工作負載 (HPE 叢集管理員)

在 HPE Serviceguard 中,透過 Serviceguard 叢集管理員 UI 在可用性群組上部署 SQL Server 工作負載。

使用 Serviceguard 管理員圖形化使用者介面,透過 Serviceguard 叢集部署可用性群組工作負載,並啟用高可用性 (HA)、災害復原 (DR)。 請參閱保護 Linux 上的 Microsoft SQL Server 以實作 Always On 可用性群組一節。

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

針對 Azure 雲端中的部署,HPE Serviceguard for Linux 需要負載平衡器才能啟用用戶端與主要複本的連線,以替代傳統 IP 位址。

  1. 在 Azure 入口網站中,開啟包含 Serviceguard 叢集節點或虛擬機器的資源群組。

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

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

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

  5. 如下所示設定負載平衡器:

    設定
    名稱 負載平衡器名稱。 例如: SQLAvailabilityGroupLB
    類型 內部
    SKU 基本或標準
    虛擬網路 用於 VM 複本的 VNet
    子網路 託管 SQL Server 執行個體的子網路
    IP 位址指派 靜態
    私人 IP 位址 在子網路內建立私人 IP
    訂用帳戶 選擇相關的訂用帳戶
    資源群組 選擇相關的資源群組
    地點 選取與 SQL 節點相同的位置

設定後端集區

後端集區是 Serviceguard 叢集設定所在的兩個執行個體的位址。

  1. 在資源群組中,選取您建立的負載平衡器。
  2. 瀏覽至 [設定] > [後端集區],然後選取 [新增] 以建立後端位址集區。
  3. 在 [新增後端集區] 的 [名稱] 下,輸入後端集區的名稱。
  4. 在 [關聯性] 下,選取 [虛擬機器]。
  5. 選取環境中的虛擬機器,並將適當的 IP 位址與每個選項產生關聯。
  6. 選取 [新增]。

建立探查

探查可定義 Azure 如何驗證哪一個 Serviceguard 叢集節點是主要複本。 Azure 會根據在建立探查時定義的連接埠上的 IP 位址來探查服務。

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

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

  3. 使用下列值來設定探查:

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

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

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

Azure 會建立探查,然後使用它來測試可用性群組的主要複本執行個體執行所在的 Serviceguard 節點。 請記住設定的連接埠 (59999),這是在 Serviceguard 叢集中部署 AG 所需的連接埠。

設定負載平衡規則

負載平衡規則可設定負載平衡器如何將流量路由至 Serviceguard 節點 (叢集中的主要複本)。 針對此負載平衡器,請啟用伺服器直接回傳,因為一次只有一個 Serviceguard 叢集節點可以是主要複本。

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

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

  3. 使用下列設定,設定負載平衡規則:

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

  5. Azure 會設定負載平衡規則。 現在,負載平衡器已設定為將流量路由至作為叢集中主要複本執行個體的 Serviceguard 節點。

記下負載平衡器的前端 IP 位址 "LbReadWriteIP",這是在 Serviceguard 叢集中部署 AG 所必需的。

此時,資源群組有一個與所有 Serviceguard 節點連線的負載平衡器。 負載平衡器還包含一個 IP 位址,供用戶端連線至叢集中的主要複本執行個體,以便任何作為主要複本的機器都可以回應可用性群組的要求。

執行自動容錯移轉,並將節點聯結回叢集

若要進行自動容錯移轉測試,您可以關閉主要複本 (關閉電源),這會重現主要節點突然無法使用的情況。 預期的行為如下所示:

  1. 叢集管理員會將可用性群組中的其中一個次要複本升階為主要。
  2. 失敗的主要複本會在備份之後自動聯結叢集。 叢集管理員會將其升階至次要複本。

針對 HPE Serviceguard,請參閱 Testing the setup for failover readiness 一節