当前位置: 首页 > news >正文

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

四、表结构和数据的同步

  • 接下来,我们查看下数据表结构和数据的同步,录一个简单的操作视频,如下:

在这里插入图片描述

http://www.lryc.cn/news/594636.html

相关文章:

  • 如何用纯 HTML 文件实现 Vue.js 应用,并通过 CDN 引入 Element UI
  • 【js(3)】执行上下文/作用域链/垃圾回收与内存泄漏/闭包
  • Vue组件之间通信
  • C语言运算符优先级“潜规则”
  • 数据库的介绍和安装
  • HTTP,HTTPS
  • 文件的写出操作|文件的追加写入操作|文件操作的综合案例
  • mac安装node的步骤
  • IDEA 同时修改某个区域内所有相同变量名
  • 跑腿小程序|基于微信小程序的跑腿平台小程序设计与实现(源码+数据库+文档)
  • Taro 生命周期相关 API 详解
  • Idea或Pycharm上.idea的忽略提交的问题总结
  • Linux初识网络
  • 用 STM32 的 SYSTICK 定时器与端口复用重映射玩转嵌入式开发
  • 分布在内侧内嗅皮层(MEC)的带状细胞对NLP中的深层语义分析有什么积极的影响和启示
  • 微服务的编程测评系统-身份认证-管理员登录前端
  • .NET依赖注入IOC你了解吗?
  • 智能体性能优化:延迟、吞吐量与成本控制
  • 机器阅读理解(MRC)全面解析:任务分类、评估指标与57个数据集资源盘点
  • Nacos安装单例模式
  • 西门子 SIMATIC S7-1500 数字量输入模块:深度剖析与应用指南
  • ABQ-LLM:用于大语言模型的任意比特量化推理加速
  • Zabbix 企业级分布式监控系统深度解析
  • Android 单编 framework 相关产物输出介绍
  • 3.组合式API父子通信
  • OpenAI开发的一款实验性大型语言模型(LLM),在2025年国际数学奥林匹克竞赛(IMO)中达到了金牌水平
  • 什么是商业智能BI数据分析的指标爆炸?
  • 悬镜安全将受邀参加2025开放原子开源生态大会
  • “融合进化,智领未来”电科金仓引领数字化转型新纪元
  • FFmpeg:数字媒体的终极瑞士军刀