镜像数据库自动故障转移问题

moondreamyou 2013-10-31 01:59:11
目前搭建了带见证服务器的数据库镜像,但发现自动故障转移却不好使,我希望这只是我自己的问题。

情况如下:
A主 B镜像 C见证 一个WEB客户端

模拟断网故障:
把A的网络断掉,发现B变成了主体(但显示已断开连接),但WEB客户端是访问不了的(即使等待10分钟,清空应用程序池,重启站点也不行),只有当A恢复网络的时候,B才变成了真正能被WEB访问的主体(此时再断掉A也能访问)。
为什么要等A恢复网络,B才能被访问到?

PS:如果使用ALTER DATABASE ImageTest SET PARTNER FAILOVER是可以几秒内切换过去的。
...全文
387 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
最爱午夜 2013-11-13
  • 打赏
  • 举报
回复
你有没有想过,当你的程序按正常连接数据库的时候,是不是会先连接主体,如果连接建立失败再去连接镜像,但是这个时候,主体和镜像角色切换有延时,这时你的程序建立数据库连接是肯定失败的。
發糞塗牆 2013-11-01
  • 打赏
  • 举报
回复
我再问问别人
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
每次搭建好一切后,都要重启见证服务器的SQL服务,不知为何,如果不重启,停止主服务器的SQL服务,镜像服务器也不会变成主体。
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
引用 31 楼 DBA_Huangzj 的回复:
问了一下别人,你试试不用断网方式,而是直接停掉主数据库的服务试试
刚试了,居然可以,而且镜像服务器的状态是(主体,已断开连接) PS:每次我都要重启见证服务器的SQL服务,否则不会生效。
發糞塗牆 2013-11-01
  • 打赏
  • 举报
回复
问了一下别人,你试试不用断网方式,而是直接停掉主数据库的服务试试
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
引用 27 楼 DBA_Huangzj 的回复:
见证服务器的错误日志有什么可以看出来异常吗?
这是witness的日志部分。
引用 28 楼 DBA_Huangzj 的回复:
写个BAT程序,不停地ping两边,看看多久才切换过去
两边都能ping通,如何区分是否切换过去?如果镜像变成"主体,已断开连接"这种状态的话,是几秒内。但在主服务器网络恢复前,镜像永远都不会变成"主体,已同步"。
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
这几段比较接近可疑,尤其是“定的网络名不再可用”。

2013-10-31 22:09:47.67 spid24s     Error: 1474, Severity: 16, State: 1.
2013-10-31 22:09:47.67 spid24s     Database mirroring connection error 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.' for 'TCP://pc104:7024'.
2013-10-31 23:05:34.55 spid22s     Error: 1479, Severity: 16, State: 1.
2013-10-31 23:05:34.55 spid22s     The mirroring connection to "TCP://PC104:7024" has timed out for database "ImageTest" after 10 seconds without a response.  Check the service and network connections.
2013-10-31 23:05:42.49 spid19s     Error: 1474, Severity: 16, State: 1.
2013-10-31 23:05:42.49 spid19s     Database mirroring connection error 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.' for 'TCP://PC104:7024'.
2013-10-31 23:20:38.15 spid25s     Error: 1474, Severity: 16, State: 1.
2013-10-31 23:20:38.15 spid25s     Database mirroring connection error 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.' for 'TCP://PC104:7024'.
2013-10-31 23:22:56.64 spid22s     Error: 1479, Severity: 16, State: 1.
2013-10-31 23:22:56.64 spid22s     The mirroring connection to "TCP://PC104:7024" has timed out for database "ImageTest" after 10 seconds without a response.  Check the service and network connections.
2013-10-31 23:23:05.60 spid25s     Error: 1474, Severity: 16, State: 1.
2013-10-31 23:23:05.60 spid25s     Database mirroring connection error 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.' for 'TCP://PC104:7024'.
2013-10-31 23:23:27.00 spid20s     Error: 1474, Severity: 16, State: 1.
2013-10-31 23:23:27.00 spid20s     Database mirroring connection error 2 'Connection attempt failed with error: '10060(由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)'.' for 'TCP://PC104:7024'.
2013-10-31 23:23:53.43 spid12s     The Database Mirroring protocol transport has stopped listening for connections.
2013-10-31 23:23:53.43 spid12s     Service Broker manager has shut down.
2013-10-31 23:23:56.16 spid5s      SQL Server is terminating in response to a 'stop' request from Service Control Manager. This is an informational message only. No user action is required.
2013-10-31 23:23:56.16 spid5s      SQL Trace was stopped due to server shutdown. Trace ID = '1'. This is an informational message only; no user action is required.

