Linux 上 SQL Server 的高可用实现路径
在 Linux 上,SQL Server 通过 Pacemaker 提供企业级高可用,主流做法有两类:基于 Always On 可用性组(AG) 的数据库级 HA,以及基于共享存储的 故障转移群集实例(FCI) 的实例级 HA。自 SQL Server 2017 起支持 Linux,HA 形态与 Windows 不同,Linux 使用 Pacemaker 而非 WSFC。此外,还可使用仅用于读扩展的“无群集”AG(不提供自动故障转移)。
方案对比与适用场景
| 方案 |
保护层级 |
基础依赖 |
典型拓扑 |
主要优点 |
主要限制 |
| Always On 可用性组(AG) |
数据库级 |
Pacemaker + Corosync,AG 端点通信 |
2–3 个同步副本(建议 3) |
自动故障转移、可读次要副本、支持跨站点(分布式 AG) |
需证书/密钥、网络与仲裁配置更复杂 |
| 故障转移群集实例(FCI) |
实例级 |
Pacemaker + 共享存储(如 NFS/iSCSI/SMB) |
2 节点共享磁盘 |
实例透明切换、对应用更友好 |
依赖共享存储、跨平台/跨虚拟化限制更严格 |
| AG(群集类型 None,读扩展) |
只读扩展 |
无群集 |
单主 + 多个只读副本 |
部署简单、低门槛读扩展 |
不提供 HA/自动故障转移 |
说明:
- 为保证自动故障转移与数据保护,AG 建议使用 2 或 3 个同步提交副本;其中 3 副本可在单节点故障时自动恢复。
- “无群集”AG 仅用于读扩展,不作为 HA 方案使用。
部署要点与关键配置
-
基础环境
- 所有参与节点需为 物理机或虚拟机,且虚拟节点必须位于同一虚拟化平台(因隔离/STONITH 代理与平台相关)。
- 建议启用 反亲和性,避免同一物理宿主机承载同一集群的多个节点(虚拟化/云环境尤为重要)。
- 集群需配置 仲裁 与 STONITH(隔离),这是受支持 Pacemaker 集群的硬性要求;部分云环境当前不支持隔离,需要选用支持的虚拟化平台或调整架构。
-
网络与端口
- 建议冗余网络;Pacemaker 支持同一子网的多个 IP,与 WSFC 不同。
- 常用端口(示例):1433(SQL Server)、5022(AG 端点)、2224/3121/21064(Pacemaker/pcsd)、5404–5405/UDP(Corosync,按发行版启用)。生产环境请通过防火墙策略精确放行。
-
主机名与解析
- 每个节点主机名需 ≤15 个字符 且在网络中唯一;确保 /etc/hosts 或 DNS 正确解析各节点,避免将 127.0.0.1 映射到节点名。
-
证书与身份验证
- 跨节点需使用 证书或 Kerberos 进行端点加密与身份验证;证书分发可用 scp/SSH 完成,注意文件权限与所有权(mssql 用户需可读)。
两种 HA 方案的快速落地步骤
-
Always On 可用性组(HA)
- 安装并初始化 SQL Server;在所有副本上启用 Always On 功能。
- 创建 证书登录 与 AG 端点(默认端口 5022),建立副本并配置 同步提交。
- 部署 Pacemaker 集群(Corosync 通信、仲裁、STONITH)。
- 将 AG 作为集群资源 托管(创建资源代理、设置依赖/约束、配置可能的 只读路由)。
- 验证自动故障转移与可读副本访问。
说明:生产环境必须配置 STONITH;部分云环境不支持隔离,需选用支持的虚拟化平台或采用替代架构。
-
故障转移群集实例(FCI,RHEL 示例)
- 准备 共享存储(如 NFS/iSCSI/SMB),并在两节点上装载到相同路径。
- 安装 SQL Server 与 mssql-server-ha(FCI 资源代理)。
- 配置 Pacemaker:创建 IP 资源 与 FCI 资源,加入同一资源组;确保 STONITH 与仲裁就绪。
- 使用 pcs resource move/clear 执行手动故障转移并验证。
- 连接测试(FCI 的 DNS/资源名),确认 @@SERVERNAME 与 ComputerNamePhysicalNetBIOS 返回预期值。
说明:FCI 为实例级 HA,依赖共享存储;节点加入/移除与防火墙端口放行需按 RHEL HA 文档执行。
常见注意事项与最佳实践
-
虚拟化/云部署
- 为节点设置 宿主机反亲和性;虚拟化/云网络冗余通常由 Hypervisor/云网络 提供,多 vNIC 未必带来真实链路冗余。
- 部分云环境当前不支持 STONITH/隔离,需选择支持的虚拟化平台或调整为高可用形态(如 AG + 仲裁盘/云见证)。
-
平台限制
- Pacemaker 集群的所有节点必须使用同一 Linux 发行版;跨发行版不支持。
- WSFC 与 Pacemaker 无法直接协同;跨平台场景可通过 分布式 AG 或 群集类型为 None 的 AG 实现互联(注意功能边界)。
-
读扩展与 HA 的边界
- 群集类型为 None 的 AG 仅用于读扩展,不具备自动故障转移能力;需要 HA 时应使用 Pacemaker 托管 AG 或 FCI。
-
基础保障
- 高可用技术不能替代 备份与还原;请配套完善的 定期备份、日志备份与验证 策略。