Windows Server2022下使用SQL Server2019开发版搭建高可用集群

Windows Server2022下使用SQL Server2019开发版搭建高可用集群

一、准备工作

  • 非域控环境下搭建高可用集群。
  • 准备三台Windws Server 2022的服务器,并在服务器上安装SQL SERVER 2019 Developer版本,并且三台服务器都的账号和密码都使用一样的。也可以使用VMWare安装三台虚拟机(本教程使用的方法)。
  • 三台服务器的IP如下:
  • 主节点:192.168.3.28,机器名:WIN-QOTTULEM2MD
  • 副节点:192.168.3.29,机器名:WIN-A9I9Q6PR4DL
  • 副节点:192.168.3.30,机器名:WIN-9VFMKPKSUQ5
  • 备注:上面的机器名,这里写出来,是因为后面在创建可用集群节点的时候,会用到。

二、操作步骤

2.0 防火墙端口放开

  • 关闭防火墙,或者在防火墙里面增加一个入站规则,把以下端口都放开:1433, 5022, 135, 3343, 445

2.1 开启Aways On功能

  • 在三台服务器上,开启Aways On功能,使用powsershell,以管理员的方式执行以下命令:

    Enable-SqlAlwaysOn -ServerInstance "localhost" -Force

2.2 创建证书用于端点认证(非域环境必须使用证书)

  • 创建证书,尽量将证书的过期日期设置长一点,防止证书到期,导致可用性组中断。

  • 在主节点(192.168.3.28)上执行以下SQL语句:

    -- 创建主密钥
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'fuckus123456';

    -- 创建证书
    CREATE CERTIFICATE AG_Certificate_28
    WITH SUBJECT = 'AG Certificate for 192.168.3.28',
    START_DATE = '2025-07-19', -- 开始日期
    EXPIRY_DATE = '9999-12-31'; -- 到期日期

    -- 备份证书
    BACKUP CERTIFICATE AG_Certificate_28
    TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_28.cer';

  • 在第二个节点(192.168.3.29)上执行:

    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'fuckus123456';

    CREATE CERTIFICATE AG_Certificate_29
    WITH SUBJECT = 'AG Certificate for 192.168.3.29',
    START_DATE = '2025-07-19', -- 开始日期
    EXPIRY_DATE = '9999-12-31'; -- 到期日期

    BACKUP CERTIFICATE AG_Certificate_29
    TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_29.cer';

  • 在第三个节点(192.168.3.30)上执行:

    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'fuckus123456';

    CREATE CERTIFICATE AG_Certificate_30
    WITH SUBJECT = 'AG Certificate for 192.168.3.30',
    START_DATE = '2025-07-19', -- 开始日期
    EXPIRY_DATE = '9999-12-31'; -- 到期日期

    BACKUP CERTIFICATE AG_Certificate_30
    TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_30.cer';

  • 备注:注意上面证书的路径都是在SQL Server默认安装目录的备份目录,如果你需要使用其他目录,请先配置好文件夹的权限,否则会出现以下错误:

    无法写入文件 'C:\cert\AG_Certificate_28.cer'。请确保您有写权限、文件路径有效以及该文件尚不存在。

2.3 创建端点

  • 在三台服务器上的分别执行以下SQL语句:

    --在192.168.3.28上执行
    CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
    AUTHENTICATION = CERTIFICATE AG_Certificate_28, -- 使用当前节点的证书名
    ENCRYPTION = REQUIRED ALGORITHM AES,
    ROLE = ALL
    );

    --在192.168.3.29上执行
    CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
    AUTHENTICATION = CERTIFICATE AG_Certificate_29, -- 使用当前节点的证书名
    ENCRYPTION = REQUIRED ALGORITHM AES,
    ROLE = ALL
    );

    --在192.168.3.30上执行
    CREATE ENDPOINT [Hadr_endpoint]
    STATE = STARTED
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (
    AUTHENTICATION = CERTIFICATE AG_Certificate_30, -- 使用当前节点的证书名
    ENCRYPTION = REQUIRED ALGORITHM AES,
    ROLE = ALL
    );