發糞塗牆 2013-11-01
  • 打赏
  • 举报
回复
写个BAT程序,不停地ping两边,看看多久才切换过去
發糞塗牆 2013-11-01
  • 打赏
  • 举报
回复
见证服务器的错误日志有什么可以看出来异常吗?
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
引用 24 楼 DBA_Huangzj 的回复:
镜像好像是要sqlserver版本完全一直,连SP都要相等的。另外你的命名管道服务开了没?
如果版本的问题我考虑再搭建多一台完全相同的服务器再测试下。命名管道,TCP/IP等都开了,防火墙也关了。
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
查看数据库状态的时候,发现只有处于"主体,已同步"时,才能被WEB客户端访问,而处于“主体,已断开连接”时,仅能通过SQL查询分析器访问。客户端代码没有使用缓存,代码没有问题(即使是新部署的客户端也不行)。
發糞塗牆 2013-11-01
  • 打赏
  • 举报
回复
镜像好像是要sqlserver版本完全一直,连SP都要相等的。另外你的命名管道服务开了没?
moondreamyou 2013-11-01
  • 打赏
  • 举报
回复
引用 21 楼 DBA_Huangzj 的回复:
对了,你用的是ADO.NET还是SQL Native Client?回复引用一下
客户端是用ADO.NET不行,而直接用SQL查询分析器是可以的。
引用 22 楼 DBA_Huangzj 的回复:
在主服务器上执行再试试:
ALTER DATABASE 库名 SET PARTNER TIMEOUT 30
这个目前是用10秒,设置得更高应该也不能解决。 我查了错误日志: 在Principal上看到如下日志: The server instance Witness rejected configure request 另发现Principal和Mirror都不能用计算机名ping通见证,但用IP可以ping通,我设置镜像的时候也是用IP的(后来改HOSTS用域名的方式也不行)。 在Witness上看到如下日志: Database mirroring connection error 4 'An error occurred while receiving data: '64(指定的网络名不再可用。)'.' for 'TCP://PC104:7024'. PC104是IP尾为104的机器名,但我设置的时候是用IP不是用机器名的。 另外我的见证是Win7 SQL2005 SP4,主和镜像是Win2003 SQL2005 SP3 主和镜像能够ping通计算机名或IP。 另附搭建完成后图片一张。
發糞塗牆 2013-10-31
  • 打赏
  • 举报
回复
在主服务器上执行再试试:
ALTER DATABASE 库名 SET PARTNER TIMEOUT 30
發糞塗牆 2013-10-31
  • 打赏
  • 举报
回复
对了,你用的是ADO.NET还是SQL Native Client?回复引用一下
moondreamyou 2013-10-31
  • 打赏
  • 举报
回复
我有见证的时候,断网后Mirror的变成主体,能够用查询分析器访问(状态为主体,已断开连接),但客户端不行。只有恢复了Principal网络后(即使不启动数据库服务),客户端才可以访问。
發糞塗牆 2013-10-31
  • 打赏
  • 举报
回复
不需要。你可以建好之后先用SSMS来连看看能不能连得上
moondreamyou 2013-10-31
  • 打赏
  • 举报
回复
引用 17 楼 DBA_Huangzj 的回复:
没有见证的必须手动,带了见证就自动,两种我都模拟过可以failover
建好镜像后,需要重启见证服务器吗?
發糞塗牆 2013-10-31
  • 打赏
  • 举报
回复
没有见证的必须手动,带了见证就自动,两种我都模拟过可以failover
moondreamyou 2013-10-31
  • 打赏
  • 举报
回复
引用 15 楼 DBA_Huangzj 的回复:
我没有应用程序模拟访问,但是纯镜像环境是可以自动failover的。
你说的是不带见证的时候,直接断网也能自动failover吗?不带见证不能自动转移吧?
加载更多回复(15)

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