这个标题,在百度上可以说一搜一大把,但跟着边看边做,却还是折腾了我三天,记录一下。
先背书一下:
故障转移群集是一种高可用性的基础结构层,由多台计算机组成,每台计算机相当于一个冗余节点,整个群集系统允许某部分节点掉线、故障或损坏而不影响整个系统的正常运作。一台服务器接管发生故障的服务器的过程通常称为"故障转移"。
如果一台服务器变为不可用,则另一台服务器自动接管发生故障的服务器并继续处理任务。 群集中的每台服务器在群集中至少有一台其他服务器确定为其备用服务器。
一、实现基础:
服务器系统(Windows Server 2016 Datacenter版)
名称 | 电脑名 | IP |
服务器A | sqlA.net | 192.168.0.2 |
服务器B | sqlB.net | 192.168.0.3 |
群集 | SqlCluster | 192.168.0.4 |
二、实现步骤详细看:
三、注意事项:
1、可以不需要安装DNS服务器和.NET3.5 ,各节点HOST文件添加好映射信息即可。这里需要注意,各节点电脑名需要填写完整(sqlA是访问不到的,造成创建群集时显示无法访问到节点)
192.168.0.2 sqlA.net
192.168.0.3 sqlB.net
192.168.0.4 SqlCluster
2、各节点添加相同名称用户,添加到Administrators组。不然添加群集节点时,会提示添加其他节点时无管理权限。
3、此处填写群集IP,为外部访问统一IP
4、如果添加某节点时,提示已添加过群集,在该节点上,以管理员方式运行powershell,执行命令即可:Clear-ClusterNode
5、powershell中无法运行 ClusterAdd-WindowsFeature RSAT-Clustering-PowerShell
6、添加群集操作在一个节点上操作就可以了,如sqlA.net,完成后关闭故障转移群集管理器后,可能看不到该群集信息,需要执行连接群集操作。在其他节点上似乎连接不到,不知道为啥。
7、SQL数据库添加证书语句:
--无域实现Always On 需要添加证书 用SQL管理工具连接数据库 使用有管理权限的帐户 执行下面语句
--设置当前库为master
USE master;
GO
--创建主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1235456897';
GO
--创建证书 每个节点上都需要操作 建议每台机器都改成不同的名称以作区分
CREATE CERTIFICATE SQL102 --这里的SQL102改为你想要的名字
WITH SUBJECT = 'SQL102', --这里的SQL102改为你想要的名字
START_DATE = '2020-01-01',EXPIRY_DATE = '2099-12-30'; --起止时间
GO
--把刚才创建的证书备份到文件 这里也有两个CERT1要改
BACKUP CERTIFICATE SQL102 --这里的SQL102改为你想要的名字
TO FILE = 'C:\share\SQL102.cer'; --这里的SQL102改为你想要的名字
GO
--创建终结点,设为证书验证
CREATE ENDPOINT [group0_endpoint]
AUTHORIZATION [sa]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE SQL102, ENCRYPTION = REQUIRED ALGORITHM AES) --这里的SQL102改为你想要的名字
GO
--载入其它节点证书
--将其他节点证书文件复制到当前计算机
--不用载入自己的证书!
CREATE CERTIFICATE SQL102 FROM FILE = 'C:\share\SQL102.cer'; --其他节点证书文件路径
GO
8、创建AlwaysOn可用性,在创建时报 41105 错误时,取消第一步的勾选再重新操作。