一、 历史版本及改进

传统可用性组要求所有服务器必须加入相同 Active Directory 域,加入不同的域、甚至加入受信任的域均不起作用,所有服务器必须都是相同 WSFC 的节点。下图显示了这一配置:

sqlserver 域独立可用性组_结点

Windows Server 2012 R2引入了与Active Directory分离的群集。它是WSFC的一种特殊形式,WSFC使用DNS而不使用域,但这种类型的WSFC仍要求节点加入到相同的域,因此仍无法提供与域完全无关的体验。

Windows Server 2016 引入了工作组群集。工作组群集允许基于无域的WSFC部署SQL Server 可用性组,SQL Server 要求使用证书以保证终结点安全性,此类型的可用性组称为域独立可用性组(domain-independent availability group)。 

 

二、 域独立可用性组架构

使用工作组群集部署可用性组支持以下WSFC节点的组合:

  • 没有任何节点加入到域
  • 所有节点都加入到不同的域
  • 节点混合,包括加域节点和未加域节点

下图显示了域独立可用性组的一个示例,其中数据中心1中的节点已加入域,但数据中心2中的节点则仅使用 DNS。此时需要为将加入WSFC的所有服务器设置 DNS 后缀。访问可用性组的每个应用程序和服务器必须看到相同的DNS信息。

sqlserver 域独立可用性组_Server_02

域独立可用性组不仅仅用于多站点或灾难恢复方案,还可在单个数据中心部署,甚至可与标准可用性组配合使用,提供类似数据库镜像实现的架构。

sqlserver 域独立可用性组_结点_03

 

三、 部署域独立可用性组

 

1. 注意事项

  • 所有节点操作系统不低于Windows Server 2016,数据库版本不低于2016
  • 所有节点必须安装故障转移群集功能
  • 需在各节点使用相同密码的相同本地用户创建集群,该用户需要是管理组成员,如果是非administrator用户还需额外修改注册表键值
  • 只能用于新建集群,或者加域服务器加入无域集群,不能用于无域服务器加入加域集群。
  • 可与仲裁配合使用的见证服务器类型只有磁盘和云,这是 Windows Server 2016 中的新增功能。磁盘可能会出现问题,因为可用性组很有可能不会使用共享磁盘。
  • 当可以配置侦听器时,必须先在 DNS 中注册侦听器然后才能使用。 Kerberos不支持侦听器。
  • 连接到 SQL Server 的应用程序应主要使用 SQL Server 身份验证,因为域可能不存在或未配置为协同工作。
  • 在配置可用性组时将使用证书(同无域ag)。

 

2. 创建WSFC

以下创建过程来自 https://blog.51cto.com/wzde2012/1972859 

实战环境

DC01&iscsi      oa.com
lan:10.0.0.2 255.0.0.0
iscsi:30.0.0.2 255.0.0.0

DC02               tw.oa.com
lan:10.0.0.3 255.0.0.0

HV01
MGMET:10.0.0.9 255.0.0.0 DNS 10.0.0.2
ISCSI:30.0.0.9 255.0.0.0
CLUS:18.0.0.9 255.0.0.0

HV02
MGMET:10.0.0.10 255.0.0.0 DNS 10.0.0.3
ISCSI:30.0.0.10 255.0.0.0
CLUS:18.0.0.10 255.0.0.0

当前HV01属于oa.com域

sqlserver 域独立可用性组_Server_04

HV02属于tw.oa.com子域

sqlserver 域独立可用性组_Server_05

在各节点创建相同密码的本地用户

sqlserver 域独立可用性组_Server_06

 

添加用户至各节点本地管理员组

sqlserver 域独立可用性组_DNS_07

配置用户密码为永不过期

sqlserver 域独立可用性组_结点_08

如果不使用节点本地内置的administrator用户创建群集,那么还需要修改各节点注册表

HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

新增DWORD键值LocalAccountTokenFilterPolicy,值为1

sqlserver 域独立可用性组_结点_09

