SQL Server在Ubuntu上的集群配置方法
在Ubuntu系统上配置SQL Server集群,主要支持两种主流方案:AlwaysOn可用性组(原生Linux支持,高可用性与数据冗余兼顾)和故障转移群集实例(需依赖第三方工具,如Pacemaker/Corosync)。以下是详细配置步骤及注意事项:
系统与环境要求
sudo timedatectl set-ntp true)。安装SQL Server
在所有集群节点上执行以下命令安装SQL Server:
# 导入Microsoft GPG密钥
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
# 添加SQL Server Ubuntu仓库
sudo apt-add-repository https://packages.microsoft.com/ubuntu/$(lsb_release -rs)/prod
# 更新软件包索引
sudo apt update
# 安装SQL Server引擎
sudo apt install -y mssql-server
# 运行配置向导(设置SA密码等)
sudo /opt/mssql/bin/mssql-conf setup
# 启动SQL Server服务并设置开机自启
sudo systemctl start mssql-server
sudo systemctl enable mssql-server
AlwaysOn可用性组是SQL Server针对Linux优化的原生高可用性解决方案,无需依赖Windows环境,支持跨节点数据复制与自动/手动故障转移。
启用AlwaysOn功能:
编辑SQL Server配置文件,开启AlwaysOn并指定监听端口:
sudo nano /var/opt/mssql/mssql.conf
添加或修改以下内容:
hadr.hadrenabled = 1
network.ipaddress = 0.0.0.0,1433
重启SQL Server服务使配置生效:
sudo systemctl restart mssql-server
创建可用性组:
使用sqlcmd工具连接SQL Server,执行以下SQL脚本:
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Your_SA_Password' -Q "
CREATE AVAILABILITY GROUP [AG_Name]
WITH (AUTOMATED_BACKUP_PREFERENCE = PRIMARY,
FAILURE_CONDITION_LEVEL = 3,
HEALTH_CHECK_TIMEOUT = 30000)
FOR REPLICA ON
N'Primary_Node_Name' WITH (ENDPOINT_URL = N'TCP://Primary_Node_IP:5022',
FAILOVER_MODE = AUTOMATIC,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
N'Secondary_Node_Name' WITH (ENDPOINT_URL = N'TCP://Secondary_Node_IP:5022',
FAILOVER_MODE = MANUAL,
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
GO"
注:
AUTOMATED_BACKUP_PREFERENCE指定备份优先级(PRIMARY表示主节点优先);AVAILABILITY_MODE可选择同步(数据实时同步)或异步(性能优先)提交。
创建数据库镜像证书:
为实现副本间安全通信,需在主节点创建证书并复制到辅助节点:
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Your_SA_Password' -Q "
CREATE CERTIFICATE AG_Cert
WITH SUBJECT = 'AlwaysOn Availability Group Certificate';
BACKUP CERTIFICATE AG_Cert
TO FILE = '/var/opt/mssql/backup/AG_Cert.cer';
GO"
将生成的AG_Cert.cer文件复制到所有辅助节点的/var/opt/mssql/backup/目录。
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Your_SA_Password' -Q "
CREATE ENDPOINT [Hadr_endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = ALL);
GO"
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Your_SA_Password' -Q "
CREATE CERTIFICATE AG_Cert
FROM FILE = '/var/opt/mssql/backup/AG_Cert.cer';
GO"
sudo /opt/mssql-tools/bin/sqlcmd -S Primary_Node_IP -U SA -P 'Your_SA_Password' -Q "
ALTER AVAILABILITY GROUP [AG_Name]
JOIN WITH (CLUSTER_TYPE = NONE);
GO"
sudo /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Your_SA_Password' -Q "
SELECT name, role_desc, operational_state_desc
FROM sys.dm_hadr_availability_replica_states;
GO"
正常状态应为:主节点role_desc为PRIMARY,辅助节点为SECONDARY,operational_state_desc为ONLINE。若需将SQL Server实例与Linux高可用性集群(如Pacemaker/Corosync)集成,需通过第三方工具实现自动故障转移。
在所有节点上执行:
sudo apt install -y pacemaker corosync pcs
# 设置pcs认证(所有节点密码一致)
sudo passwd hacluster
sudo pcs cluster auth node1 node2 -u hacluster
# 创建集群
sudo pcs cluster setup --name SQL_Cluster node1 node2
# 启动集群
sudo pcs cluster start --all
sudo pcs cluster enable --all
sudo pcs resource create SQL_Server ocf:mssql:fci \
instance_name=MSSQLSERVER \
op monitor interval=30s
sudo pcs resource create Virtual_IP ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 cidr_netmask=24 \
op monitor interval=30s
sudo pcs constraint colocation add Virtual_IP with SQL_Server INFINITY
sudo pcs constraint order promote SQL_Server then start Virtual_IP
sudo pcs cluster stop node1
sudo pcs status
正常情况下,虚拟IP与SQL Server资源应迁移至节点2。mssql)对共享存储(故障转移群集实例)或备份目录(AlwaysOn)有读写权限。pcs status(Pacemaker集群)或sys.dm_hadr_availability_replica_states(AlwaysOn)检查集群状态,及时处理故障节点。以上步骤覆盖了SQL Server在Ubuntu上的主要集群配置方案,可根据业务需求选择合适的方案实施。建议参考Microsoft官方文档(如《SQL Server on Linux High Availability》)获取最新细节。