2015-10-15 61 views
1

我在一个故障转移配置中有2个SQL Server的环境中遇到问题。所以,如果一个变得不可用,另一个接管。SQL Server故障转移:找不到网络路径 - 直到重新启动后

现在,这些服务器不时地切换角色,所以一台服务器从主机转到从机并返回。

每当发生这种情况,我们会得到一些SQL错误,现在我的印象是,.NET框架应该能够处理这种情况,但它不是,但现在不是那么重要,如果我们可以从它恢复。

但似乎我们现在有一个情况的人他们做开关,我们的WebAPI应用程序只是拒绝过收回,并不断给错误。

但是,如果我们重新启动应用程序池,情况似乎会恢复正常。

每个SqlConnection对象总是使用后丢弃,并且它们与提供故障转移伙伴的连接字符串创建:

Data Source=Server_1.Domain; Initial Catalog=database_name;User ID=db_user;Password=user_pass;Failover Partner=Server_2.Domain 

服务器和应用程序的生命在不同的领域,如果该事项。

现在,如果这只是持续,而他们在切换角色,这将是很好,但我不明白为什么它仍然存在。

我可以在StackOverflow上找到关于此问题的无数线程,但它们似乎都存在一致性状态下的问题,并不一致。

因此,所有通常的“允许远程连接”,启用“TCP/IP”,打开端口等应该都是有序的,否则我们根本无法连接。

对于看到“命名管道提供程序,错误:40”,我也有点困惑,当它不是同一台机器时,它不应该使用TCP/IP吗? o.O ...

这里是一些更多的错误细节。


[Win32Exception (0x80004005): The network path was not found] 

[SqlException (0x80131904): A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)] 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +642 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +116 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +1079 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +6600667 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +233 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +278 
    System.Data.SqlClient.SqlConnection.Open() +239 

我希望有人可能已经看到过这样的事情,并能提供一个或两个提示?

+0

还有其他依赖这些服务器的工具吗?这是为了了解问题是否属于.NET,可能是应用程序,或者是与服务器端配置/修补程序/相关的问题。 – Paolo

+0

我不知道我遵循了什么?......这是一对专用的SQL Server,它承载数据库的分配,所以还有很多其他应用程序使用它们。不是来自所讨论的应用程序服务器,它们都在不同的服务器上分离出来,但有两个应用程序都使用这些服务器的Deployment服务器除外。这些不是那些失败atm的服务器。 – Jens

+0

如果许多应用程序从这两台服务器读取/写入数据,并且只有一个应用程序出现故障,那么这不是服务器问题;阅读这个问题,如果“服务器配置问题”的可能性被排除,我不清楚这个问题。 – Paolo

回答

0

我们从来没有真正破解过这个。甚至没有一个SQL Server顾问的前提下。他反而向我们指出了一个不同的方向,即可用性组。

由于我们现在无法做到这一点,现在我们为SQL服务器使用DNS别名,如果主服务器出现故障,我们将别名切换为指向另一端。这不是自动的,但至少上述错误不会发生在DNS切换的情况下。