Linux 上实现 SQL Server 高可用性的路径总览
在 Linux 上,SQL Server 通过 Pacemaker/Corosync 群集管理实现 Always On 可用性组(AG) 的高可用,或在 SQL Server 2017(14.x) 中使用 None 变体实现仅用于读扩展的 AG(不提供自动故障转移)。Linux 上不存在 WSFC,因此与 Windows 的实现机制不同;同时,SQL Server 2017 的数据库镜像在 Linux 上不可用。对于高可用,建议至少 3 个同步提交副本 以在单节点故障时仍可自动恢复。若采用 FCI(故障转移群集实例),同样依赖 Pacemaker 在 Linux 上提供群集能力。
方案选型与前置条件
- 方案选型
- 高可用与数据保护:使用 AG + Pacemaker,建议 3 个同步副本;读扩展场景可用 AG for read-scale(无群集),但不提供 HA。
- 实例级高可用:使用 FCI(Pacemaker),需共享存储(如 SAN/iSCSI/NFS)。
- 其他:跨站点可用 日志传送 作为补充或过渡方案。
- 基础要求
- 所有承载副本的服务器需为 物理机或同一虚拟化平台上的虚拟机(fencing agent 与平台相关)。
- 各节点主机名 ≤ 15 个字符、全网唯一;正确配置 /etc/hosts 或 DNS,确保节点互相解析;避免将 127.0.0.1 映射到节点主机名。
- 安装 SQL Server 并启用 hadr.hadrenabled=1,重启服务;建议启用 AlwaysOn_health 扩展事件会话以便排障。
- 安装高可用所需包:mssql-server-ha(SQL Server 资源代理)与 mssql-server-agent(作业调度、日志传送所需)。
高可用部署步骤(可用性组 + Pacemaker)
- 准备与网络
- 在所有节点安装并启用 SQL Server;设置主机名与 /etc/hosts;开放必要端口(见下节)。
- 证书认证与镜像端点
- 在主副本创建 主密钥 与 证书,备份为 .cer/.pvk 并复制到各副本节点(权限设为 mssql:mssql)。
- 在各副本基于备份创建证书;创建数据库镜像端点(示例端口 5022,认证方式 CERTIFICATE,SQL Server 2017 仅支持证书)。
- 创建可用性组
- 使用 T-SQL 创建 AG(指定副本、同步/异步模式、故障转移模式等);也可使用 SSMS 向导(注意在加入副本时授予 ALTER/CONTROL/VIEW DEFINITIONS 给 pacemaker 所需的权限)。
- 部署 Pacemaker 群集
- 安装并启动 pcsd/pacemaker/corosync;生产环境必须配置 STONITH/fencing(示例常省略,仅用于测试)。
- 将 AG 作为资源加入群集,按发行版指引完成资源配置与约束(RHEL、SLES、Ubuntu 步骤略有差异)。
- 创建侦听器与连接
- Linux 上 AG 侦听器 通过 DNS 记录 实现(而非群集内建对象);为侦听器配置 虚拟 IP(VIP) 与端口(常用 1433),确保应用通过 DNS 名称连接以实现透明故障转移。
防火墙与端口清单
- 关键端口与用途
- 1433/TCP:SQL Server 默认实例端口
- 5022/TCP:AG 数据库镜像端点(可自定义)
- 2224/TCP:Pacemaker pcsd
- 3121/TCP:Pacemaker
- 21064/TCP:DLM(如适用)
- 5404–5405/UDP:Corosync(若使用多播)
- 111/TCP/UDP、2049/TCP/UDP:NFS(如使用)
- 135/TCP、137–139/UDP、445/TCP:SMB(如使用,SMB 需 3.0+,Samba 推荐 4.3+ 以支持 SMB 3.1.1)
- 防火墙示例(RHEL firewalld)
- 开放高可用服务:sudo firewall-cmd --permanent --add-service=high-availability && sudo firewall-cmd --reload
- 或按端口开放:如 5022/TCP、1433/TCP 等。
运维与最佳实践
- 副本与故障转移
- 高可用与数据保护建议使用 2 或 3 个同步提交副本;3 副本 可在单节点故障时自动恢复;Linux 上 AG 的 手动/自动故障转移均由群集执行。
- 版本与对象管理
- SQL Server 2022(16.x)及以上 支持 包含的可用性组,可在 AG 级别管理登录、权限、作业等实例级元数据,降低运维复杂度。
- 存储与共享
- FCI 需共享块存储(如 iSCSI/SAN)或 NFS(Linux 特有);确保存储性能与隔离,避免单点故障。
- 监控与演练
- 启用 AlwaysOn_health XE 会话;定期执行 故障转移演练 与 备份/还原 校验;生产环境务必配置并验证 fencing/STONITH 策略。