我正在运行以下代码...
using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["db-connection"].ConnectionString))
{
connection.Open();
var command = new SqlCommand("SELECT @@SERVERNAME",connection);
using (var reader = command.ExecuteReader())
{
reader.Read();
return reader[0].ToString();
}
}
...作为返回此应用程序指向的数据库服务器名称的健全性检查。有两个数据库服务器(DB00 和 DB01),它们位于 HAProxy 后面,如果 DB00 不可用,HAProxy 会设置为故障转移到 DB01。
连接字符串如下所示:
<add name="db-connection"
connectionString="User Id=USER_ID; Password=PASSWORD; Initial Catalog=the-database; Server=load-balancer.is.here,59281; Application Name=My.Application.Name;Min Pool Size=5;Max Pool Size=500;Connect Timeout=10;Connection Lifetime=29;" />
我们遇到的问题是这样的:
- 我们故障转移到 DB01(目前通过编辑 HAProxy 配置,使 DB00 成为备份,然后重新加载 HAProxy)
- SELECT 代码(这个问题开头的代码)现在应该返回 DB01 作为服务器名,但它没有,它仍然返回 DB00
- 这意味着我们的 SQLConnections 似乎仍然指向错误的数据库
- 问题一直存在,直到我们在托管代码的盒子上重新启动单声道进程
- 现在健全性检查代码返回正确的服务器名称 - DB01
任何想法这可能是什么?这可能是单声道连接池问题吗?
根据要求编辑 HAProxy 配置:
1 global
2 maxconn 4096
3 daemon
4
5 defaults
6 mode tcp
7 #mode http
8 contimeout 5000
9 clitimeout 50000
10 srvtimeout 50000
11
12
13 frontend blahblah
14 bind *:59283
15 mode tcp
16 default_backend sql-server-lockertest
17
18 backend sql-server-lockertest
19 balance roundrobin
20 server james 10.0.10.217:1433 check maxconn 32 rise 3 fall 3
21 server andres 10.0.10.226:1433 check maxconn 32 rise 3 fall 3 backup
问候,
詹姆士