有关 Linux 部署的 SQL Server 可用性基础知识

适用于:SQL Server - Linux

从 SQL Server 2017 (14.x) 开始,Linux 和 Windows 都支持 SQL Server。 与基于 Windows 的 SQL Server 部署一样,SQL Server 数据库和实例需要在 Linux 下高度可用。 本文介绍了规划和部署基于 Linux 的高可用性 SQL Server 数据库和实例的技术方面,以及与基于 Windows 的安装的一些区别。 因为 SQL Server 对于 Linux 专业人员来说可能是新内容,而 Linux 对于 SQL Server 专业人员来说可能是新内容,所以这篇文章有时会介绍一些人熟悉,而其他人不熟悉的概念。

SQL Server Linux 部署的可用性选项

除备份和还原之外,Linux 上还提供了与基于 Windows 的部署相同的三种可用性功能:

在 Windows 上,FCI 始终需要一个基础 Windows Server 故障转移群集 (WSFC)。 根据部署方案,AG 通常需要基础 WSFC,但 SQL Server 2017 (14.x) 中的新 None 变量除外。 在 Linux 中不存在 WSFC。 Linux 中的群集实现将在 Linux 上可用性组和故障转移群集实例的 Pacemaker 中进行讨论。

Linux 快速入门

虽然有些 Linux 安装可以通过接口完成,但大多数安装都不是,这意味着操作系统层的几乎所有工作都是通过命令行完成的。 在Linux 环境中,此命令行的常用术语是 bash shell。

在 Linux 中,许多命令需要以提升的权限执行,就像作为管理员需要在 Windows 服务器中执行许多操作一样。 使用提升的权限执行有两种主要方法:

  1. 在适当用户的上下文中运行。 若要更改为其他用户,请使用命令 su。 如果 su 在没有用户名的情况下独立执行,那么只要你知道密码,你现在就将作为根处于 shell 中。

  2. 运行事务更常见、更安全的做法是,在执行任何操作之前使用 sudo。 本文中的许多示例都使用了 sudo

一些常见命令,每个命令都包含各种可联机研究的开关和选项:

  • cd - 更改目录
  • chmod - 更改文件或目录的权限
  • chown - 更改文件或目录的所有权
  • ls - 显示目录的内容
  • mkdir - 在驱动器上创建文件夹(目录)
  • mv - 将文件从一个位置移动到另一个位置。
  • ps -显示所有工作进程
  • rm - 在服务器上本地删除文件
  • rmdir - 删除文件夹(目录)
  • systemctl - 启动、停止或启用服务
  • 文本编辑器命令。 在 Linux 上,有各种文本编辑器选项,例如 vi 和 emacs。

Linux 上的 SQL Server 的可用性配置的常见任务

本节介绍所有基于 Linux 的 SQL Server 部署的常见任务。

确保可以复制文件

将文件从一台服务器复制到另一台服务器是一项任何人使用 Linux 上的 SQL Server 都应该能够完成的任务。 此任务对 AG 配置非常重要。

在 Linux 和基于 Windows 的安装上都可能存在权限等问题。 但是,那些熟悉如何在 Windows 上从服务器复制到服务器的人可能不熟悉在 Linux 上如何完成此操作。 常见方法是使用代表安全复制的命令行实用工具 scp。 在后台,scp 使用 OpenSSH。 SSH 代表安全外壳。 根据 Linux 分发版,可能未安装 OpenSSH 本身。 如果未安装,则需要先安装 OpenSSH。 有关配置 OpenSSH 的详细信息,请参阅以下链接中有关每个分发版的信息:

使用 scp 时,如果服务器不是源或目标,则必须提供服务器的凭据。 例如,使用

scp MyAGCert.cer username@servername:/folder/subfolder

将文件 MyAGCert.cer 复制到另一台服务器上指定的文件夹。 必须具有要复制文件的权限(可能还包括所有权),因此在复制之前可能还需要使用 chown。 同样,在接收端,正确的用户需要访问权限来操作文件。 例如,要还原该证书文件,mssql 用户必须能够访问该文件。

