ubuntu

Ubuntu SQL Server集群搭建方案

小樊
39
2025-10-03 10:18:53
栏目: 云计算

Ubuntu环境下SQL Server集群搭建主流方案

一、AlwaysOn可用性组(推荐方案)

AlwaysOn可用性组是SQL Server针对Linux平台设计的高级高可用性解决方案,支持跨多个Ubuntu节点的数据库复制与自动/手动故障转移,适用于需要高可用性和数据冗余的企业级应用(如金融、电商核心系统)。
核心配置步骤

  1. 准备工作:确保至少2台Ubuntu服务器(建议使用Ubuntu 20.04 LTS及以上版本),安装相同版本的SQL Server(2017及以上,支持AlwaysOn);配置节点间网络互通(防火墙开放1433端口,用于SQL Server通信;5022端口,用于可用性组端点)。
  2. 安装SQL Server:在所有节点上执行以下命令导入Microsoft仓库密钥、添加Ubuntu存储库并安装SQL Server:
    curl 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
    
  3. 配置SQL Server实例:启动SQL Server服务并设置开机自启:
    sudo systemctl start mssql-server
    sudo systemctl enable mssql-server
    
    登录SQL Server(使用SA账户,密码需符合复杂度要求),启用TCP/IP协议(默认端口1433):
    sqlcmd -S localhost -U SA -P 'YourStrongPassword'
    # 执行以下SQL命令启用TCP/IP
    EXEC sp_configure 'show advanced options', 1;
    RECONFIGURE;
    EXEC sp_configure 'tcpip', 1;
    RECONFIGURE;
    
  4. 创建可用性组:在主节点上执行SQL命令创建可用性组(以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, -- 自动故障转移(生产环境推荐)
            SEEDING_MODE = AUTOMATIC -- 自动种子初始化(无需手动备份恢复)
        ),
        N'Node2' WITH (
            ENDPOINT_URL = N'TCP://Node2:5022',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = AUTOMATIC
        );
    
  5. 配置监听器:创建可用性组监听器(如MyAGListener),客户端通过监听器IP连接可用性组(无需感知主节点变化):
    CREATE AVAILABILITY GROUP LISTENER [MyAGListener]
    WITH IP ((N'192.168.1.100', N'255.255.255.0')), -- 监听器IP(需与节点在同一网段)
    PORT = 1433,
    NAME = N'MyAGListener';
    
  6. 验证配置:在主节点执行以下命令检查可用性组状态(确保所有副本处于HEALTHY状态):
    SELECT * FROM sys.dm_hadr_availability_group_states;
    SELECT * FROM sys.dm_hadr_replica_states;
    
  7. 测试故障转移:手动停止主节点SQL Server服务,观察辅助节点是否自动提升为主节点(可通过监听器连接验证):
    sudo systemctl stop mssql-server
    
    故障转移完成后,原主节点恢复后会自动成为辅助副本。

二、故障转移群集实例(传统方案,需Windows依赖)

故障转移群集实例是将SQL Server实例与Windows Server故障转移群集(WSFC)集成的解决方案,适用于需要与现有Windows基础设施整合的场景(如混合云环境)。但需注意,Ubuntu本身不支持WSFC,需通过虚拟机或双系统运行Windows节点,增加了环境复杂度。
核心配置步骤

  1. 配置Windows WSFC:在Windows服务器上安装故障转移群集功能,创建集群并验证节点间通信(如共享存储、网络延迟)。
  2. 安装SQL Server故障转移群集实例:在WSFC节点上运行SQL Server安装程序,选择“故障转移群集实例”类型,配置群集网络名称和存储资源(如SAN/NAS)。
  3. 迁移数据库至集群:将Ubuntu上的SQL Server数据库备份并恢复至Windows集群实例,配置应用程序连接集群网络名称。
    局限性:依赖Windows节点,增加了硬件和维护成本;无法充分利用Ubuntu的高性价比优势,仅适用于已有Windows基础设施的场景。

三、容器化部署(轻量级方案,适合DevOps)

使用Docker在Ubuntu上部署SQL Server容器,结合Kubernetes或Docker Compose实现集群管理,适用于需要快速部署、弹性扩展的场景(如微服务、测试环境)。
核心配置步骤

  1. 安装Docker Engine:在Ubuntu节点上执行以下命令安装Docker:
    sudo apt-get update
    sudo apt-get install -y docker.io
    sudo systemctl enable --now docker
    
  2. 拉取SQL Server镜像:从Microsoft Docker Hub拉取SQL Server 2019及以上版本的镜像(Ubuntu兼容):
    sudo docker pull mcr.microsoft.com/mssql/server:2019-latest
    
  3. 运行SQL Server容器:启动容器并设置SA密码、端口映射(1433→1433)及数据持久化(挂载卷至宿主机,避免数据丢失):
    sudo docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=YourStrongPassword' \
    -p 1433:1433 --name sql1 -v /var/opt/mssql:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
    
  4. 集群管理
    • Docker Compose:编写docker-compose.yml文件定义多个SQL Server服务,实现容器的批量启动/停止;
    • Kubernetes:使用StatefulSet控制器管理SQL Server容器,配置持久化卷(PV/PVC)、副本集(ReplicaSet)及自动故障转移(需配合Headless Service)。
      优势:快速部署(分钟级)、资源占用低(容器轻量化)、易于扩展(横向增加容器实例);局限性:需掌握Docker/Kubernetes技术,数据持久化需额外配置(如使用NFS或云存储)。

0
看了该问题的人还看了