在Ubuntu上配置SQL Server高可用性,Always On Availability Groups (AGs) 是微软官方推荐的核心方案,需结合Pacemaker集群管理器实现故障转移。以下是详细配置步骤及关键注意事项:
1433
、AG终结点端口5022
)。ntp
或chrony
,确保时间偏差小于1秒(避免集群脑裂)。安装SQL Server:
在所有节点执行以下命令,添加Microsoft仓库并安装SQL Server:
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list)"
sudo apt-get update
sudo apt-get install -y mssql-server
安装完成后,运行sudo /opt/mssql/bin/mssql-conf setup
设置SA密码及实例配置。
启用Always On功能:
编辑SQL Server配置文件/var/opt/mssql/mssql.conf
,添加以下参数:
[hadr]
hadr_enabled = 1
重启SQL Server服务使配置生效:
sudo systemctl restart mssql-server
Pacemaker是Ubuntu上管理SQL Server AGs的关键集群工具,需先搭建集群环境:
安装Pacemaker组件:
在所有节点安装Pacemaker、Corosync及资源代理:
sudo apt-get install -y pacemaker pcs fence-agents resource-agents
设置集群认证:
在其中一个节点(如node1
)运行以下命令,创建集群认证:
sudo pcs host auth node1 node2 node3 -u hacluster -p <hacluster_password>
创建并启动集群:
使用pcs cluster setup
命令创建集群(替换clusterName
及节点名称):
sudo pcs cluster setup --name sqlCluster node1 node2 node3
sudo pcs cluster start --all
sudo pcs cluster enable --all
配置集群属性:
sudo pcs property set stonith-enabled=true
sudo pcs property set cluster-recheck-interval=2min
在主节点上创建AG:
使用sqlcmd
连接到主节点SQL Server,执行以下命令创建AG(替换MyAG
、YourDatabase
及节点信息):
CREATE AVAILABILITY GROUP [MyAG]
FOR DATABASE [YourDatabase]
REPLICA ON
N'node1' WITH (
ENDPOINT_URL = N'TCP://node1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE)
),
N'node2' WITH (
ENDPOINT_URL = N'TCP://node2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = AUTOMATIC,
PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE)
);
创建AG后,将需要高可用的数据库加入AG:
ALTER AVAILABILITY GROUP [MyAG] ADD DATABASE [YourDatabase];
在辅助节点上加入AG:
连接到辅助节点(如node2
),执行以下命令加入AG:
ALTER AVAILABILITY GROUP [MyAG] JOIN;
Pacemaker需将AG作为集群资源管理,实现自动故障转移:
安装SQL Server资源代理:
确保已安装mssql-server-ha
资源代理(部分Ubuntu版本需单独安装):
sudo apt-get install -y mssql-server-ha
创建AG资源:
使用pcs
命令创建AG资源(替换MyAG
为AG名称):
sudo pcs resource create ag_listener ocf:mssql:ag ag_name=MyAG meta failure-timeout=30s
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<虚拟IP> cidr_netmask=24 op monitor interval=10s
添加约束(确保资源共存):
sudo pcs constraint colocation add virtualip with ag_listener INFINITY
sudo pcs constraint order promote ag_listener then start virtualip
检查AG状态:
在主节点运行以下命令,确认AG及副本状态正常:
SELECT * FROM sys.dm_hadr_availability_group_states;
SELECT * FROM sys.dm_hadr_replica_states;
测试故障转移:
sudo systemctl stop mssql-server
pcs status
查看资源状态)。virtualip
)需在DNS中注册监听器名称(如aglistener.example.com
),客户端通过该名称连接AG。pcs status
、SQL Server Management Studio (SSMS)
定期监控集群及AG状态,及时处理故障。通过以上步骤,即可在Ubuntu上实现SQL Server的高可用性,确保数据库服务的持续运行与快速故障恢复。