Samba 是服务器消息块 (SMB) 的 Linux 变体,也可用于创建由 UNC 路径(例如 \\SERVERNAME\SHARE)访问的共享。 有关配置 Samba 的详细信息,请参阅以下链接中有关每个分发版的信息:

也可以使用基于 Windows 的 SMB 共享;SMB 共享不需要基于 Linux,只要在托管 SQL Server 的 Linux 服务器上正确配置 Samba 的客户端部分,且共享具有正确的访问权限。 对于混合环境中的用户,通过这种方法可使用基于 Linux 的 SQL Server 部署的现有基础结构。

重要的一点是,部署的 Samba 版本应符合 SMB 3.0 标准。 在 SQL Server 2012 (11.x) 中添加 SMB 支持时,它需要所有共享支持 SMB 3.0。 如果使用 Samba 作为共享而不是 Windows Server,则基于 Samba 的共享应使用 Samba 4.0 或更高版本,理想情况下应使用支持 SMB 3.1.1 的 4.3 或更高版本。 有个 SMB 和 Linux 的信息,请参阅 Samba 中的 SMB3

最后,可选择使用网络文件系统 (NFS) 共享。 在基于 Windows 的 SQL Server 部署中,无法使用 NFS,只能在基于 Linux 的部署中使用 NFS。

配置防火墙

与 Windows 类似,Linux 分发版也具有内置防火墙。 如果你的公司正在服务器上使用外部防火墙,那么在 Linux 中禁用防火墙可能是可以接受的。 但是,无论在何处启用防火墙,都需要打开端口。 下表列出了 Linux 上高可用性 SQL Server 部署所需的公共端口。

端口号 类型 说明
111 TCP/UDP NFS - rpcbind/sunrpc
135 TCP Samba(如果使用)- 终结点映射程序
137 UDP Samba(如果使用)- NetBIOS 名称服务
138 UDP Samba(如果使用)- NetBIOS 数据报
139 TCP Samba(如果使用)- NetBIOS 会话
445 TCP Samba(如果使用)- SMB over TCP
1433 TCP SQL Server - 默认端口;如果需要,可以随 mssql-conf set network.tcpport <portnumber> 改变
2049 TCP、UDP NFS(如果使用)
2224 TCP Pacemaker - 由 pcsd 使用
3121 TCP Pacemaker - 如果存在 Pacemaker 远程节点,则为必需项
3260 TCP iSCSI 发起程序(如果使用)- 可以在 /etc/iscsi/iscsid.config (RHEL) 中更改,但应与 iSCSI 目标的端口匹配
5022 TCP SQL Server - 用于 AG 终结点的默认端口;可以在创建终结点时更改
5403 TCP Pacemaker
5404 UDP Pacemaker - 如果使用多播 UDP,则为 Corosync 所需
5405 UDP Pacemaker - Corosync 所需
21064 TCP Pacemaker - 使用 DLM 的资源所需
变量 TCP AG 终结点端口;默认值是 5022
变量 TCP NFS - LOCKD_TCPPORT 的端口(位于 RHEL 上的 /etc/sysconfig/nfs 中)
变量 UDP NFS - LOCKD_UDPPORT 的端口(位于 RHEL 上的 /etc/sysconfig/nfs 中)
变量 TCP/UDP NFS - MOUNTD_PORT 的端口(位于 RHEL 上的 /etc/sysconfig/nfs 中)
变量 TCP/UDP NFS - STATD_PORT 的端口(位于 RHEL 上的 /etc/sysconfig/nfs 中)

有关 Samba 可能使用的其他端口,请参阅 Samba 端口使用情况

相反,Linux 下的服务名称也可以添加为异常而不是端口;例如,Pacemaker 为 high-availability。 如果这是你想要采用的方向,请参阅分发版中的名称。 例如,在 RHEL 上,要在 Pacemaker 中添加的命令是