2.4 在所有节点之间共享证书

  • 将每个节点的证书复制到其他两个节点上(例如使用共享文件夹或手动复制),例如我们需要把192.168.3.29和192.168.3.30两个服务器上的证书,都复制到192.168.3.28上的C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\目录里面。

  • 三个服务器上的证书都准备好了后,分别执行以下SQL脚本:

  • 在192.168.3.28上执行:

    CREATE LOGIN AG_Login_29 WITH PASSWORD = 'fuckus123456';
    CREATE LOGIN AG_Login_30 WITH PASSWORD = 'fuckus123456';

    CREATE CERTIFICATE AG_Certificate_29 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_29.cer';
    CREATE CERTIFICATE AG_Certificate_30 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_30.cer';

    CREATE USER AG_User_29 FOR LOGIN AG_Login_29;
    CREATE USER AG_User_30 FOR LOGIN AG_Login_30;

    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_29;
    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_30;

  • 在192.168.3.29上执行:

    CREATE LOGIN AG_Login_28 WITH PASSWORD = 'fuckus123456';
    CREATE LOGIN AG_Login_30 WITH PASSWORD = 'fuckus123456';

    CREATE CERTIFICATE AG_Certificate_28 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_28.cer';
    CREATE CERTIFICATE AG_Certificate_30 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_30.cer';

    CREATE USER AG_User_28 FOR LOGIN AG_Login_28;
    CREATE USER AG_User_30 FOR LOGIN AG_Login_30;

    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_28;
    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_30;

  • 在192.168.3.30上执行:

    CREATE LOGIN AG_Login_28 WITH PASSWORD = 'fuckus123456';
    CREATE LOGIN AG_Login_29 WITH PASSWORD = 'fuckus123456';

    CREATE CERTIFICATE AG_Certificate_28 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_28.cer';
    CREATE CERTIFICATE AG_Certificate_29 FROM FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\AG_Certificate_29.cer';

    CREATE USER AG_User_28 FOR LOGIN AG_Login_28;
    CREATE USER AG_User_29 FOR LOGIN AG_Login_29;

    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_28;
    GRANT CONNECT ON ENDPOINT::Hadr_endpoint TO AG_Login_29;

2.5 在主节点上创建可用性组

  • 在192.168.3.28上执行以下SQL语句:

    CREATE AVAILABILITY GROUP [AG_Group]
    WITH (CLUSTER_TYPE = NONE)
    FOR REPLICA ON
    N'WIN-QOTTULEM2MD' WITH (
    ENDPOINT_URL = N'TCP://192.168.3.28:5022',
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC,
    PRIMARY_ROLE(ALLOW_CONNECTIONS = ALL)
    ),
    N'WIN-A9I9Q6PR4DL' WITH (
    ENDPOINT_URL = N'TCP://192.168.3.29:5022',
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)
    ),
    N'WIN-9VFMKPKSUQ5' WITH (
    ENDPOINT_URL = N'TCP://192.168.3.30:5022',
    AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
    FAILOVER_MODE = MANUAL,
    SEEDING_MODE = AUTOMATIC,
    SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL)
    );

  • 备注:这里面使用到的文章最开始提到的机器名,如果你安装SQL Server的时候,都是使用的默认选项,则这里需要改成机器名,否则会出现以下错误:

    消息 35237,级别 16,状态 1,第 35 行
    可用性组 AG_Group 没有任何指定副本映射到你连接到的 SQL Server 实例。请重新输入该命令,并且指定此服务器实例托管其中一个副本。此副本将是初始主副本。

  • 如何查看自己SQL Server服务器上的ServerName,请执行以下SQL语句:

    SELECT @@SERVERNAME AS 'ServerName';

  • 执行后,三台服务器分别输出:

    WIN-QOTTULEM2MD
    WIN-A9I9Q6PR4DL
    WIN-9VFMKPKSUQ5

2.6 其他节点上加入可用性组

  • 在另外两台服务器192.168.3.29和192.168.3.30上分别执行以下SQL语句:

    ALTER AVAILABILITY GROUP [AG_Group] JOIN;
    ALTER AVAILABILITY GROUP [AG_Group] GRANT CREATE ANY DATABASE;

2.7 创建侦听器

  • 在192.168.3.28主节点上执行以下SQL语句:

    ALTER AVAILABILITY GROUP [AG_Group]
    ADD LISTENER 'AG_Listener' (
    WITH IP ((N'192.168.3.31', N'255.255.255.0')),
    PORT = 1433
    );

  • 到此为止,我们的高可用集群就搭建完成了,接下来我将会为大家讲解,如何将192.168.3.28上的数据库JuCheap5加入到集群中。

三、将数据库加入集群

  • 按照下图,使用SQL Server Management Studio就可以将已有的数据库,加入到高可用组里面(添加之前记得先使用完整模式备份数据库),如下图:







四、表结构和数据的同步

  • 接下来,我们查看下数据表结构和数据的同步,录一个简单的操作视频,如下:
相关推荐
阿雄不会写代码1 小时前
图像打标工具/方法的分类和特点说明
人工智能·分类·数据挖掘
G_H_S_3_2 小时前
【网络运维】Linux:LNMP 项目实践
linux·运维·服务器·网络
Fanmeang6 小时前
MPLS LDP概述
运维·网络·华为·路由·mpls·标签·ldp
Menior_7 小时前
【网络基础】深入理解 TCP/IP 协议体系
网络·网络协议·tcp/ip
小明的小名叫小明10 小时前
区块链技术原理(5)-网络
网络·区块链
NorthCastle11 小时前
Docker 网络-单机版
网络·docker·docker网络基础概念·docker网络基础命令
sniper_fandc11 小时前
VirtualBox虚拟机网卡配置
linux·网络·虚拟机
华科云商xiao徐13 小时前
TypeScript在异步处理与类型安全的双重优势
爬虫·数据挖掘·数据分析
哈基米喜欢哈哈哈14 小时前
计算机网络(一)——TCP
网络·tcp/ip·计算机网络
小马哥编程16 小时前
【软考架构】网络规划与设计,三层局域网模型和建筑物综合布线系统PDS
网络·计算机网络·架构·系统架构