我在一个故障转移配置中有2个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 :(得分:0)
我们从未真正破解过这一点。甚至没有内部的SQL Server顾问。 相反,他指出了一个不同的方向,即可用性组。
由于我们无法立即执行此操作,因此现在我们为SQL服务器使用DNS别名,如果主服务器出现故障,我们将别名切换为指向另一个别名。这不是自动的,但至少在DNS场景切换的情况下不会发生上述错误。