为各同林多域节点 DNS访问网卡,增加所有域的DNS后缀

 

sqlserver 域独立可用性组_Server_10

修改完成后重启,使用cluadmin用户登录,添加各节点群集功能角色,连接ISCSI存储

sqlserver 域独立可用性组_Server_11

 

sqlserver 域独立可用性组_DNS_12

GUI创建方式和工作组群集相同,这里我们使用Powershell创建

#创建多域群集

New-Cluster -Name MLDcluster -StaticAddress 10.0.0.40 -Node HV01,HV02 -AdministrativeAccessPoint DNS

sqlserver 域独立可用性组_Server_13

创建完成,并未提示报错

sqlserver 域独立可用性组_DNS_14

 

打开故障转移群集管理器发现已经可以正常打开群集,且自动帮助我们配置了磁盘见证

sqlserver 域独立可用性组_DNS_15

下一步可以尝试基于多域模型群集部署上层应用!

 

3. 创建域独立可用性组

尽管创建域独立可用性组与创建常规可用性组基本相同,但某些方面(如创建证书)只有使用 Transact-SQL 才能实现。 

以下示例假定具有两个副本的可用性组配置:一个主要副本和一个次要副本。

  • 将加入可用性组的每个实例上启用 AlwaysOn 可用性组功能,这需要重新启动每个SQL Server 实例。
  • 托管主副本的实例需要有数据库主密钥。如果主密钥不存在,运行以下命令:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Strong Password';
  • 在主副本实例上,创建将用于次要副本上的入站连接和用于保护主副本上的终结点的证书。
CREATE CERTIFICATE InstanceA_Cert WITH SUBJECT = 'InstanceA Certificate';
  • 备份该证书。 如有必要,还可以使用私钥提供进一步保护,此示例不使用私钥。
BACKUP CERTIFICATE InstanceA_Cert TO FILE = 'Backup_path\InstanceA_Cert.cer';
  • 重复步骤上两步命令,创建和备份每个次要副本的证书,并适当调整证书名称,如 InstanceB_Cert。
  • 在主副本上,必须为可用性组的每个次要副本创建登录名。 此登录名将被授予权限以连接到域独立可用性组使用的终结点。 例如,对于名为 InstanceB 的副本:
CREATE LOGIN InstanceB_Login WITH PASSWORD = 'Strong Password';
  • 在每个次要副本上,为主要副本创建登录名。此登录名将被授予权限以连接到终结点。
CREATE LOGIN InstanceA_Login WITH PASSWORD = 'Strong Password';
  • 在所有实例上,为创建的每个登录名创建一个用户,在还原证书时会使用此用户。 
CREATE USER InstanceA_User FOR LOGIN InstanceA_Login;
  • 在所有相关次要副本上创建登录名和用户。
  • 在每个实例上,为创建了登录名和用户的其他实例还原证书。 在主要副本上,还原所有次要副本证书。 在每个次要副本上,还原主要副本的证书。
CREATE CERTIFICATE [InstanceB_Cert]
AUTHORIZATION InstanceB_User
FROM FILE = 'Restore_path\InstanceB_Cert.cer'
  • 在各实例上使用的终结点。
CREATE ENDPOINT DIAG_EP
STATE = STARTED
AS TCP (   
 LISTENER_PORT = 5022,
 LISTENER_IP = ALL
      )
FOR DATABASE_MIRRORING (
 AUTHENTICATION = CERTIFICATE InstanceX_Cert,
 ROLE = ALL
      )
  • 为创建的每个用户分配权限,使其能够连接到终结点。
GRANT CONNECT ON ENDPOINT::DIAG_EP TO [InstanceX_User];
  • 配置基础证书和终结点安全性后,使用你喜欢的方法创建可用性组。
  • 创建侦听器时,请确保在 DNS 中注册其名称和 IP 地址。

 

参考

https://blog.51cto.com/wzde2012/1972859

https://blog.51cto.com/wzde2012/1968946

https://docs.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/domain-independent-availability-groups?view=sql-server-ver15