適用於:Linux 上的 SQL Server
本教學課程說明如何使用在內部部署虛擬機器 (VM) 或 Azure 型虛擬機器上執行的 HPE Serviceguard for Linux,設定 SQL Server 可用性群組。
關於 HPE Serviceguard 叢集的概述,請參閱 HPE Serviceguard 叢集。
注意
Microsoft 支援資料移動、可用性群組和 SQL Server 元件。 請連絡 HPE,以取得與 HPE Serviceguard 叢集和仲裁管理文件相關的支援。
本教學課程包含下列工作:
- 在你打算納入可用性群組的三台虛擬機上安裝 SQL Server。
- 在虛擬機上安裝 HPE Serviceguard。
- 建立 HPE Serviceguard 叢集。
- 在 Azure 入口網站建立負載平衡器。
- 建立可用性群組,並將範例資料庫加入可用性群組。
- 透過 Serviceguard 叢集管理器部署 SQL Server 工作負載到可用性群組。
- 執行自動故障轉移並讓節點重新加入叢集。
先決條件
在 Azure 中,建立三個以 Linux 為基礎的 VM (虛擬機器)。 若要在 Azure 中建立以 Linux 為基礎的虛擬機器,請參閱快速入門:在 Azure 入口網站中建立 Linux 虛擬機器。 部署 VM 時,請務必使用 HPE Serviceguard 支援的 Linux 發行版本。 如果你願意,也可以在本地部署虛擬機。
如需所支援發行版本的範例,請參閱 HPE Serviceguard for Linux。 如需公用雲端環境支援的詳細資訊,請洽詢 HPE。
本教學課程中的指示已針對 HPE Serviceguard for Linux 進行驗證。 您可以從 HPE 下載試用版。
在這三部虛擬機器中邏輯磁碟區掛接 (LVM) 上的 SQL Server 資料庫檔案。 請參閱 Serviceguard Linux(HPE)快速入門指南。
確保你的虛擬機上安裝了 OpenJDK Java 執行環境。 不支援 IBM JAVA SDK。
安裝 SQL Server
在這三個虛擬機上,請依照你選擇的 Linux 發行版,依照以下段落中的步驟操作。 步驟是安裝 SQL Server 和工具。
Red Hat Enterprise Linux (RHEL)
SUSE Linux Enterprise Server (SLES)
注意
從 SQL Server 2025(17.x)開始,SUSE Linux Enterprise Server(SLES)不再支援。
完成此步驟後,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 方法。 下列連結提供特定的指示:
- 在兩個節點上安裝 Serviceguard for Linux。 請參閱 Install_serviceguard_using_cminstaller 一節。
- 在第三個節點上安裝 Serviceguard 仲裁伺服器。 請參閱 Install_QS_from_the_ISO 一節。
完成 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 叢集。 在此步驟中,你也會設定法定人數伺服器。
- 在第三個節點上設定 Serviceguard 仲裁伺服器。 請參閱 Configure_QS 一節。
- 在其他兩個節點上設定並建立 Serviceguard 叢集。 請參閱 Configure_and_create_Cluster 一節。
注意
你可以在建立虛擬機時,從 Azure VM 市集新增 HPE Serviceguard for Linux (SGLX) 擴充功能 ,繞過手動安裝 HPE Serviceguard 叢集和法定人數。
建立可用性群組及新增範例資料庫
在此步驟中,你會建立一個包含兩個或以上同步副本及一個僅設定副本的可用性群組,該副本提供資料保護,並可能提供高可用性。 下圖呈現這個架構:
將使用者資料同步複寫到次要複本。 它也包含可用性群組的設定中繼資料。
同步複寫可用性群組的設定中繼資料。 它不包含使用者資料。
如需詳細資訊,請參閱可用性群組組態的高可用性和資料保護。
若要建立可用性群組,請遵循下列步驟:
- 在所有 VM 上 (包括僅限組態複本) 啟用可用性群組並重新啟動 mssql-server。
-
啟用
AlwaysOn_health事件工作階段 (選用) - 在主要 VM 上建立憑證
- 在次要伺服器上建立憑證
- 在複本上建立資料庫鏡像端點
- 建立可用性群組
- 聯結次要複本
- 將資料庫新增至可用性群組
啟用可用性群組並重新啟動 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 可用性群組延伸事件,以協助排除可用性群組故障時的根本原因診斷。 在每個 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/
現在,在執行次要實例及僅設定的 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>'
);
在上一個範例中,將 取代 <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 的可用性群組,並將建立資料庫權限授與可用性群組。
在執行以下腳本之前,請將佔位符 <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 命令以執行下列動作:
建立一個名為
db1的範例資料庫,並加入可用性群組。CREATE DATABASE [db1]; GO將資料庫的復原模式設定為完整。 同一可用性群組中的所有資料庫都需要完整的復原模型。
ALTER DATABASE [db1] SET RECOVERY FULL;備份資料庫。 資料庫至少需要有一個完整備份,您才能將其新增至可用性群組。
BACKUP DATABASE [db1] TO DISK = N'/var/opt/mssql/data/db1.bak';將資料庫設定為完整恢復模式。
ALTER DATABASE [db1] SET RECOVERY FULL;把資料庫備份到硬碟。
BACKUP DATABASE [db1] TO DISK = N'/var/opt/mssql/data/db1.bak';把資料庫
db1加入可用性群組。ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
完成前幾步後,你會看到一個 ag1 可用群組。 這三個虛擬機器會以副本的形式加入,包含一個主要副本、一個次要副本,以及一個僅配置副本。
ag1 包含一個資料庫。
部署 SQL Server 可用性群組工作負載 (HPE 叢集管理員)
在 HPE Serviceguard 中,透過 Serviceguard 叢集管理員 UI 在可用性群組上部署 SQL Server 工作負載。
使用 Serviceguard 管理員圖形化使用者介面,透過 Serviceguard 叢集部署可用性群組工作負載,並啟用高可用性 (HA)、災害復原 (DR)。 請參閱保護 Linux 上的 Microsoft SQL Server 以實作 Always On 可用性群組一節。
在 Azure 入口網站中建立負載平衡器
在 Azure Cloud 部署時,HPE Serviceguard for Linux 需要負載平衡器來啟用用戶端與主要副本的連線,以取代傳統 IP 位址。
在 Azure 入口網站中,開啟包含 Serviceguard 叢集節點或虛擬機器的資源群組。
在資源群組中,選取 [新增]。
搜尋「負載平衡器」,然後在搜尋結果中,選取由 Microsoft 發佈的 [負載平衡器]。
在 [負載平衡器] 窗格上,選取 [建立]。
如下所示設定負載平衡器:
設定 值 名稱 負載平衡器名稱。 例如: SQLAvailabilityGroupLB。類型 內部 SKU 基本或標準 虛擬網路 用於 VM 複本的虛擬網路 子網路 託管 SQL Server 執行個體的子網路 IP 位址指派 靜態 私人 IP 位址 在子網路內建立私人 IP 訂用帳戶 選擇相關的訂用帳戶 資源群組 選擇相關的資源群組 地點 選取與 SQL 節點相同的位置
設定後端集區
後端集區是 Serviceguard 叢集設定所在的兩個執行個體的位址。
- 在資源群組中,選取您建立的負載平衡器。
- 到 設定>的後端池,選擇 新增 以建立後端位址池。
- 在 [新增後端集區] 的 [名稱] 下,輸入後端集區的名稱。
- 在 [關聯性] 中,選取 [虛擬機器]。
- 選取環境中的虛擬機器,並將適當的 IP 位址與每個選項產生關聯。
- 選取 [新增]。
建立探查
探查可定義 Azure 如何驗證哪一個 Serviceguard 叢集節點是主要複本。 Azure 會根據在建立探查時定義的連接埠上的 IP 位址來探查服務。
在 [負載平衡器設定] 窗格上,選取 [健全狀態探查]。
在 [健全狀態探查] 窗格中,選取 [新增]。
使用下列值來設定探查:
設定 值 名稱 代表探查的名稱。 例如: SQLAGPrimaryReplicaProbe。通訊協定 TCP 通訊埠 您可以使用任何可用的連接埠。 例如 59999。 間隔 5 狀況不良臨界值 2 選取 [確定]。
登入您所有的虛擬機器,然後使用下列命令來開啟探查連接埠:
sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent sudo firewall-cmd --reload
Azure 會建立探查,然後使用它來測試可用性群組的主要複本執行個體執行所在的 Serviceguard 節點。 記得你設定的埠號(59999),這是 部署 Serviceguard 叢集中 AG 所必須的。
設定負載平衡規則
負載平衡規則可設定負載平衡器如何將流量路由至 Serviceguard 節點 (叢集中的主要複本)。 針對此負載平衡器,請啟用伺服器直接回傳,因為一次只有一個 Serviceguard 叢集節點可以是主要複本。
在 負載平衡器設定中,選擇 負載平衡規則。
在 負載平衡規則中,選擇 新增。
使用下列設定,設定負載平衡規則:
設定 值 名稱 代表負載平衡規則的名稱。 例如: SQLAGPrimaryReplicaListener。通訊協定 TCP 通訊埠 1433 後端連接埠 1433。系統會忽略此值,因為此規則使用 [浮動 IP]。 探查 使用您為此負載平衡器建立之探查的名稱。 工作階段持續性 沒有 閒置逾時 (分鐘) 4 浮動 IP 已啟用 選取 [確定]。
Azure 會設定負載平衡規則。 現在,負載平衡器已設定為將流量路由至作為叢集中主要複本執行個體的 Serviceguard 節點。
請注意負載平衡器的前端 IP 位址 LbReadWriteIP,這是你需要用於在 Serviceguard 叢集中部署 AG 的。
此時,資源群組有一個與所有 Serviceguard 節點連線的負載平衡器。 負載平衡器還包含一個 IP 位址,供用戶端連線至叢集中的主要複本執行個體,以便任何作為主要複本的機器都可以回應可用性群組的要求。
執行自動容錯移轉,並將節點聯結回叢集
在執行自動故障轉移測試時,先將主要複本關機並離線。 此動作會複製主節點突然無法使用的情況。 預期的行為如下所示:
叢集管理員會將可用性群組中的其中一個次要複本升階為主要。
失敗的主要復本會在叢集重新啟動後自動加入叢集。 叢集管理員會將它升階為次要複本。
關於 HPE Serviceguard,請參見 「測試故障轉移準備的設置」。