适用于:SQL Server - Linux
SQL Server 双节点共享磁盘故障转移群集实例为实现高可用性提供服务器级别的冗余。 本教程介绍如何创建 Linux 上的 SQL Server 的双节点故障转移群集实例。 你将完成的特定步骤包括:
- 设置和配置 Linux
- 安装和配置 SQL Server
- 配置主机文件
- 配置共享存储并移动数据库文件
- 在每个群集节点上安装和配置 Pacemaker
- 配置故障转移群集实例
本文介绍如何为 SQL Server 创建双节点共享磁盘故障转移群集实例 (FCI)。 本文提供 Red Hat Enterprise Linux (RHEL) 的说明和脚本示例。 Ubuntu 分发版与 RHEL 相似,因此脚本示例通常也适用于 Ubuntu。
有关概念性信息,请参阅故障转移群集实例 - Linux 上的 SQL Server。
先决条件
若要完成接下来的端到端方案,需要两台计算机来部署双节点群集,还需要一台服务器进行存储。 以下步骤概述了如何配置这些服务器。
设置和配置 Linux
第一步是在群集节点上配置操作系统。 在群集中的每个节点上,配置 linux 分发版。 在两个节点上使用相同的分发版和版本。 使用以下任一分发版:
- 具有适用于 HA 加载项的有效订阅的 RHEL
安装和配置 SQL Server
在两个节点上安装和设置 SQL Server。 有关详细说明,请参阅 Linux 上的 SQL Server 的安装指南。
出于配置目的,请将一个节点指定为主节点,而将另一个指定为辅助节点。 本指南使用这些术语。
在辅助节点上,停止并禁用 SQL Server。 以下示例会停止并禁用 SQL Server:
sudo systemctl stop mssql-server sudo systemctl disable mssql-server注意
在设置时,将为 SQL Server 实例生成一个服务器主密钥并放置在
var/opt/mssql/secrets/machine-key。 在 Linux 上,SQL Server 始终以名为mssql的本地帐户身份运行。 因为它是本地帐户,所以其标识不会在节点之间共享。 因此,需要将加密密钥从主节点复制到每个辅助节点,以便每个本地mssql帐户均可访问它,从而解密服务器主密钥。在主节点上,为 Pacemaker 创建 SQL Server 登录名并授予登录权限以运行
sp_server_diagnostics。 Pacemaker 使用此帐户验证正在运行 SQL Server 的节点。sudo systemctl start mssql-server使用
master帐户连接到 SQL Serversa数据库并运行以下命令:USE [master]; GO CREATE LOGIN [<loginName>] WITH PASSWORD = N'<password>'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];注意
密码应遵循 SQL Server 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。 使用的密码应尽可能长,尽可能复杂。
此外,也可以在更精细的级别设置权限。 Pacemaker 登录需要
VIEW SERVER STATE使用sp_server_diagnostics查询运行状况状态,需要 setupadmin 和 ALTER ANY LINKED SERVER 通过运行sp_dropserver和sp_addserver来更新 FCI 实例名称和资源名称。在主节点上,停止并禁用 SQL Server。
配置主机文件
在每个群集节点上,配置主机文件。 “主机”文件必须包含每个群集节点的 IP 地址和名称。
检查每个节点的 IP 地址。 以下脚本显示当前节点的 IP 地址。
sudo ip addr show在每个节点上设置计算机名。 为每个节点提供长度不超过 15 个字符的唯一名称。 通过将计算机名添加到
/etc/hosts来设置该名称。 以下脚本可使用/etc/hosts编辑vi。sudo vi /etc/hosts以下示例显示了
/etc/hosts以及名为sqlfcivm1和sqlfcivm2的两个节点。127.0.0.1 localhost localhost4 localhost4.localdomain4 ::1 localhost localhost6 localhost6.localdomain6 10.128.18.128 sqlfcivm1 10.128.16.77 sqlfcivm2
配置存储并移动数据库文件
需要提供两个节点都可以访问的存储。 可以使用 iSCSI、NFS 或 SMB。 配置存储,将存储提供给群集节点,然后将数据库文件移到新存储。 以下文章介绍了每种存储类型的步骤:
- 配置故障转移群集实例 - iSCSI - Linux 上的 SQL Server
- 配置故障转移群集实例 - NFS - Linux 上的 SQL Server
- 配置 SMB 存储故障转移群集实例 - Linux 上的 SQL Server
在每个群集节点上安装和配置 Pacemaker
在两个群集节点上,创建一个文件来存储用于 Pacemaker 登录的 SQL Server 用户名和密码。
以下命令创建并填充此文件:
sudo touch /var/opt/mssql/secrets/passwd sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 600 /var/opt/mssql/secrets/passwd在两个群集节点上,打开 Pacemaker 防火墙端口。 若要使用
firewalld打开这些端口,请运行以下命令:sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload如果使用的是没有内置高可用性配置的其他防火墙,则需要打开以下端口,Pacemaker 才能与群集中的其他节点通信:
- TCP:端口 2224、3121、21064
- UDP:端口 5405
在每个节点上安装 Pacemaker 包。
sudo yum install pacemaker pcs fence-agents-all resource-agents为安装 Pacemaker 和 Corosync 包时创建的默认用户设置密码。 在两个节点上使用相同的密码。
sudo passwd hacluster启用并启动
pcsd服务和 Pacemaker。 这样,节点将可以在重新启动后重新加入群集。 在这两个节点上运行以下命令。sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker为 SQL Server 安装 FCI 资源代理。 在这两个节点上运行以下命令。
sudo yum install mssql-server-ha
配置故障转移群集实例
将在资源组中创建 FCI。 这稍微简单一点,因为资源组减少了对约束的需求。 不过,请按照资源组本身的开始顺序将资源添加到资源组中。 资源组本身的开始顺序为:
- 存储资源
- 网络资源
- 应用程序资源
此示例在 NewLinFCIGrp 组中创建一个 FCI。 资源组的名称必须是在 Pacemaker 中创建的任何资源的唯一名称。
创建磁盘资源。 如果没有问题,你不会收到答复。 创建磁盘资源的方式取决于存储类型。 以下章节介绍了每种存储类型(iSCSI、NFS 和 SMB)的示例。 使用适用于群集存储的存储类型的示例。
sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName-
<iSCSIDIskResourceName>是与 iSCSI 磁盘关联的资源的名称 -
<VolumeGroupName>是卷组的名称 -
<LogicalVolumeName>是创建的逻辑卷的名称 -
<FolderToMountiSCSIDIsk>是要装入磁盘的文件夹(对于系统数据库和默认位置,它是/var/opt/mssql/data) -
<FileSystemType>将是 ext4 或 XFS,具体取决于设置格式和分发支持的方式。
-
创建 FCI 将使用的 IP 地址。 如果没有问题,你不会收到答复。
sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>-
<IPResourceName>是与 IP 地址关联的资源的名称 -
<IPAddress>是 FCI 的 IP 地址 -
<NetworkCard>是与子网(即 eth0)关联的网卡 -
<NetMask>是子网的网络掩码(即 24) -
<RGName>是资源组的名称
-
创建 FCI 资源。 如果没有问题,你不会收到答复。
sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName-
<FCIResourceName>不仅是资源的名称,而且还是与 FCI 关联的易记名称。 这就是用户和应用程序用于连接的内容。 -
<RGName>是资源组的名称。
-
运行命令
sudo pcs resource。 FCI 应为联机状态。使用 FCI 的 DNS/资源名称,通过 SSMS 或 sqlcmd 连接到 FCI。
发出语句
SELECT @@SERVERNAME。 它应返回 FCI 的名称。发出语句
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')。 它应返回 FCI 运行的节点的名称。将 FCI 手动故障转移到其他节点。 请参阅运行故障转移群集实例 - Linux 上的 SQL Server。
最后,将 FCI 故障转移回原始节点并删除托管约束。
总结
在本教程中,已完成以下任务:
- 设置和配置 Linux
- 安装和配置 SQL Server
- 配置主机文件
- 配置共享存储并移动数据库文件
- 在每个群集节点上安装和配置 Pacemaker
- 配置故障转移群集实例