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就可以将已有的数据库,加入到高可用组里面(添加之前记得先使用完整模式备份数据库),如下图:







四、表结构和数据的同步

  • 接下来,我们查看下数据表结构和数据的同步,录一个简单的操作视频,如下:
相关推荐
AORO202511 分钟前
遨游三防科普:三防平板是指哪三防?一般什么人用?
网络·5g·电脑·制造·信息与通信
A_dewen3 小时前
Windows Server 设置MySQL自动备份任务(每日凌晨2点执行)
windows·mysql
攻城狮7号3 小时前
【AI时代速通QT】第五节:Qt Creator如何引入第三方库,以OpenCV为例
c++·windows·qt·opencv·第三方库
塔能物联运维5 小时前
电缆安全双保险:不止防盗,更能防触电的塔能智慧照明守护方案
网络
往日情怀酿做酒 V17639296387 小时前
文本数据分析
大数据·数据挖掘·数据分析
lichenyang4538 小时前
Http和Https
网络·网络协议·http
胖大和尚9 小时前
使用 sshfs 工具将远程 Linux 主机的文件夹挂载到本地
linux·服务器·网络
chen_note9 小时前
Linux网络信息(含ssh服务和rsync)
linux·运维·服务器·网络·ssh·远程工作·rsync
Maybe_ch11 小时前
WinForm-免费,可商用的WinForm UI框架推荐
windows·ui·c#