centos上sqlserver集群部署
导读:CentOS 上 SQL Server 高可用集群部署指南 一 架构与前提 高可用形态:在 Linux 上通过 Pacemaker + Corosync 管理 Always On 可用性组(AG);SQL Server 提供 mssql-...
CentOS 上 SQL Server 高可用集群部署指南
一 架构与前提
- 高可用形态:在 Linux 上通过 Pacemaker + Corosync 管理 Always On 可用性组(AG);SQL Server 提供 mssql-server-ha 包与集群集成。Linux 方案与 Windows 的 WSFC 理念相近,但实现不同,名称解析依赖 DNS(WSFC 的“网络名称资源”在 Linux 中由 DNS 承担)。
- 节点规划:建议至少 3 个节点(生产环境),示例:
- 节点与业务 IP:192.168.22.122/124/128
- 侦听器 VIP:192.168.22.160(AG 对外访问入口)
- 主机名与域名:如 wwwmssql122.mssqlag.com 等,建议通过 DNS 统一解析(测试可用 /etc/hosts 映射)。
- 软件与版本:SQL Server 2017/2019/2022 均支持 Linux;CentOS 7 系列上自动化脚本通常最高部署到 SQL Server 2019。
- 存储与文件系统:数据目录建议置于本地 XFS/EXT4;如必须使用 NFS,仅可将 /var/opt/mssql 挂载为 NFS v4.2+,并带 nolock 选项。
二 安装与初始化 SQL Server
- 添加仓库并安装(示例为 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
- 初始化配置(设置 SA 密码与版本):sudo /opt/mssql/bin/mssql-conf setup
- 启动与开机自启:sudo systemctl start mssql-server & & sudo systemctl enable mssql-server
- 自动化可选:使用 Ansible 的 microsoft.sql.server 角色批量部署(支持 SQL Server 2017–2022;在 CentOS 7.9 上通常自动安装 2019)。
三 部署 Pacemaker 集群
- 安装高可用组件与 SQL HA 集成包:
- sudo yum clean all & & sudo yum makecache
- sudo yum config-manager --set-enabled highavailability
- sudo yum install -y pacemaker pcs fence-agents-all resource-agents corosync mssql-server-ha
- 启用并启动 pcsd:
- sudo systemctl start pcsd & & sudo systemctl enable pcsd
- echo “HA_PASSWORD” | passwd --stdin hacluster(为 hacluster 设置统一密码)
- 认证与建集群(任一节点执行):
- pcs cluster auth node1 node2 node3 -u hacluster
- pcs cluster setup --name LINUXHACLUSTER node1 node2 node3
- pcs cluster start --all & & pcs cluster enable --all
- 基础集群属性(测试环境常用):
- pcs property set stonith-enabled=false(禁用 STONITH;生产需配置合规的隔离设备)
- pcs property set start-failure-is-fatal=false
- 防火墙放行(或临时关闭):
- firewall-cmd --add-service=high-availability --permanent & & firewall-cmd --reload
- 或放行端口:2224/tcp、3121/tcp、5405/udp。
四 配置 Always On 可用性组与侦听器
- 启用数据库引擎的 HADR:
- /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
- systemctl restart mssql-server
- 验证:SELECT SERVERPROPERTY(‘HadrManagerStatus’)(返回 1 表示已启动)
- 创建数据库与完整备份(每个待加入 AG 的数据库至少一次完整备份)。
- 创建端点与证书认证(跨节点通信):
- 主节点:
- CREATE MASTER KEY ENCRYPTION BY PASSWORD=‘’;
- CREATE CERTIFICATE dbm_cert WITH SUBJECT=‘dbm’;
- BACKUP CERTIFICATE dbm_cert TO FILE=‘/var/opt/mssql/data/dbm_cert.cer’
WITH PRIVATE KEY (FILE=‘/var/opt/mssql/data/dbm_cert.pvk’, ENCRYPTION BY PASSWORD=‘’);
- 将 .cer/.pvk 复制到各副本相同目录,并修正属主:chown mssql:mssql /var/opt/mssql/data/dbm_cert.*
- 各副本还原证书:
- CREATE MASTER KEY ENCRYPTION BY PASSWORD=‘’;
- CREATE CERTIFICATE dbm_cert FROM FILE=‘/var/opt/mssql/data/dbm_cert.cer’
WITH PRIVATE KEY (FILE=‘/var/opt/mssql/data/dbm_cert.pvk’, DECRYPTION BY PASSWORD=‘’);
- 在各副本创建数据库镜像端点(示例,端口 5022):
- CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_cert, ENCRYPTION = REQUIRED ALGORITHM AES); - ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
- GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [public];
- CREATE ENDPOINT [Hadr_endpoint]
- 主节点:
- 创建可用性组(示例名称 LINUX_SQLAG):
- 主副本执行:
- CREATE AVAILABILITY GROUP [LINUX_SQLAG]
WITH (CLUSTER_TYPE = EXTERNAL,
AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
FAILURE_CONDITION_LEVEL = 3,
HEALTH_CHECK_TIMEOUT = 30000)
FOR DATABASE [YourDB]
REPLICA ON
N’node1’ WITH (ENDPOINT_URL = N’TCP://node1.mssqlag.com:5022’,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC),
N’node2’ WITH (ENDPOINT_URL = N’TCP://node2.mssqlag.com:5022’,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC),
N’node3’ WITH (ENDPOINT_URL = N’TCP://node3.mssqlag.com:5022’,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC); - ALTER AVAILABILITY GROUP [LINUX_SQLAG] GRANT CREATE ANY DATABASE;
- CREATE AVAILABILITY GROUP [LINUX_SQLAG]
- 主副本执行:
- 将辅助副本加入 AG:
- ALTER AVAILABILITY GROUP [LINUX_SQLAG] JOIN;
- ALTER AVAILABILITY GROUP [LINUX_SQLAG] GRANT ALTER ANY DATABASE;
- 创建侦听器(DNS 记录指向 192.168.22.160):
- 在 Linux 侧创建 ocf:sql:ag 资源(示例):
- pcs resource create ag_cluster ocf:sql:ag ag_name=LINUX_SQLAG meta failure-timeout=30s op monitor interval=10s timeout=30s --group=ag_group
- pcs resource create ag_ip ocf:heartbeat:IPaddr2 ip=192.168.22.160 cidr_netmask=24 op monitor interval=10s timeout=20s --group=ag_group
- pcs constraint colocation add ag_ip with ag_cluster INFINITY
- pcs constraint order ag_cluster then ag_ip
- 应用后,客户端通过侦听器 yahaha_listener.mssqlag.com:1433 访问。
- 在 Linux 侧创建 ocf:sql:ag 资源(示例):
五 运维与常见限制
- 运维要点
- 监控与排障:在各副本启用扩展事件会话 AlwaysOn_health(STARTUP_STATE=ON),便于定位 AG 故障。
- 故障转移:pcs cluster standby (手动迁出);pcs cluster unstandby (恢复)。
- 备份策略:定期执行数据库与日志备份;在 AG 主副本上优先执行日志备份以避免链路拥塞。
- 重要限制(Linux 上的 SQL Server)
- 分布式事务 DTC 不支持(Linux 上的 SQL Server 2017 不支持;2019 起对 AG 场景的支持仍受限,需谨慎评估)。
- SQL Server Agent 功能受限(部分子系统不可用)。
- FILESTREAM/FileTable 不支持。
- 链接服务器对外部数据源及 AD 身份验证支持受限。
- 名称解析依赖 DNS(WSFC 的“网络名称”等价物)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos上sqlserver集群部署
本文地址: https://pptw.com/jishu/786095.html
