5

mongodbのWebサイトによると、レプリカセットから1つのメンバーを指定するだけで、レプリカセットに接続できるはずです。

「C#ドライバーは、シードリストが不完全な場合でもレプリカセットに接続できます。シードリスト内のサーバーの少なくとも1つが応答する限り、シードリストにない場合でもプライマリサーバーを検出します(応答には、完全なレプリカセットと現在のプライマリの名前が含まれます。」http://www.mongodb.org/display/DOCS/CSharp+Driver+Tutorial#CSharpDriverTutorial-Connectionstrings

ただし、セカンダリメンバーを指定しただけでは、ドライバーを接続できません。

これは私の現在の接続ステートメントです:

m_server = MongoServer.Create(new MongoServerSettings { ConnectionMode = ConnectionMode.ReplicaSet, Server = new MongoServerAddress(connection) });

'connection'変数は次のとおりです。mongodb://servername/?safe=true

私はこれを見ました:https : //jira.mongodb.org/browse/CSHARP-500、そして私はrs.status()を実行し、正しいサーバー名を使用しました。どんな助けでも大歓迎です!

4

2 に答える 2

16

現在、私は MongoDB を学んでおり、レプリカ セットの接続をいじっています。私はデータベースへの接続に使用した 2 つの方法で貢献したいと思っています。これは役に立ちませんでしたが、少なくとも将来参照する場所があります (私は行くと確信しています)。ある時点でそれが必要になるため)最初に:

var connString = "mongodb://localhost:27029,localhost:27027,localhost:27028?connect=replicaSet";
var client = new MongoClient(connString);
var db = client.GetDatabase("test");

2番目:

var settings = new MongoClientSettings
{
   Servers = new[]
   {
      new MongoServerAddress("localhost", 27027),
      new MongoServerAddress("localhost", 27028),
      new MongoServerAddress("localhost", 27029)
   },
   ConnectionMode = ConnectionMode.Automatic,
   ReplicaSetName = "m101",
   WriteConcern = new WriteConcern(WriteConcern.WValue.Parse("3"),wTimeout:TimeSpan.Parse("10"))
};
var client = new MongoClient(settings);

1つ目は、サーバーのリストで指定されたサーバーを介してデータベースに接続できるようにします。これにより、プリンシパルで障害が発生した場合に、ドライバーはレプリカ セット内の新しいプリンシパル ノードに自動的に接続できます。2 つ目では、レプリカ セット内のサーバーのリスト、接続の種類を送信します。レプリカ セットの名前、および書き込み関連の構成。この設定により、ドライバーはレプリカ セット (WValue:3) 内の 3 台のサーバーからの書き込みの確認を待機し、書き込みの確認を最大 10 秒待機するように強制されます。

于 2015-07-04T04:34:50.397 に答える
5

したがって、接続変数は完全な接続文字列であり、MongoServerAddress に渡すものではありません。また、接続文字列で接続モードを指定することもできます。これを試して:

connection = "mongodb://servername/?safe=true&connect=replicaset";
m_server = MongoServer.Create(connectionString);
于 2012-08-09T03:54:35.863 に答える