setenforce 0)或配置为宽松模式,防火墙开放SQL Server默认端口(1433)、Always On端点端口(5022)。在所有节点执行以下命令安装必要工具:
sudo yum install -y wget curl yum-utils
下载并添加Microsoft官方SQL Server仓库:
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2022.repo
使用YUM安装SQL Server引擎:
sudo yum install -y mssql-server
运行配置脚本,设置SA密码(需符合复杂度要求)和实例版本:
sudo /opt/mssql/bin/mssql-conf setup
选择“Enterprise”或“Standard”版本(根据需求),完成安装后启动服务:
sudo systemctl start mssql-server
sudo systemctl enable mssql-server
在每个节点的SQL Server实例中启用Always On:
USE master;
GO
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'Always On Availability Groups', 1;
RECONFIGURE;
GO
重启SQL Server服务使配置生效:
sudo systemctl restart mssql-server
若需更高级的高可用性(如跨节点自动故障转移),需创建WSFC:
Install-WindowsFeature -Name Failover-Clustering)。在主节点(Primary Replica)上执行以下SQL命令,创建可用性组:
CREATE AVAILABILITY GROUP [YourAGName]
FOR DATABASE [YourDatabaseName]  -- 替换为目标数据库
REPLICA ON
    'Node1' WITH (
        ENDPOINT_URL = 'TCP://Node1_IP:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  -- 同步提交(强一致性)
        FAILOVER_MODE = AUTOMATIC,               -- 自动故障转移
        PRIMARY_ROLE (ALLOW_CONNECTIONS = ALL),  -- 主节点允许所有连接
        SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)  -- 辅助节点只读
    ),
    'Node2' WITH (
        ENDPOINT_URL = 'TCP://Node2_IP:5022',
        FAILOVER_MODE = AUTOMATIC
    );
GO
在辅助节点(Secondary Replica)上执行以下命令,将节点加入可用性组:
ALTER AVAILABILITY GROUP [YourAGName]
ADD REPLICA ON
    'Node2' WITH (
        ENDPOINT_URL = 'TCP://Node2_IP:5022',
        FAILOVER_MODE = AUTOMATIC
    );
GO
在主节点上备份数据库,并还原到辅助节点(需使用WITH NORECOVERY选项):
-- 主节点备份
BACKUP DATABASE [YourDatabaseName] 
TO DISK = '/var/opt/mssql/backup/YourDatabaseName.bak'
WITH INIT, STATS = 10;
GO
-- 辅助节点还原(在辅助节点执行)
RESTORE DATABASE [YourDatabaseName] 
FROM DISK = '/var/opt/mssql/backup/YourDatabaseName.bak'
WITH NORECOVERY, MOVE 'YourDatabaseName_Data' TO '/var/opt/mssql/data/YourDatabaseName.mdf',
MOVE 'YourDatabaseName_Log' TO '/var/opt/mssql/data/YourDatabaseName.ldf';
GO
在主节点上执行以下命令,授予连接权限并验证状态:
-- 授予连接权限
ALTER AVAILABILITY GROUP [YourAGName]
GRANT CONNECT TO [YourLoginName];  -- 替换为实际登录名
GO
-- 验证可用性组状态
SELECT ag.name AS AGName, ar.replica_server_name AS ReplicaName, 
       ars.role_desc AS Role, ars.synchronization_health_desc AS SyncStatus
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id
JOIN sys.dm_hadr_availability_replica_states ars ON ar.replica_id = ars.replica_id;
GO
若未使用WSFC,可通过Pacemaker+Corosync实现集群编排:
在所有节点执行:
sudo yum install -y pacemaker corosync pcs
编辑/etc/corosync/corosync.conf,定义节点通信:
totem {
    version: 2
    cluster_name: sql_cluster
    transport: udpu
    interface {
        ringnumber: 0
        bindnetaddr: 192.168.1.0  # 替换为节点所在网段
        mcastport: 5405
    }
}
nodelist {
    node {
        ring0_addr: Node1_IP
        nodeid: 1
    }
    node {
        ring0_addr: Node2_IP
        nodeid: 2
    }
}
quorum {
    provider: corosync_votequorum
    two_node: 1  # 两节点集群启用
}
启动Corosync和Pacemaker:
sudo systemctl start corosync
sudo systemctl start pacemaker
sudo systemctl enable corosync
sudo systemctl enable pacemaker
创建SQL Server资源脚本(sql_resource.sh):
#!/bin/bash
sudo pcs resource create mssqlha ocf:mssql:fci \
    op monitor interval=30s \
    op start timeout=120s \
    op stop timeout=120s
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 \
    ip=192.168.1.100  # 虚拟IP(客户端连接地址)
sudo pcs constraint colocation add virtualip with mssqlha INFINITY
sudo pcs constraint order mssqlha then virtualip
执行脚本并验证集群状态:
chmod +x sql_resource.sh
./sql_resource.sh
sudo pcs status
sqlcmd连接虚拟IP,验证数据库访问。pcs status查看状态)。sysadmin角色)。