教程 - 使用适用于 Linux 的 HPE Serviceguard 设置三节点 Always On 可用性组

本教程介绍如何使用在本地虚拟机 (VM) 上或基于 Azure 的虚拟机中运行的适用于 Linux 的 HPE Serviceguard 配置 SQL Server Always On 可用性组。

有关 HPE Serviceguard 群集的概述,请参阅 HPE Serviceguard 群集

注意

Microsoft 支持数据移动、可用性组和 SQL Server 组件。 请联系 HPE 以获取与 HPE Serviceguard 群集和仲裁管理文档相关的支持。

本教程包含以下任务:

  • 在三个 VM(将构成可用性组的一部分)上都安装 SQL Server
  • 在 VM 上安装 HPE Serviceguard
  • 创建 HPE Serviceguard 群集
  • 创建可用性组,并将示例数据库添加到可用性组
  • 通过 Serviceguard 群集管理器在可用性组上部署 SQL Server 工作负载
  • 执行自动故障转移,并将节点加入回群集

先决条件

  • 在 Azure 中,创建三个基于 Linux 的 VM(虚拟机)。 若要在 Azure 中创建基于 Linux 的虚拟机,请参阅快速入门:在 Azure 门户中创建 Linux 虚拟机。 部署 VM 时,请确保使用 HPE Serviceguard 支持的 Linux 分发版。 如果需要,还可以在本地环境中本地部署 VM。

    如需受支持的分发的示例,请参阅适用于 Linux 的 HPE Serviceguard。 请参阅 HPE,获取有关对公有云环境的支持的信息。

    本教程中的说明已针对适用于 Linux 的 HPE Serviceguard 进行验证。 可从 HPE 下载试用版。

  • 三个虚拟机的逻辑卷装载 (LVM) 上的 SQL Server 数据库文件。 请参阅 Serviceguard Linux (HPE) 快速入门指南

  • 确保 VM 上已安装 OpenJDK java 运行时。

    注意

    不支持 IBM java sdk。

安装 SQL Server

在这三个 VM 上,都请根据你在本教程中选择的 Linux 分发版,按照以下步骤之一安装 SQL Server 和工具。

RHEL

SLES

完成此步骤后,应在要加入可用性组的三个 VM 上都安装 SQL Server 服务和工具。

在 VM 上安装 HPE Serviceguard

在此步骤中,在三个 VM 上都安装适用于 Linux 的 HPE Serviceguard。 下表描述了每个服务器在群集中扮演的角色。

VM 数量 HPE Servicguard 角色 Microsoft SQL Server 可用性组副本角色
1 HPE Serviceguard 群集节点 主副本
大于等于 1 HPE Serviceguard 群集节点 辅助副本
1 HPE Serviceguard 仲裁服务器 仅配置副本

若要安装 Serviceguard,请使用 cminstaller 方法。 以下链接提供了具体说明:

Serviceguard 群集和 Serviceguard 仲裁服务器

完成 HPE Serviceguard 群集的安装后,可以在主要副本节点的 TCP 端口 5522 上启用群集管理门户。 以下步骤会向防火墙添加一条规则来允许 5522,下面的命令适用于 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”部分。

创建可用性组并添加示例数据库

在此步骤中,创建具有两个(或更多)同步副本和一个仅配置副本的可用性组,该可用性组除了提供数据保护,还可以提供高可用性。 下图呈现了此体系结构:

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 does not have user data replicas.

  1. 用户数据到次要副本的同步复制。 它还包括可用性组配置元数据。

  2. 可用性组配置元数据的同步复制。 它不包括用户数据。

有关更多详细信息,请参阅两个同步副本和一个仅配置副本

若要创建可用性组,请执行以下步骤:

  1. 在所有 VM(包括仅配置副本)上启用 AlwaysOn 可用性组并重启 mssql-server
  2. 启用 事件会话(可选)
  3. 在主 VM 上创建证书
  4. 在辅助服务器上创建证书
  5. 在副本上创建数据库镜像终结点
  6. 创建可用性组
  7. 联接次要副本
  8. 将数据库添加到上面创建的可用性组

启用 AlwaysOn 可用性组,并重启 mssql-server

在托管 SQL Server 实例的所有节点上启用 Always On 功能。 然后重启 mssql-server。 在三个节点上都运行以下脚本:

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

启用 AlwaysOn_health 事件会话(可选)

可选择性地启用 AlwaysOn 可用性组的扩展事件,以便在对可用性组进行故障排除时帮助诊断根本原因。 在每个 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 是用于数据库镜像终结点的标准端口,但你可以将其更改为任意可用端口。

在仅配置副本上,使用以下命令创建数据库镜像终结点,请注意此处“角色”的值设置为 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的可用性组,该可用性组具有外部 ,并向可用性组授予 create database 权限。

在运行以下脚本之前,请将 <node1><node2><node3>(仅配置副本)占位符替换为在之前步骤中创建的 VM 的名称。

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. 备份数据库。 数据库至少需要一个完整备份,然后才能将其添加到可用性组。
CREATE DATABASE [db1]; -- creates a database named db1
GO
ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery mode
GO
BACKUP DATABASE [db1] -- backs up the database to disk TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO

成功完成上述步骤后,可以看到创建了 ag1 可用性组,并且添加了三个 VM 作为副本,其中包含一个主要副本、一个次要副本和 一个仅配置副本。 ag1 包含一个数据库。

部署 SQL Server 可用性组工作负载(HPE 群集管理器)

在 HPE Serviceguard 中,通过 Serviceguard 群集管理器 UI 在可用性组上部署 SQL Server 工作负载。

使用 Serviceguard 管理器图形用户界面,通过 Serviceguard 群集部署可用性组工作负载并启用高可用性 (HA)、灾难恢复 (DR)。 请参阅“保护 Always On 可用性组的 Linux 上的 Microsoft SQL Server”部分。

执行自动故障转移,并将节点加入回群集

对于自动故障转移测试,可以继续操作并关闭主要副本(关闭电源),这将复制主节点突然不可用的情况。 预计的行为如下:

  1. 群集管理器会将可用性组中的其中一个次要副本提升为主要副本。
  2. 发生故障的主要副本在备份后会自动加入群集。 群集管理器会将其提升为次要副本。

对于 HPE Serviceguard,请参阅测试设置以实现故障转移就绪部分

后续步骤

详细了解 Linux 上的 Always On 可用性组