最近搭建了一套SQLServer2016 AlwaysOn AG。
(后记:经实际测试,使用SQLServer2012 也同样可以在Winserver2016上搭建基于工作组的AlwaysOn AG,其实基于工作组的AG仅仅只是WindowsServer2016的WSFC新功能。)
笔者是采用修改各节点的hosts文件,以及修改计算机名的dns后缀,来避免需要另外一台DNS服务器。
上面128,129,130三个IP属于AlwaysOn的三个节点服务器
IP100属于可用性组侦听器IP
IP150属于群集
途中遇到的问题点记录于此:
1.如果不是采用administrator这个内置管理员账号而采用其它的管理员帐户(每个节点都需要同样的管理员帐户),则在搭建群集前,需要使用Powershell添加如下注册表项:
new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1
否则,在创建群集添加服务器时会报错。
----------------------------------------------------------------------------------------
2.在执行
ALTER DATABASE [SQL2016] SET HADR AVAILABILITY GROUP = [AG2016]
时出错,sp_readerrorlog可以找到如下错误:
Database Mirroring login attempt by user 'NT AUTHORITY\ANONYMOUS LOGON.' failed with error: 'Connection handshake failed. The login 'NT AUTHORITY\ANONYMOUS LOGON' does not have CONNECT permission on the endpoint. State 84.'. [CLIENT: 192.168.206.128]
解决方法:
这其实以前在玩镜像时也遇到过,一种解决方法是修改SQL Server实例的属性,将登录身份改为同样的本地管理员帐户,并将该用户添加到SQLServer的登录名中,同时需要给sysadmin授权。修改之后,重启SQL Server实例。(各节点都需要操作一遍)
另一种方法是按照上面报错信息,将NT AUTHORITY\ANONYMOUS LOGON添加到SQLServer的登录名中,同时需要给sysadmin授权。修改之后,重启SQL Server实例。(各节点都需要操作一遍)
----------------------------------------------------------------------------------------
3.添加侦听器时遇到如下错误:
消息 41066,级别 16,状态 0,第 3 行
无法使 Windows Server 故障转移群集(WSFC)资源(ID“32b92e1c-37e2-4ae1-a045-d691c45011a7”)联机(错误代码 5942)。WSFC 服务可能未在运行、可能在其当前状态下无法访问,或是 WSFC 资源未处于可接受请求的状态。有关此错误代码的信息,请参阅 Windows 开发文档中的“系统错误代码”。
消息 19476,级别 16,状态 4,第 3 行
尝试为侦听器创建网络名称和 IP 地址失败。WSFC 服务可能未在运行或在其当前状态下无法访问,或者为网络名称和 IP 地址提供的值可能不正确。请检查 WSFC 群集的状态并且由网络管理员来验证该网络名称和 IP 地址。
解决方法:
这是因为未将侦听器IP的DNS记录添加到hosts文件中导致,添加即可。
----------------------------------------------------------------------------------------
4.只读路由的负载均衡不起作用
因为我仍然按照以前SQLServer2012时期的脚本来搭的AlwaysOn只读路由。
创建SQLServer2016的负载均衡只读路由的脚本应该如下:
ALTER AVAILABILITY GROUP ag MODIFY REPLICA ON N’WIN02′ WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=((‘WIN01’, ‘WIN03’), ‘WIN02’)));
跟以前的变更之处上上边(‘WIN01’, ‘WIN03’)的脚本处。
使用脚本查询路由可以得到这样的结果(WIN01和WIN03节点都是第一路由优先级):
select
b.replica_server_name
,a.routing_priority
,c.replica_server_name
from
sys.availability_read_only_routing_lists a
left join
sys.dm_hadr_availability_replica_cluster_states b
on a.replica_id = b.replica_id
left join sys.dm_hadr_availability_replica_cluster_states c
on a.read_only_replica_id = c.replica_id
order by a.replica_id
使用SQLCMD测试时,几乎是以1:1的比例来分配的负载。而使用SSMS时则不是这样,会出现连续N次都是WIN01,之后连续N次都是WIN03。
----------------------------------------------------------------------------------------
最后,使用最新的SSMS管理工具,可以直接从图形化界面进行操作创建AlwaysOn可用性组(稍老的版本好像会缺少部分脚本)。
本文链接地址:http://www.cnblogs.com/ajiangg/p/6424900.html
参考链接:
https://blogs.msdn.microsoft.com/clustering/2015/08/17/workgroup-and-multi-domain-clusters-in-windows-server-2016/
https://blogs.msdn.microsoft.com/alwaysonpro/2016/05/02/sql-server-2016-alwayson-availability-group-enhancements-load-balance-read-only-routing/
http://www.cnblogs.com/ajiangg/p/3636019.html
http://www.cnblogs.com/ajiangg/p/3668936.html
http://www.cnblogs.com/ajiangg/p/3636082.html