ubuntu

Ubuntu SQL Server高可用性配置

小樊
45
2025-10-07 15:19:25
栏目: 云计算

Ubuntu上SQL Server高可用性配置指南

在Ubuntu上配置SQL Server高可用性,Always On Availability Groups (AGs) 是微软官方推荐的核心方案,需结合Pacemaker集群管理器实现故障转移。以下是详细配置步骤及关键注意事项:

一、前提条件

  1. 环境准备:至少3台Ubuntu服务器(2节点运行SQL Server,1节点作为仲裁见证);所有节点安装相同版本的SQL Server(2017及以上,支持AGs)。
  2. 网络配置:节点间网络互通,防火墙开放必要端口(SQL Server默认端口1433、AG终结点端口5022)。
  3. 时间同步:所有节点安装ntpchrony,确保时间偏差小于1秒(避免集群脑裂)。

二、安装与配置SQL Server

  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密码及实例配置。

  2. 启用Always On功能
    编辑SQL Server配置文件/var/opt/mssql/mssql.conf,添加以下参数:

    [hadr]
    hadr_enabled = 1
    

    重启SQL Server服务使配置生效:

    sudo systemctl restart mssql-server
    

三、配置Pacemaker集群

Pacemaker是Ubuntu上管理SQL Server AGs的关键集群工具,需先搭建集群环境:

  1. 安装Pacemaker组件
    在所有节点安装Pacemaker、Corosync及资源代理:

    sudo apt-get install -y pacemaker pcs fence-agents resource-agents
    
  2. 设置集群认证
    在其中一个节点(如node1)运行以下命令,创建集群认证:

    sudo pcs host auth node1 node2 node3 -u hacluster -p <hacluster_password>
    
  3. 创建并启动集群
    使用pcs cluster setup命令创建集群(替换clusterName及节点名称):

    sudo pcs cluster setup --name sqlCluster node1 node2 node3
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    
  4. 配置集群属性

    • 启用STONITH(节点隔离,生产环境必选,测试环境可临时禁用):
      sudo pcs property set stonith-enabled=true
      
    • 设置集群检查间隔(避免频繁故障转移):
      sudo pcs property set cluster-recheck-interval=2min
      

四、创建Always On可用性组

  1. 在主节点上创建AG
    使用sqlcmd连接到主节点SQL Server,执行以下命令创建AG(替换MyAGYourDatabase及节点信息):

    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];
    
  2. 在辅助节点上加入AG
    连接到辅助节点(如node2),执行以下命令加入AG:

    ALTER AVAILABILITY GROUP [MyAG] JOIN;
    

五、配置Pacemaker管理AG资源

Pacemaker需将AG作为集群资源管理,实现自动故障转移:

  1. 安装SQL Server资源代理
    确保已安装mssql-server-ha资源代理(部分Ubuntu版本需单独安装):

    sudo apt-get install -y mssql-server-ha
    
  2. 创建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
    
  3. 添加约束(确保资源共存)

    • 主机托管约束(AG与虚拟IP在同一节点):
      sudo pcs constraint colocation add virtualip with ag_listener INFINITY
      
    • 排序约束(先启动虚拟IP,再启动AG):
      sudo pcs constraint order promote ag_listener then start virtualip
      

六、验证配置

  1. 检查AG状态
    在主节点运行以下命令,确认AG及副本状态正常:

    SELECT * FROM sys.dm_hadr_availability_group_states;
    SELECT * FROM sys.dm_hadr_replica_states;
    
  2. 测试故障转移

    • 手动停止主节点SQL Server服务:
      sudo systemctl stop mssql-server
      
    • 观察Pacemaker是否将AG故障转移到辅助节点(通过pcs status查看资源状态)。

七、关键注意事项

通过以上步骤,即可在Ubuntu上实现SQL Server的高可用性,确保数据库服务的持续运行与快速故障恢复。

0
看了该问题的人还看了