sudo firewall-cmd --permanent --add-service=high-availability

防火墙文档

安装 SQL Server 包以实现可用性

在基于 Windows 的 SQL Server 安装中,有些组件甚至可以在基本引擎安装中安装,而其他组件则不能。 在 Linux 下,只有 SQL Server 引擎作为安装过程的一部分进行安装。 其他全部内容都是可选的。 对于 Linux 下的高可用性 SQL Server 实例,应使用 SQL Server 安装两个包:

  • SQL Server 代理 (mssql-server-agent)
  • 高可用性 (HA) 包 (mssql-server-ha)

虽然 SQL Server 代理在技术上是可选的,但它是 SQL Server 的作业计划程序,并且是日志传送所必需的,因此建议安装。

在具有 CU 4 及更高版本的 SQL Server 2017 (14.x) 上,SQL Server 代理包含在数据库引擎包中,但是仍需要启用它。 在基于 Windows 的安装中,SQL Server 代理是不可选的。

注意

对于 SQL Server 的新用户,SQL Server 代理是 SQL Server 的内置作业计划程序。 这是 DBA 计划备份和其他 SQL Server 维护等内容的常见方法。 与 SQL Server 的基于 Windows 的安装不同,其中 SQL Server 代理是完全不同的服务,在 Linux 上,SQL Server 代理在 SQL Server 自身的上下文中运行。

在基于 Windows 的配置上配置 AG 或 FCI 时,它们可识别群集。 群集感知意味着 SQL Server 具有 WSFC 了解的特定资源 DLL(用于 FCI 的 sqagtres.dllsqsrvres.dll 以及用于 AG 的 hadrres.dll),并由 WSFC 使用以确保 SQL Server 群集功能正常启动和运行。 由于群集不仅对于 SQL Server 是外部的,而且对于 Linux 本身也是外部的,因此 Microsoft 必须为基于 Linux 的 AG 和 FCI 部署编写与资源 DLL 等价的代码。 这是 mssql-server-ha 包,也称为 Pacemaker 的 SQL Server 资源代理。 若要安装 mssql-server-ha 包,请参阅为 Linux 上的 SQL Server 部署 Pacemaker 群集

其他用于 Linux 上的 SQL Server、SQL Server 全文搜索 (mssql-server-fts) 和 SQL Server Integration Services (mssql-server-is) 的可选包对于高可用性、FCI 或 AG 都不是必需的 。

SQL Server 高可用性和灾难恢复合作伙伴

要对 SQL Server 服务提供高可用性和灾难恢复,请从各种行业领先工具进行选择。 本节重点介绍提供支持 SQL Server 的高可用性和灾难恢复解决方案的 Microsoft 合作伙伴公司。

Partner 说明
DH2i DxEnterprise 是适用于 Windows、Linux 和 Docker 的智能可用性软件,可帮助你实现接近零的计划和非计划故障时间、节约大量成本、极大地简化管理以及实现物理和逻辑合并。

- 在 AKS 上使用 DH2i 为 SQL Server 容器部署可用性组
- 教程:使用 DH2i DxEnterprise 设置三节点 Always On 可用性组
HPE Serviceguard HPE SGLX 为故障转移群集实例和 Always On 可用性组提供上下文敏感监视和恢复选项。 使用 HPE SGLX,可最大化运行时间,且不会影响数据完整性和性能。

- 教程:使用适用于 Linux 的 HPE Serviceguard 设置三节点 Always On 可用性组
Pacemaker Pacemaker 是一个开放源代码高可用性群集资源管理器。 通过 Corosync,Pacemaker 这个开放源代码组通信系统可以检测组件故障并协调必要的故障转移过程,以最大程度地减少应用中断。

- Linux 上用于 AG 和 FCI 的 Pacemaker
- 为 Linux 上的 SQL Server 部署 Pacemaker 群集