你的位置:首页 > 数据库

[数据库]SQL Server的AlwaysOn错误19456和41158


SQL Server的AlwaysOn错误19456和41158

 

最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题

软件版本

SQL Server2014

Windows2012R2

 

网络环境

两个机房,一个机房是一个网段,另一个机房是另一个网段,也就是两个子网,两个网段,但是在同一个域中,而且使用了VPN

 

AlwaysOn是支持多子网的,在跨机房,多子网环境有几个地方需要注意

1、在搭建过程中需要把异地节点的投票权去掉,这个在搭建过程中没有遇到问题
NodeWeight
在任意集群节点上以域用户登录计算机,并以管理员身份运行powershell,并执行下面命令,JXxx08为异地节点的计算机名,把JXxx08节点的投票权设置为0
命令如下

Import-Module FailoverClusters$node ="JXxx08"(Get-ClusterNode $node).NodeWeight = 0$cluster = (Get-ClusterNode $node).Cluster$nodes = Get-ClusterNode -Cluster $cluster$nodes | Format-Table -property NodeName, State, NodeWeight

 

 

2、由于可用性组建立了侦听器,那么在failover的时候会遇到侦听器IP不能覆盖另一个子网的问题,导致报错

无法将实例xxx联接到可用性组xxx

服务器“xxxxxx”无法承载为可用性组侦听器配置的任何 IP 地址。或者配置可承载指定 IP 地址之一的公共群集网络,或者添加可在此服务器的公共群集网络上承载的另一个侦听器 IP 地址。
无法将本地可用性副本联接到可用性组“xxxxxx”。该操作遇到了 SQL Server 错误 19456,已被回滚。有关详细信息,请查看 SQL Server 错误日志。在错误根源得到纠正后,请重试 ALTER AVAILABILITY GROUP JOIN 命令。 (Microsoft SQL Server,错误: 19456)

解决这个问题的方法是在侦听器里再添加另一个网段的vip

这样侦听器现在有两个网段的vip了,异地机房的侦听器IP在添加之后会自动脱机,不用理会它

 

3、由于是新添加的异地节点,添加到已有的可用性组中,那么可能遇到下面这个报错

无法将实例xxx联接到可用性组xxx

无法将可用性副本联接到可用性组xx,该操作遇到了SQL Server错误41106,已被回滚。
有关详细信息,请查看 SQL Server 错误日志。在错误根源得到纠正后,请重试 ALTER AVAILABILITY GROUP JOIN 命令。 (Microsoft SQL Server,错误: 41158)

这个问题跟多子网无关,在这里也顺便列出来了

解决方法是再随便新建一个AG,把异地节点也加入到这个AG里面,就可以解决

因为异地节点是新建进来的节点,AlwaysOn的镜像端点还没有设置才导致报上面的错误

 

 

希望这篇文章能帮助大家

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

本文版权归作者所有,未经作者同意不得转载。