服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - 数据库技术 - Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

2023-05-28 12:00未知服务器之家 数据库技术

最详细的 SQLSERVER ALWAYSON配置教程 一、准备工作: 1、准备域控:服务器都在同一个域控(以下假设所在域控为 AAA.COM)。 2、开启服务:域控要开启Remote Procedure Call (RPC)服务。 3、安装角色和服务:纳入群集节点的服务器必须先添加

最详细的 SQLSERVER ALWAYSON配置教程

一、准备工作:

1、准备域控:服务器都在同一个域控(以下假设所在域控为 AAA.COM)。

2、开启服务:域控要开启Remote Procedure Call (RPC)服务。

3、安装角色和服务:纳入群集节点的服务器必须先添加角色和功能 .NET3.5 和 故障转移群集,防火墙开启两个共享端口135、445,和端点端口5022,要开启Remote Registry服务。

4、建专用域账号:在域控新建数据库服务专用账号 wsfc_sqlserver@AAA.com,密码:********。

5、配置仲裁共享文件夹:去域控下非数据库节点服务器上建立一个共享文件夹(如:\\10.0.XXX.XXX\WIN故障转移群集\共享仲裁盘专用),专门用于仲裁共享文件,授予wsfc_sqlserver@AAA.com所有共享权限。

6、数据库相关:

6.1、为新建域账号授权:在各节点服务器将此wsfc_sqlserver@AAA.com加入管理员组,并在服务中将其设置为 SQLSERVER服务的登录身份,并赋予SQLSERVER的sysadmin角色(后边就用这个账号登录SQLSERVER配置AlwaysOn)。

USE master
CREATE LOGIN [AAA\wsfc_sqlserver] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
ALTER SERVER ROLE [sysadmin] ADD MEMBER [AAA\wsfc_sqlserver]
go

6.2、整理节点服务器数据文件夹:每台节点服务器的数据库都要放到相同的位置,文件夹路径要全部相同,副本服务器上要先按照主服务器建好文件夹。

6.3、设置节点服务器数据备份共享文件夹:每台节点服务器建一个专门用于存放数据库备份及同步文件的文件夹,设置共享,并加上管理员组 的所有共享权限(在之前wsfc_sqserever@AAA.com已加入管理员组)(注意干掉默认的EveryOne权限)。

6.4、同步数据库账号:在同步之前,在辅助副本服务器数据库上先建立好与主副本数据库一样的数据库账号(用EXEC sp_help_revlogin;进行导出导入,确保所有副本上的账号完全一致(包括SID要一致))。

二、搭建故障转移群集

1、选择节点服务器

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

2、下一步验证配置,选“否”。

3、定义群集名称和虚拟地址。

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

4、下面就是按你的设置进入自动配置,配置完成如图。同时域控中会自动生成一条以群集名称和IP的主机(A)记录,和计算机。

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5、群集创建完成后,本机会自动生成一个用户CLIUSR,此用户是用来启动和运行群集服务的,千万不要动它,否则会导致群集服务中断。

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

6、配置群集仲裁(右键创建好的群集 >> 更多操作 >> 配置群集仲裁设置)

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

三、搭建数据库AlwaysOn

1、做好第一节第6点的相关准备(6、数据库相关)

2、建立SQL别名(32位):在每台节点服务器都加上所有节点数据库别名(实例名称+IP+端口 ),确保可以通过别名访问对应数据库。

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

3、启用 AlwaysOn(SQLSERVER配置管理器)

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

4、创建数据库证书(一定要配,否则 AlwaysOn可用性组建好了,但是副本会连接不上(显示一把红色的×),)

4.1、在每台节点数据库,创建并安装证书:

