SQL server2019无域安装always on高可用集群

SQL server2019无域安装always on高用集群

环境:

Windows server 2022

SQL server 2019 标准版

#说明:

SQL server标准版本官方网站提示不能创建always on可用性组,但是可以支持故障转移群集。

经过询问大师,以及一番测试,标准版也是可以支持always on可用性组的,只不过副本节点不支持可读,且一个可用性组只能支持一个库。

角色 hostname IP 备注
sqldb1 sqldb1.test.com 192.168.56.101 primary
sqldb2 sqldb2.test.com 192.168.56.102 standby
iscsiserver iscsidisk.test.com 192.168.56.103 提供仲裁盘
null cluster 192.168.56.105 群集IP
null listener 192.168.56.107 可用性组监听

端口均为1433

架构

配置主机名以及hosts(所有节点)

复制代码
192.168.56.101	sqldb1.test.com
192.168.56.102	sqldb2.test.com
192.168.56.103	iscsidisk.test.com
192.168.56.105	cluster
192.168.56.107	mkdb

配置iSCSI仲裁盘(iSCSIserver)

添加iSCSI目标服务器

添加仲裁盘

所有db节点发起iSCSI连接并格式化磁盘

首先在sqldb1节点操作

GPT格式化

其他db节点只需要发起iSCSI连接并联机磁盘即可

所有数据库节点安装故障转移群集

创建群集(在sqldb1操作即可)




下面2个角色是创建可用性组之后才会有的。

安装SQL server数据库(所有db节点)

安装过程省略。

启用可用性组

HADR为true说明启用成功。

查看群集信息

新建可用性组

更改服务登录名为administrator

创建证书

在db节点的c盘创建目录cert,并设置共享和读写权限,需要添加system账号读写权限,否则创建证书失败。

主库创建证书,并把证书拷贝到从库

复制代码
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Smtgbk123';

CREATE CERTIFICATE Cert_server101 WITH SUBJECT = 'Cert_server101', START_DATE = '2025-11-28', EXPIRY_DATE = '2999-12-30';

BACKUP CERTIFICATE Cert_server101 TO FILE = 'C:\newcert\Cert_server101.cer'; --执行完成后把证书文件拷贝到从库

CREATE ENDPOINT [group0_endpoint] AUTHORIZATION [sa] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = CERTIFICATE Cert_server101, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

从库创建证书,并把证书拷贝到主库

复制代码
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Smtgbk123';

CREATE CERTIFICATE Cert_server102 WITH SUBJECT = 'Cert_server102', START_DATE = '2025-11-28', EXPIRY_DATE = '2999-12-30';

BACKUP CERTIFICATE Cert_server102 TO FILE = 'C:\newcert\Cert_server102.cer'; --执行完成后把证书文件拷贝到主库

CREATE ENDPOINT [group0_endpoint] AUTHORIZATION [sa] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = CERTIFICATE Cert_server102, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

主从库互为导入证书

复制代码
--导入从库的证书到主库(主库执行)
CREATE CERTIFICATE Cert_server102 FROM FILE =  'C:\newcert\Cert_server102.cer';

--导入主库的证书到从库(从库执行)
CREATE CERTIFICATE Cert_server101 FROM FILE = 'C:\newcert\Cert_server101.cer';

主库新建数据库并做一次全量备份

从节点此时是还没有newdb的

监听器可以在此时创建,也可以在后面创建

自动种子模式,数据库会自动的在从库恢复,不需要在从库提前创建数据库。

刷新数据库状态可以看到已同步

此时在从库刷星可以看到数据库已经同步过来。

但是由于从库不可读,所以访问不了

客户端访问

客户端访问可以通过监听器IP地址进行访问。当主节点宕机的时候,监听IP会自动转移到从节点。




由于当前sqldb2是主节点,所以IP地址都在sqldb2服务器上。

现在我们尝试把sqldb2直接关机,看看数据库服务会不会转移到节点1.

我们可以看到监听IP已经转移到sqldb1

客户端测试连接成功

可以看到刚才插入的数据和新建的表都已同步到从库。

写在最后

由于服务器没有加入域,在刚搭建完时候通过监听IP地址是可以正常登录的。后面经过几轮故障自动切换之后再用监听IP地址登录失败了。提示如下错误。


解决方法:改用sql身份验证,输入sa账号密码

另外一种现象是:

来回自动故障转移之后,从故障群集管理器看到主节点是在sqldb1,但是此时数据库的主副本是在sqldb2的。不确定这种现象是不是正常的。

相关推荐
不穿格子的程序员6 小时前
Redis篇6——Redis深度剖析:从单机到集群,Redis高可用进化史
数据库·redis·集群·主从·高可用·哨兵
是大芒果2 天前
负载均衡的概念、分类、算法、健康检查机制及高可用解决方案
负载均衡·高可用
我科绝伦(Huanhuan Zhou)3 天前
Linux 环境下 SQL Server 自动收缩日志作业创建脚本(Shell 版)
linux·运维·数据库·sql server
Logic1015 天前
《网络操作系统管理》形考实训核心:搞定磁盘管理与高可用的故障转移群集
文件共享·磁盘管理·windowsserver·故障转移群集·形考作业·国家开放大学·网络操作系统
Jerry952706288 天前
3.集群与分布式
分布式·架构·架构师·软考·高性能·高可用·架构设计师
分布式存储与RustFS8 天前
开源存储新变局:MinIO步入维护期后的五大替代方案深度解析
开源·对象存储·minio·高可用·企业存储·rustfs
Jerry952706288 天前
1.什么式可用性
java·分布式·后端·架构·高可用·秒杀
分布式存储与RustFS9 天前
RustFS:基于Rust的高性能分布式对象存储,重新定义数据存储新标准!
人工智能·wpf·对象存储·minio·高可用·企业存储·rustfs
wstcl14 天前
通过EF Core将Sql server数据表移植到MySql
数据库·mysql·sql server·efcore
分布式存储与RustFS14 天前
云原生基石:实战RustFS on Kubernetes,构建高可用存储架构
算法·云原生·kubernetes·对象存储·高可用·企业存储·rustfs