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
本文版权归作者所有,未经作者同意不得转载。