1、准备域控:服务器都在同一个域控(以下假设所在域控为AAA.COM)。
2、开启服务:域控要开启RemoteProcedureCall(RPC)服务。
3、安装角色和服务:纳入群集节点的服务器必须先添加角色和功能.NET3.5和故障转移群集,防火墙开启两个共享端口135、445,和端点端口5022,要开启RemoteRegistry服务。
4、建专用域账号:在域控新建数据库服务专用账号wsfc_sqlserver@AAA.com,密码:********。
5、配置仲裁共享文件夹:去域控下非数据库节点服务器上建立一个共享文件夹(如:\\10.0.XXX.XXX\WIN故障转移群集\共享仲裁盘专用),专门用于仲裁共享文件,授予wsfc_sqlserver@AAA.com所有共享权限。
USEmasterCREATELOGIN[AAA\wsfc_sqlserver]FROMWINDOWSWITHDEFAULT_DATABASE=[master]ALTERSERVERROLE[sysadmin]ADDMEMBER[AAA\wsfc_sqlserver]go6.2、整理节点服务器数据文件夹:每台节点服务器的数据库都要放到相同的位置,文件夹路径要全部相同,副本服务器上要先按照主服务器建好文件夹。
6.3、设置节点服务器数据备份共享文件夹:每台节点服务器建一个专门用于存放数据库备份及同步文件的文件夹,设置共享,并加上管理员组的所有共享权限(在之前wsfc_sqserever@AAA.com已加入管理员组)(注意干掉默认的EveryOne权限)。
6.4、同步数据库账号:在同步之前,在辅助副本服务器数据库上先建立好与主副本数据库一样的数据库账号(用EXECsp_help_revlogin;进行导出导入,确保所有副本上的账号完全一致(包括SID要一致))。
1、选择节点服务器
2、下一步验证配置,选“否”。
3、定义群集名称和虚拟地址。
4、下面就是按你的设置进入自动配置,配置完成如图。同时域控中会自动生成一条以群集名称和IP的主机(A)记录,和计算机。
5、群集创建完成后,本机会自动生成一个用户CLIUSR,此用户是用来启动和运行群集服务的,千万不要动它,否则会导致群集服务中断。
6、配置群集仲裁(右键创建好的群集>>更多操作>>配置群集仲裁设置)
2、建立SQL别名(32位):在每台节点服务器都加上所有节点数据库别名(实例名称+IP+端口),确保可以通过别名访问对应数据库。
3、启用AlwaysOn(SQLSERVER配置管理器)
4、创建数据库证书(一定要配,否则AlwaysOn可用性组建好了,但是副本会连接不上(显示一把红色的×),)
4.1、在每台节点数据库,创建并安装证书:
USEmaster;GO--创建主密钥。CREATEMASTERKEYENCRYPTIONBYPASSWORD='******************';--创建证书。把CERT_xxx_x1换成自己要的名字。CREATECERTIFICATECERT_xxx_x1WITHSUBJECT='CERT_xxx_x1',START_DATE='2022-01-01',EXPIRY_DATE='2099-12-30';--把刚才创建的证书备份到文件。把CERT_xxx_x1换成自己要的名字。BACKUPCERTIFICATECERT_xxx_x1TOFILE='D:\DataBase\cert\CERT_xxx_x1.cer';--创建终结点,设为证书验证。把CERT_xxx_x1换成自己要的名字。CREATEENDPOINT[Hadr_endpoint]AUTHORIZATION[sa]STATE=STARTEDASTCP(LISTENER_PORT=5022,LISTENER_IP=ALL)FORDATA_MIRRORING(ROLE=ALL,AUTHENTICATION=CERTIFICATECERT_xxx_x1,ENCRYPTION=REQUIREDALGORITHMAES)GO4.2、在每台节点数据库,载入群集内其他节点数据库的证书:
USEmaster;CREATECERTIFICATECERT_xxx_x1FROMFILE='d:\DataBase\cert\CERT_xxx_x1.cer';CREATECERTIFICATECERT_xxx_x2FROMFILE='d:\DataBase\cert\CERT_xxx_x2.cer';CREATECERTIFICATECERT_xxx_x3FROMFILE='d:\DataBase\cert\CERT_xxx_x3.cer';5、创建AlwaysOn高可用组(数据库>>AlwaysOn高可用性>>可用性组>>右键新建)
5.1、指定主副本&辅助副本
5.2、端点(不用配置,默认即可)
5.3、侦听器
5.4、只读路由
只读路由的使用:
同一个域AAA:可以使用AG23013,8887或AG23013.AAA.COM,8887进行访问。
不同域BBB:可以在BBB域建立一条记录指向侦听器的IP进行访问。
连接字符串默认访问主副本,可读写。如果要只读,就在连接字符串中添加ApplicationIntent=ReadOnly;MultiSubnetFailover=true,指定访问只读副本实现读写分离。
5.5、设置数据同步方式
5.6、再下一步下一步直到完成就行了,就可以在主副本所在数据库和辅助副本所在数据库分别看到下图:
5.7、数据库里面的“AlwaysOn高可用组”创建成功后会有如下变化:
5.7.1、在故障转移群集内会自动产生一个以“可用性组名”命名的角色,角色内已包含侦听器,如下图:
5.7.2、域控会根据“侦听器名称”自动产生一条计算机记录和一条主机(A)记录:
1、如果要分离数据库,出现错误“无法对数据库‘XXX‘执行删除,因为它正用于复制”
解决:先sp_removedbreplication'DBNAME';然后再分离。
2、数据库“正在还原”
解决:如果后续还要将此数据库加入到可用性组,就使用:RESTOREDATABASEDBNAMEWITHNORECOVERY;反之使用WITHRECOVERY。
PS:使用WITHRECOVERY后,还要从新添加到可用性组时可能会出现如下错误:
解决办法(右键数据库>>所有任务>>还原>>数据库>>选项菜单>>恢复状态>>选择”RESTOREWITHNORECOVERY”),操作完成后,再去可用性组里边的可用性数据库,右键>>联机:
3、执行手动故障转移后,副本数据库可能状态为“未同步”,且无法连接。
解决:在“未同步”的数据库执行:ALTERDATABASEDBNAMESETHADRRESUME;
4、销毁群集时,没有先逐出节点,直接删群集,导致这个节点加入新的群集时失败“计算机已加入群集”。
解决:进入注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ClusSvc,Start项的值应该是2,改为4。
5、在数据库创建可用性组时,缺少选项“WindowsServer故障转移群集”,只有两个选项(EXTERNAL和NONE)。