USE master;
GO
--创建主密钥。
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '******************';
--创建证书。 把CERT_xxx_x1换成自己要的名字。
CREATE CERTIFICATE CERT_xxx_x1 WITH SUBJECT = 'CERT_xxx_x1', START_DATE = '2022-01-01',EXPIRY_DATE = '2099-12-30';
--把刚才创建的证书备份到文件。 把CERT_xxx_x1换成自己要的名字。
BACKUP CERTIFICATE CERT_xxx_x1 TO FILE = 'D:\DataBase\cert\CERT_xxx_x1.cer';
--创建终结点,设为证书验证。 把CERT_xxx_x1换成自己要的名字。
CREATE ENDPOINT [Hadr_endpoint] AUTHORIZATION [sa] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL,AUTHENTICATION = CERTIFICATE CERT_xxx_x1, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

4.2、在每台节点数据库,载入群集内其他节点数据库的证书:

USE master;
CREATE CERTIFICATE CERT_xxx_x1 FROM FILE = 'd:\DataBase\cert\CERT_xxx_x1.cer';
CREATE CERTIFICATE CERT_xxx_x2 FROM FILE = 'd:\DataBase\cert\CERT_xxx_x2.cer';
CREATE CERTIFICATE CERT_xxx_x3 FROM FILE = 'd:\DataBase\cert\CERT_xxx_x3.cer';

5、创建AlwaysOn高可用组(数据库 >> Always On高可用性 >> 可用性组 >> 右键新建)

5.1、指定主副本&辅助副本

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.2、端点(不用配置,默认即可)

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.3、侦听器

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.4、只读路由

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

只读路由的使用:

同一个域AAA:可以使用AG23013,8887 或 AG23013.AAA.COM,8887 进行访问。

不同域BBB:可以在BBB域建立一条记录指向侦听器的IP进行访问。

连接字符串默认访问主副本,可读写。如果要只读,就在连接字符串中添加 ApplicationIntent=ReadOnly;MultiSubnetFailover=true,指定访问只读副本实现读写分离。

5.5、设置数据同步方式

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.6、再下一步下一步直到完成就行了,就可以在主副本所在数据库和辅助副本所在数据库分别看到下图:

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.7、数据库里面的“AlwaysOn高可用组”创建成功后会有如下变化:

5.7.1、在故障转移群集内会自动产生一个以“可用性组名”命名的角色,角色内已包含侦听器,如下图:

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

5.7.2、域控会根据“侦听器名称”自动产生一条计算机记录 和一条主机(A)记录:

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

四、过程中可能遇到的问题

1、如果要分离数据库,出现错误“无法对数据库‘XXX‘执行删除,因为它正用于复制”

解决:先 sp_removedbreplication'DBNAME';然后再分离。

2、数据库“正在还原”

解决:如果后续还要将此数据库加入到可用性组,就使用:RESTOREDATABASEDBNAMEWITHNORECOVERY; 反之使用 WITH RECOVERY。

PS:使用WITH RECOVERY后,还要从新添加到可用性组时可能会出现如下错误:

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

解决办法(右键数据库>>所有任务>>还原>>数据库>>选项菜单>>恢复状态>>选择”RESTORE WITH NORECOVERY”),操作完成后,再去可用性组里边的可用性数据库,右键>>联机:

Windows故障转移群集和SQLServerAlwaysOn配置搭建详细教程

3、执行手动故障转移后,副本数据库可能状态为“未同步”,且无法连接。

解决:在“未同步”的数据库执行:ALTERDATABASEDBNAMESETHADR RESUME;

4、销毁群集时,没有先逐出节点,直接删群集,导致这个节点加入新的群集时失败“计算机已加入群集”。

解决:进入注册表 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ClusSvc,Start项的值应该是2,改为4。

5、在数据库创建可用性组时,缺少选项“Windows Server 故障转移群集”,只有两个选项(EXTERNAL 和 NONE)。

解决:重启SQLSERVER服务。

6、更改数据的所有者。

解决:ALTERAUTHORIZATIONONDATABASE::DBNAMETO[账户]

延伸 · 阅读

精彩推荐