1

mongoDB シャード クラスターの作成に問題があります。私は4つのサーバーを使用しようとしています.3つはmongoデータベース(host1、host2、およびhost3)用で、もう1つはアプリケーション側(mongosプロセス用)です。各データベース サーバーで、次の 4 つのプロセスを開始します。

$ mongod --configsvr --smallfiles --noprealloc --port 27020 --dbpath /mongodb/conf --logappend --logpath=/mongodb/logs/logsmongodcfg.log
$ mongod --shardsvr --smallfiles --noprealloc --replSet repl1 --port 27030 --dbpath /mongodb/repl1 --logappend --logpath=/mongodb/logs/mongod_shard1.log
$ mongod --shardsvr --smallfiles --noprealloc --replSet repl2 --port 27031 --dbpath /mongodb/repl2 --logappend --logpath=/mongodb/logs/mongod_shard2.log
$ mongod --shardsvr --smallfiles --noprealloc --replSet repl3 --port 27032 --dbpath /mongodb/repl3 --logappend --logpath=/mongodb/logs/mongod_shard3.log

クラスター内の各サーバーでわかるように、1 つの構成サーバーと 3 つの mongod サーバーがレプリケーションの実装用に用意されています。アプリケーション サーバーでは、mongos プロセスを 1 つだけ開始します。

mongos --configdb host1:27020,host2:27020,host3:27020 --port 27017 --logappend --logpath=/var/log/mongo/mongos.log

この後、シャーディングを構成しようとします:

モンゴ 127.0.0.1:27017/管理者
db.runCommand( { addShard : "repl1/host1:27030,host2:27030,host3:27030" } );
db.runCommand( { addShard : "repl2/host1:27031,host2:27031,host3:27031" } );
db.runCommand( { addShard : "repl3/host1:27032,host2:27032,host3:27032" } );

このスキームは機能していますが、大きな問題が 1 つあります。ホストの 1 つをシャットダウンしようとすると、mongos は他のホストや新しいプライマリ レプリケーションに接続できません。mongos ログで、次のような情報を取得します。

Thu Jun 14 21:10:37 [CheckConfigServers] DBClientCursor::init call() に失敗しました
Thu Jun 14 21:10:37 [ReplicaSetMonitorWatcher] host1:27030 に再接続しようとしています
Thu Jun 14 21:10:42 [ReplicaSetMonitorWatcher] 再接続 host1:27030 に失敗しました サーバー host1:27030 に接続できませんでした
Thu Jun 14 21:10:42 [ReplicaSetMonitorWatcher] host1:27032 に再接続しようとしています
Thu Jun 14 21:10:47 [ReplicaSetMonitorWatcher] 再接続 host1:27032 に失敗しました サーバー host1:27032 に接続できませんでした
Thu Jun 14 21:10:56 [LockPinger] SyncClusterConnection が [host1:27020] に接続中

そのため、3 つの構成サーバーのいずれかがダウンした場合、mongos は接続例外を受け取りました。何が問題で、この問題を解決するにはどうすればよいですか?

4

1 に答える 1

2

それで、ここにいくつかのことがあります。まず、2.0.6 を実行していない場合は、それに更新します。ここに関連する修正がいくつかあります (実際には 2.0.5 で修正されたhttps://jira.mongodb.org/browse/SERVER-2988のように、構成サーバーがダウンした状態で mongos を起動する場合に役立ちます。

次に、構成サーバーをシャットダウンすると、クラスターのメタデータは読み取り専用になり、構成サーバーがオンラインに戻るまで、mongos はいくつかのこと (分散、分割など) を実行できなくなります。そのため、復元するまで、1 つがダウンしているという事実について文句を言います。

同様に、レプリカ セット モニター スレッドは、ダウンしているレプリカ セットのメンバーに ping を送信し続け、接続に失敗します (これは実際には ICMP ping ではなく、TCP 接続の試行です)。

基本的に、これらのログ メッセージは、元に戻すまで期待されます。

于 2012-06-15T11:24:07.210 に答える