2015-10-15 64 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切換的情況下。