在 Ubuntu 上部署 SQL Server 集群,通常有两种主流方案:
下面以 SQL Server 2019 / 2022 + Ubuntu 20.04/22.04 + Pacemaker + Always On AG 为例,说明标准做法。
Node1 (Ubuntu) ─┐
├─ Pacemaker Cluster
Node2 (Ubuntu) ─┘
│
SQL Server Always On Availability Group
每个节点执行:
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list)"
sudo apt update
sudo apt install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
选择 Developer / Standard / Enterprise
sudo apt install -y pacemaker pcs fence-agents
sudo passwd hacluster
sudo systemctl enable pcsd
sudo systemctl start pcsd
在 Node1 执行:
sudo pcs cluster auth node1 node2 -u hacluster -p 你的密码
sudo pcs cluster setup --name sqlcluster node1 node2
sudo pcs cluster start --all
sudo pcs cluster enable --all
检查状态:
pcs status
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
sudo ufw allow 1433/tcp
sudo ufw allow 5022/tcp
CREATE ENDPOINT [Hadr_endpoint]
STATE=STARTED
AS TCP (LISTENER_PORT=5022)
FOR DATABASE_MIRRORING (ROLE=ALL);
CREATE AVAILABILITY GROUP [sqlag]
WITH (CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
'node1' WITH (
ENDPOINT_URL = 'tcp://node1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL
),
'node2' WITH (
ENDPOINT_URL = 'tcp://node2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL
);
ALTER AVAILABILITY GROUP [sqlag] JOIN;
sudo pcs resource create sqlag ocf:mssql:ag \
ag_name=sqlag \
op monitor timeout=30s interval=10s
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 cidr_netmask=24
pcs status
ssms 连接虚拟IP
| 问题 | 原因 |
|---|---|
| AG 不显示 | hadr 未启用 |
| 无法 failover | FAILOVER_MODE ≠ EXTERNAL |
| 权限错误 | hacluster 权限不足 |
| 网络不通 | 防火墙 / hosts |
✅ 生产环境:
❌ 不推荐:
如果你需要:
告诉我你的场景,我可以直接给你完整脚本。