3つの構成サーバーと2つのシャードがあります。各シャードには、プライマリ、セカンダリ、アービターがあります。
これは、以下のmongod設定で実行されています。
_storageEngine=wiredTiger
wiredTigerJournalCompressor=zlib
wiredTigerCollectionBlockCompressor=zlib
_
Mongosインスタンスは、シャーディングバランシング中にロックを取得できないことについて、以下のログエントリを作成しました。ただし、すべてのデータは問題なくクエリできます。
また、sh.status()
コマンドを使用すると、すべてが正常に見えます。
破片:
_{ "_id" : "ib3_prod_rs0", "Host" : "ib3_prod_rs0/ip-10-0-13-119.ec2.internal:27017,ip-10-0-21-50:27017" }
{ "_id" : "ib3_prod_rs1", "Host" : "ib3_prod_rs1/ip-10-0-6-138:27017,ip-10-0-8-202.ec2.internal:27017" }
_
バランサー:
_Currently enabled: yes
Currently running: yes
Balancer lock taken at Wed Apr 01 2015 00:00:49 GMT+0000 (UTC) by 54.163.248.60:27017:1427843620:1804289383:Balancer:1681692777
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
_
どうすればデバッグできますか?
2015-03-31T23:41:06.542 + 0000 I SHARDING [Balancer] moveChunk result:{ok:0.0、errmsg: "could not collect collection lock for cubes_prod.pushqueues to migrate chunk [{:MinKey}、{:MaxKey}) ::によって引き起こされました::サーバーからステータスを取得できませんでした... "、$ gleStats:{lastOpTime:Timestamp 0 | 0、electionId:ObjectId( '551b29f564e83f84e725241e')}} 2015-03-31T23:41:06.543 + 0000 I SHARDING [バランサー]バランサーの移動に失敗しました:{ok:0.0、errmsg: "cubes_prod.pushqueuesのコレクションロックを取得してチャンクを移行できませんでした[{:MinKey}、{:MaxKey})::原因:::からステータスを取得できませんでしたser ... "、$ gleStats:{lastOpTime:Timestamp 0 | 0、electionId:ObjectId( '551b29f564e83f84e725241e')}} from:ib3_prod_rs1 to:ib3_prod_rs0 chunk:min:{UserKey:MinKey} max:{UserKey:0}
あなたが自分で見つけたもの によると、私は詳細な説明を提供できると思います。
チャンクの移行の仕組みを次に示します(簡潔にするために簡略化しています)。
データは、チャンクを分割する必要があるポイントまで増加していました。この時点で、3つの構成サーバーがすべて使用可能であり、それに応じてメタデータが更新されました。チャンクの分割は、チャンクの移行に比べて比較的安価な操作であり、頻繁に発生する可能性があるため、負荷がかかると、通常、移行よりも多くのチャンクの分割が行われます。前に述べたように、任意の時点で発生できるチャンクの移行は1つだけです。
何らかの問題により、チャンクが分割された後、チャンク移行しきい値を下回るように十分なチャンクが移行される前に、1つ以上の構成サーバーに到達できなくなりました。時間。結論:移行する必要のあるすべてのチャンクが実際に移行される少し前に、1つ以上の構成サーバーが使用できなくなりました。
現在、バランサーはチャンクを移行したいが、すべての構成サーバーに到達してグローバル移行ロックを取得することができませんでした。したがって、エラーメッセージ。
設定サーバーが同期していない可能性があります。この状況に対処するには、-mongodb config servers not in syncに対するAdam Comerfordsの回答を読んでください。手紙に従ってください。
プレーンでシンプル: [〜#〜] mms [〜#〜] を使用します。これは無料で、正常性とパフォーマンスに関する多くの情報を提供し、自動化エージェントを使用すると、MongoDBクラスターの管理を大幅に高速化できます。
少なくとも3つのモニタリングエージェントをインストールすることをお勧めします。これにより、他のエージェントとの冗長性を維持しながら、1つのスケジュールされたダウンタイムを確保できます。
MMSにはアラート機能があるため、いずれかの構成サーバーが使用できなくなった場合に通知されます。これは深刻な状況です。
この問題は、ネットワークの問題であることが判明しました。
すべてのmongo環境をVPCで操作します。バランスをとるときに設定サーバーに接続の問題があったようです。すべてのトラフィックをインバウンド/アウトバウンドで許可すると、mongosから別のエラー「データ転送エラー」が発生しました。
すべての構成サーバーのデータ全体を一掃し、すべてのトラフィックのインバウンド/アウトバウンドを許可して再開するまで、私はまだ行き詰まっていました。
それでも当惑するのは、シャードバランシングに使用されるポートです。エラーなしでモンゴスを介して問題なくシャードを追加できたので、それで十分だと思いました。
誰かがより良い答えを提供できればそれは素晴らしいでしょう。