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







四、表结构和数据的同步

  • 接下来,我们查看下数据表结构和数据的同步,录一个简单的操作视频,如下:
相关推荐
释怀不想释怀4 分钟前
Linux网络基础(ip,域名)
linux·网络·tcp/ip
开开心心就好13 分钟前
AI人声伴奏分离工具,离线提取伴奏K歌用
java·linux·开发语言·网络·人工智能·电脑·blender
子榆.17 分钟前
CANN 性能分析与调优实战:使用 msprof 定位瓶颈,榨干硬件每一分算力
大数据·网络·人工智能
驱动探索者44 分钟前
U盘发展史
网络·cpu·u盘
青春给了代码1 小时前
基于WebSocket实现在线语音(实时+保存)+文字双向传输完整实现
网络·websocket·网络协议
呉師傅1 小时前
【使用技巧】Adobe Photoshop 2024调整缩放与布局125%后出现点菜单项漂移问题的简单处理
运维·服务器·windows·adobe·电脑·photoshop
梦帮科技2 小时前
OpenClaw 桥接调用 Windows MCP:打造你的 AI 桌面自动化助手
人工智能·windows·自动化
Trouvaille ~2 小时前
【Linux】TCP Socket编程实战(一):API详解与单连接Echo Server
linux·运维·服务器·网络·c++·tcp/ip·socket
liann1192 小时前
3.1_网络——基础
网络·安全·web安全·http·网络安全
独行soc3 小时前
2026年渗透测试面试题总结-17(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