centos

CentOS SQL Server集群如何搭建

小樊
46
2025-09-26 18:38:29
栏目: 云计算

CentOS上搭建SQL Server集群指南(以Always On可用性组为例)

一、准备工作

1. 环境要求

2. 依赖安装

在所有节点执行以下命令安装必要工具:

sudo yum install -y wget curl yum-utils

3. 添加SQL Server YUM仓库

下载并添加Microsoft官方SQL Server仓库:

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2022.repo

4. 安装SQL Server

使用YUM安装SQL Server引擎:

sudo yum install -y mssql-server

5. 初始化SQL Server配置

运行配置脚本,设置SA密码(需符合复杂度要求)和实例版本:

sudo /opt/mssql/bin/mssql-conf setup

选择“Enterprise”或“Standard”版本(根据需求),完成安装后启动服务:

sudo systemctl start mssql-server
sudo systemctl enable mssql-server

二、配置Always On可用性组(AG)

1. 启用Always On功能

在每个节点的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

2. 创建Windows故障转移群集(WSFC,可选但推荐)

若需更高级的高可用性(如跨节点自动故障转移),需创建WSFC:

3. 创建可用性组

在主节点(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

4. 加入辅助副本

在辅助节点(Secondary Replica)上执行以下命令,将节点加入可用性组:

ALTER AVAILABILITY GROUP [YourAGName]
ADD REPLICA ON
    'Node2' WITH (
        ENDPOINT_URL = 'TCP://Node2_IP:5022',
        FAILOVER_MODE = AUTOMATIC
    );
GO

5. 备份与还原数据库

在主节点上备份数据库,并还原到辅助节点(需使用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

6. 完成可用性组配置

在主节点上执行以下命令,授予连接权限并验证状态:

-- 授予连接权限
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

三、可选:使用Pacemaker实现跨节点高可用(无WSFC)

若未使用WSFC,可通过Pacemaker+Corosync实现集群编排:

1. 安装Pacemaker和Corosync

在所有节点执行:

sudo yum install -y pacemaker corosync pcs

2. 配置Corosync

编辑/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

3. 创建SQL Server资源

创建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

四、验证与测试

  1. 连接测试:使用SQL Server Management Studio(SSMS)或sqlcmd连接虚拟IP,验证数据库访问。
  2. 故障转移测试:停止主节点SQL Server服务,观察辅助节点是否自动提升为主节点(通过pcs status查看状态)。
  3. 性能测试:运行负载测试,验证同步提交的性能影响(同步提交会降低写入性能,但保证强一致性)。

注意事项

0
看了该问题的人还看了