温馨提示×

如何在Linux上实现SQL Server的高可用性

小樊
38
2025-12-29 15:51:50
栏目: 云计算

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)

  1. 准备与网络
    • 在所有节点安装并启用 SQL Server;设置主机名与 /etc/hosts;开放必要端口(见下节)。
  2. 证书认证与镜像端点
    • 在主副本创建 主密钥证书,备份为 .cer/.pvk 并复制到各副本节点(权限设为 mssql:mssql)。
    • 在各副本基于备份创建证书;创建数据库镜像端点(示例端口 5022,认证方式 CERTIFICATE,SQL Server 2017 仅支持证书)。
  3. 创建可用性组
    • 使用 T-SQL 创建 AG(指定副本、同步/异步模式、故障转移模式等);也可使用 SSMS 向导(注意在加入副本时授予 ALTER/CONTROL/VIEW DEFINITIONS 给 pacemaker 所需的权限)。
  4. 部署 Pacemaker 群集
    • 安装并启动 pcsd/pacemaker/corosync;生产环境必须配置 STONITH/fencing(示例常省略,仅用于测试)。
    • 将 AG 作为资源加入群集,按发行版指引完成资源配置与约束(RHEL、SLES、Ubuntu 步骤略有差异)。
  5. 创建侦听器与连接
    • 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 策略。

0