CentOS 上 SQL Server 集群部署指南
一 方案总览与版本选择
- 在 Linux 上,SQL Server 支持两类高可用形态:
- FCI 共享磁盘故障转移群集实例:两节点共享存储,提供实例级冗余,依赖 Pacemaker 管理资源与故障切换。适用于需要实例级接管、统一网络名称与 IP 的场景。
- Always On 可用性组(AG):数据库级冗余,支持多副本与读写分离,Linux 平台需使用 Pacemaker 作为外部集群管理器,创建 侦听器 VIP 对外提供接入。适用于多库统一高可用与读写扩展。
- 版本与平台要点:
- CentOS 7.9 上可部署 SQL Server 2019;CentOS Stream 9 / RHEL 9 支持 SQL Server 2019/2022。
- 若需自动化安装与配置,可使用 RHEL System Roles for SQL Server(Ansible),支持 2017–2022 的批量部署与 AG 配置。
二 前置条件与基础配置
- 节点规划与网络:
- 建议至少 3 台(AG 推荐 3 副本,FCI 为 2 节点 + 共享存储),节点间 主机名可解析(DNS 或 /etc/hosts),时间同步(如 chrony),并开放必要端口(如 1433、5022)。
- 安装与启用 SQL Server:
- 配置 Microsoft 官方仓库并安装 SQL Server,完成 /opt/mssql/bin/mssql-conf setup 初始化。
- 启用 Always On 功能(AG 必需):执行 /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 并重启实例;可用 T-SQL 校验:SELECT SERVERPROPERTY(‘HadrManagerStatus’)(返回 1 表示已运行)。
- 安装高可用依赖:
- 安装 Pacemaker/Corosync/resource-agents/fence-agents 与 mssql-server-ha(AG 必需)。
- 创建 hacluster 系统账号并统一密码,后续用于集群认证与资源管理。
三 部署路径一 FCI 共享磁盘故障转移群集实例
- 共享存储准备:
- 使用 SAN/NAS/iSCSI 等提供共享块存储,格式化并挂载到两节点的相同路径(例如 /var/opt/mssql/data 或专用共享挂载点),确保权限为 mssql:mssql。
- 安装与配置 SQL Server:
- 两节点均安装 SQL Server,但仅在主节点启动;在配置阶段将数据库文件目录指向共享存储。
- 复制 Server Master Key 到备节点,保证 mssql 本地账户可解密:主节点 /var/opt/mssql/secrets/machine-key → 备节点同路径(权限 600)。
- 创建 Pacemaker 资源与约束:
- 创建 FCI 资源(包含 IP 地址 与 SQL Server 实例),设置 colocation 与 order 约束,确保 IP 与实例在同一节点运行且按顺序启动。
- 配置 STONITH(如基于厂商的 fence 代理);若环境暂不支持,可先设置 stonith-enabled=false 并明确风险。
- 验证与演练:
- 通过 pcs status 与 crm_mon 查看资源状态,执行 手动故障转移 与 资源清理,确认共享存储与实例可平滑切换。
四 部署路径二 Always On 可用性组与侦听器
- 数据库与端点准备:
- 在所有副本上创建 数据库镜像端点(端口 5022),建议使用 证书认证 提升安全性:创建主密钥与证书、备份证书并拷贝至各节点,创建端点并启动。
- 防火墙放行 1433/5022,确保节点间与客户端可达。
- 创建可用性组:
- 使用 T-SQL 创建 AG(示例):
- 三同步副本:CREATE AVAILABILITY GROUP [ag1] WITH (CLUSTER_TYPE=EXTERNAL) FOR REPLICA ON N’node1’ WITH (ENDPOINT_URL=‘TCP://node1:5022’, AVAILABILITY_MODE=SYNCHRONOUS_COMMIT, FAILOVER_MODE=EXTERNAL, SEEDING_MODE=AUTOMATIC), N’node2’ …, N’node3’ …;
- 可设置 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 控制提交所需同步副本数(例如 1 表示至少一台同步从库确认)。
- 将数据库加入 AG,并启用 自动种子 或备份/还原初始化。
- 集群资源与侦听器:
- 在 Pacemaker 中创建 AG 资源 与 侦听器 VIP 资源(如 192.168.22.160),设置 colocation 使 VIP 与主副本同节点,配置 监控/迁移 策略。
- 通过 DNS 或 /etc/hosts 注册节点与侦听器域名,客户端使用侦听器名称连接以实现透明故障转移。
五 运维与验证清单
- 账号与权限:
- 在 master 库为每个节点创建 Pacemaker 登录名,授予 sysadmin 或至少 ALTER/CONTROL/VIEW DEFINITION 于目标 AG 与 VIEW SERVER STATE,用于集群健康检查与切换。
- 将 Pacemaker 登录密码保存至 /var/opt/mssql/secrets/passwd,权限 400,确保集群可非交互登录 SQL Server。
- 监控与故障演练:
- 启用 AlwaysOn_health 扩展事件会话以辅助排障:ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
- 定期执行 手动故障转移、资源清理 与 网络隔离/恢复 演练,验证 RTO/RPO 与数据一致性。
- 自动化与合规:
- 使用 RHEL System Roles for SQL Server(Ansible)进行标准化部署与批量变更,减少人为差异与配置漂移。