SQL Server在CentOS上的集群配置指南
一 架构与准备
- 架构选择
- 推荐采用 Always On 可用性组(AG),在 Linux 上使用 Pacemaker + Corosync 作为集群资源管理器,AG 的 CLUSTER_TYPE = EXTERNAL,故障转移由外部集群控制。
- 数据库文件建议使用 本地存储 + 自动种子(SEEDING_MODE = AUTOMATIC),避免共享存储的复杂度与单点风险。
- 环境与网络
- 操作系统:CentOS 7.9+(或兼容 RHEL 7/8 的发行版),节点间网络互通,配置 静态 IP 与 /etc/hosts 主机名解析。
- 防火墙放行:1433(SQL Server)、5022(HADR 端点),或临时停用防火墙以便联调。
- 建议至少 3 节点(1 主 + 2 辅)以兼顾可用性与见证仲裁。
- 软件与账户
- 安装 mssql-server 2019/2022,并安装命令行工具 mssql-tools(便于 sqlcmd 使用)。
- 创建用于端点认证的 SQL 登录/服务账户,并准备证书用于各节点间端点加密与认证。
二 安装与基础配置
- 添加仓库并安装引擎(以 SQL Server 2019 为例,CentOS 7):
- sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo
- sudo yum install -y mssql-server
- sudo /opt/mssql/bin/mssql-conf setup(设置 SA 密码与版本)
- sudo systemctl start mssql-server && sudo systemctl enable mssql-server
- 安装工具并验证:
- sudo yum install -y mssql-tools unixODBC-devel
- echo ‘export PATH=“$PATH:/opt/mssql-tools/bin”’ >> ~/.bash_profile && source ~/.bash_profile
- sqlcmd -S localhost -U SA -P ‘YourStrongP@ssw0rd’ -Q “SELECT @@VERSION”
- 主机名解析示例(所有节点一致):
- 192.168.1.10 centos00
- 192.168.1.11 centos01
- 192.168.1.12 centos02
三 启用 Always On 与配置端点
- 启用 HADR(每个节点):
- sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
- sudo systemctl restart mssql-server
- sqlcmd -S localhost -U SA -P ‘’ -Q “SELECT SERVERPROPERTY(‘HadrManagerStatus’)” – 返回 1 表示启用成功
- 创建证书与 HADR 端点(所有节点执行,证书名与路径按节点区分)
- USE master;
- CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘MasterKeyP@ss’;
- CREATE CERTIFICATE Node00_Cert WITH SUBJECT = ‘Node00 Certificate’, EXPIRY_DATE = ‘2026-12-31’;
- BACKUP CERTIFICATE Node00_Cert TO FILE = ‘/var/opt/mssql/certs/Node00_Cert.cer’;
- CREATE ENDPOINT Hadr_endpoint
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATA_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE Node00_Cert,
ENCRYPTION = REQUIRED ALGORITHM AES
);
- GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO [<SQL_Service_Account>];
- 将各节点证书互相拷贝到 /var/opt/mssql/certs/,并在对应节点上创建同名证书(FROM FILE),以便 相互认证 与 加密通信。
四 部署 Pacemaker 与创建可用性组
- 安装并启动集群栈(所有节点):
- sudo yum install -y pacemaker corosync pcs
- sudo systemctl start pcsd && sudo systemctl enable pcsd
- echo “” | passwd --stdin hacluster
- 认证与建集群(任一节点执行):
- pcs cluster auth centos00 centos01 centos02 -u hacluster -p
- pcs cluster setup --name SQLCluster centos00 centos01 centos02
- pcs cluster start --all && pcs cluster enable --all
- pcs property set stonith-enabled=false – 仅测试环境;生产请配置 STONITH 或仲裁设备
- 创建可用性组(主节点执行,使用自动种子与外部故障转移)
- CREATE AVAILABILITY GROUP [SQLAG]
WITH (CLUSTER_TYPE = EXTERNAL, DB_FAILOVER = ON)
FOR REPLICA ON
N’centos00’ WITH (
ENDPOINT_URL = N’TCP://centos00:5022’,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N’centos01’ WITH (
ENDPOINT_URL = N’TCP://centos01:5022’,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
- ALTER AVAILABILITY GROUP [SQLAG] GRANT CREATE ANY DATABASE;
- 将数据库置于 FULL 恢复模式,执行备份后加入 AG,或依赖 AUTOMATIC SEEDING 自动初始化副本:
- ALTER DATABASE [YourDB] SET RECOVERY FULL;
- BACKUP DATABASE [YourDB] TO DISK = ‘/var/opt/mssql/backup/YourDB.bak’ WITH INIT;
- ALTER AVAILABILITY GROUP [SQLAG] ADD DATABASE [YourDB];
- 验证状态:
- pcs status(查看资源与节点)
- sqlcmd -S localhost -U SA -P ‘’ -Q "
SELECT ag.name AS AGName, ags.synchronization_health_desc,
ar.replica_server_name, ars.role_desc, ars.synchronization_health_desc
FROM sys.availability_groups ag
JOIN sys.dm_hadr_availability_group_states ags ON ag.group_id = ags.group_id
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id
JOIN sys.dm_hadr_availability_replica_states ars ON ar.replica_id = ars.replica_id
ORDER BY ag.name, ar.replica_server_name;"
五 客户端连接与故障转移测试
- 连接与验证
- 使用 SSMS 或 sqlcmd 连接主节点或通过侦听器(若已配置)访问数据库,执行查询验证 可读辅助副本 与 同步健康。
- 故障转移演练
- 计划内切换:在 SSMS 或使用 sqlcmd 执行 ALTER AVAILABILITY GROUP [SQLAG] FAILOVER;(目标副本需为 SYNCHRONOUS_COMMIT 且健康)
- 故障演练:在主节点停止 SQL Server(sudo systemctl stop mssql-server),观察 Pacemaker 是否将 AG 资源迁移至同步副本并提升为主。
- 生产建议
- 启用 STONITH 与 仲裁(如磁盘/文件共享见证),避免脑裂。
- 为 5022 端点与集群通信配置加固(TLS、最小权限、审计)。
- 监控 HADR 同步延迟与副本健康,定期演练切换与备份恢复。