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 は接続例外を受け取りました。何が問題で、この問題を解決するにはどうすればよいですか?