笔者是采用修改各节点的hosts文件

最近搭建了一套SQLServer2016 AlwaysOn AG。

(后记:经实际测试,使用SQLServer2012
也同样可以在Winserver2016上搭建基于工作组的AlwaysOn
AG,其实基于工作组的AG仅仅只是WindowsServer2016的WSFC新功能。
)

笔者是采用修改各节点的hosts文件,以及修改计算机名的dns后缀,来避免需要另外一台DNS服务器。

图片 1

图片 2

 

上面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可以找到如下错误:

笔者是采用修改各节点的hosts文件。笔者是采用修改各节点的hosts文件。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\笔者是采用修改各节点的hosts文件。笔者是采用修改各节点的hosts文件。ANONYMOUS
LOGON添加到SQLServer的登录名中,同时需要给sysadmin授权。修改之后,重启SQL
Server实例。(各节点都需要操作一遍)


笔者是采用修改各节点的hosts文件。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 

图片 3

使用SQLCMD测试时,几乎是以1:1的比例来分配的负载。而使用SSMS时则不是这样,会出现连续N次都是WIN01,之后连续N次都是WIN03。

图片 4


最后,使用最新的SSMS管理工具,可以直接从图形化界面进行操作创建AlwaysOn可用性组(稍老的版本好像会缺少部分脚本)。

本文链接地址:

参考链接:

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图