0

私は次のコードを実行しています...

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();
    }
}

...このアプリケーションが指しているDBサーバーの名前を返すための健全性チェックとして。2つのDBサーバー(DB00とDB01)があり、DB00が使用できない場合にDB01にフェイルオーバーするようにセットアップされたHAProxyの背後にあります。

接続文字列は次のようになります。

    <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がまだ間違ったDBを指しているように見えることを意味します
  • コードがホストされているボックスでモノラルプロセスを再起動するまで、問題は解決しません
  • これで、健全性チェックコードが正しいサーバー名を返します-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

よろしく、

ジェームズ

4

1 に答える 1

1

Monoは、接続文字列の「ConnectionLifetime」パラメータをまだサポートしていなかったことがわかりました。

しかし、それを修正してプルリクエストを提案しました。

https://github.com/mono/mono/pull/517

于 2012-12-05T12:42:01.523 に答える