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的。不确定这种现象是不是正常的。

相关推荐
小猿姐1 天前
# KubeBlocks for MSSQL 高可用实现
数据库·架构·sql server
Three~stone5 天前
SQL Server 2022 安装教程【图文结合超详细】【安装包】
sql server
zs宝来了7 天前
Redis 哨兵机制:Sentinel 原理与高可用实现
redis·sentinel·高可用·源码解析·哨兵
时光追逐者11 天前
一款免费、简单、高效的在线数据库设计工具
数据库·mysql·oracle·sql server
人间打气筒(Ada)13 天前
go:如何保障分布式系统的高可用性?(下篇)
golang·高可用·超时设计·限流设计·接口缓存·重试设计·无状态设计
CSharp精选营15 天前
别再踩坑了!SQL Server数据类型那点事儿,看懂这篇少背三个锅
程序员·软件开发·数据类型·sql server·避坑·码农刚子
Thomas.Sir16 天前
深入剖析 Redis 的三种集群方式以及实战配置
redis·分布式·集群·高可用
FJW02081417 天前
LVS+Keepalived+HAProxy双主高可用负载均衡集群
运维·负载均衡·lvs·高可用
专注VB编程开发20年19 天前
SQL SERVER数据库DTE加密和字段加密
数据库·sql server
码农刚子21 天前
SQL Server安装避坑:这8个奇葩报错你遇到过几个?
sql server