SQL Server Always On部署
SQL Server Always On部署
这次 SQL Server 是 Linux 机器,不是 Windows 上那套 WSFC。
所以 Always On 这里要先说明一下:Linux 下可用性组本身还是 SQL Server 的 AG,但集群管理走 Pacemaker。客户说“主从容灾”,不能直接按 MySQL 主从去理解。
这里记录核心步骤,具体环境里的主机名和 IP 都脱敏。
1 | db01 10.10.20.11 |
开启 HADR
两台都执行:
1 | /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 |
检查:
1 | SELECT SERVERPROPERTY('IsHadrEnabled') AS IsHadrEnabled; |
返回 1 才对。
创建 master key、证书和 endpoint 用户
db01:
1 | USE master; |
db02 同理创建自己的证书。然后互相复制 .cer 文件。
例如 db02 上导入 db01 的证书,并建出对应的 login:
1 | USE master; |
证书这块最容易因为文件权限卡住。SQL Server 进程要能读。
1 | chown mssql:mssql /var/opt/mssql/data/*.cer |
创建 endpoint
两台都创建 endpoint,端口这里用 5022。注意 endpoint 要在给对方 login 授权前创建。
1 | CREATE ENDPOINT Hadr_endpoint |
如果是在 db02,就用 db02 自己的证书。
endpoint 建完以后,再授权对方 login 连接 endpoint。比如 db02 上给 db01:
1 | GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO db01_login; |
db01 上也要反过来给 db02 做同样的导入、建 login、授权。这个是双向的。
放行端口:
1 | firewall-cmd --permanent --add-port=5022/tcp |
互测:
1 | nc -vz db01 5022 |
准备数据库
db01 上:
1 | ALTER DATABASE zentao SET RECOVERY FULL; |
把备份复制到 db02,还原成 NORECOVERY:
1 | RESTORE DATABASE zentao |
创建可用性组
db01 上示例:
1 | CREATE AVAILABILITY GROUP ag_zentao |
db02 上加入:
1 | ALTER AVAILABILITY GROUP ag_zentao JOIN WITH (CLUSTER_TYPE = EXTERNAL); |
看状态
1 | SELECT |
数据库同步:
1 | SELECT |
Pacemaker
Linux 下自动故障转移要配 Pacemaker。这个地方不要只在 SQL Server 里建 AG 就以为完事。
大体步骤是:
1 | 1. 安装 pacemaker、pcs、资源代理 |
具体命令要按客户环境版本走,不能照抄到所有机器。
这里最容易错的地方
- Linux AG 不是 Windows WSFC,集群层要 Pacemaker。
- 数据库必须 FULL 恢复模式,并且辅助副本要先还原到
NORECOVERY。 - endpoint 端口 5022 要互通。
- 证书文件权限经常会卡。
CLUSTER_TYPE = EXTERNAL不要漏。- 应用不要连 db01/db02 固定 IP,后面要连 Listener / VIP。
参考
- SQL Server Linux 可用性组概述:https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-overview
- 配置 Linux 可用性组:https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-configure-ha
- Pacemaker 集群配置:https://learn.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-cluster-pacemaker
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无尽infinite!

