2016-05-04 22 views
1

Mongoバージョン3.0.8の3つのメンバーレプリカセットがあります。 AWS-EC2上のLinuxインスタンス上で実行されています。Mongodbレプリカセット - 常に "syncingTo"を表示

mongo --host MongoA:27017,MongoB:27017,MongoC:27017 

:私はこのコマンドを使用して、別々の(テスト)サーバ(Mongoのインスタンスのないもの)からのコマンドラインを介してモンゴに接続

rs.status() 
{ 
     "set" : "s-1", 
     "date" : ISODate("2016-05-04T20:52:26.279Z"), 
     "myState" : 2, 
     "syncingTo" : "MongoA:27017", 
     "members" : [ 
       { 
         "_id" : 0, 
         "name" : "MongoB:27017", 
         "health" : 1, 
         "state" : 2, 
         "stateStr" : "SECONDARY", 
         "uptime" : 14809, 
         "optime" : Timestamp(1462382654, 1), 
         "optimeDate" : ISODate("2016-05-04T17:24:14Z"), 
         "lastHeartbeat" : ISODate("2016-05-04T20:52:25.620Z"), 
         "lastHeartbeatRecv" : ISODate("2016-05-04T20:52:25.635Z"     ), 
         "pingMs" : 0, 
         "syncingTo" : "MongoC:27017", 
         "configVersion" : 1 
       }, 
       { 
         "_id" : 1, 
         "name" : "MongoA:27017", 
         "health" : 1, 
         "state" : 1, 
         "stateStr" : "PRIMARY", 
         "uptime" : 14852, 
         "optime" : Timestamp(1462382654, 1), 
         "optimeDate" : ISODate("2016-05-04T17:24:14Z"), 
         "lastHeartbeat" : ISODate("2016-05-04T20:52:24.506Z"), 
         "lastHeartbeatRecv" : ISODate("2016-05-04T20:52:24.493Z"     ), 
         "pingMs" : 9, 
         "electionTime" : Timestamp(1462380294, 1), 
         "electionDate" : ISODate("2016-05-04T16:44:54Z"), 
         "configVersion" : 1 
       }, 
       { 
         "_id" : 2, 
         "name" : "MongoC:27017", 
         "health" : 1, 
         "state" : 2, 
         "stateStr" : "SECONDARY", 
         "uptime" : 89095, 
         "optime" : Timestamp(1462382654, 1), 
         "optimeDate" : ISODate("2016-05-04T17:24:14Z"), 
         "syncingTo" : "MongoA:27017", 
         "configVersion" : 1, 
         "self" : true 
       } 
     ], 
     "ok" : 1 
} 

:ここrs.status()が出力されますレプリカセットのすべてのメンバーがセキュリティグループのメンバーであり、そのポート27017がすべてのレプリカセットメンバーと私のテストサーバーに公開されるようにAWSセキュリティグループを設定しました。

私はコマンドラインで接続するたびに、常にプライマリサーバに接続します(決してプライマリサーバではありません)。私が読んだところでは、これはレプリカセットがまだ「同期している」という事実に関連しています。

なぜ私は常に同期状態にあるのですか?設定されたメンバーが(特定のポートや何かへのアクセスなど)同期できないような何かがありますか?

ありがとうございました。ありがとうございました。

答えて

4

なぜ私は常に同期状態にあるのですか?設定されたメンバーが(特定のポートや何かへのアクセスなど)同期できないような何かがありますか?

syncingToフィールドは情報です。これは、セカンダリが現在レプリケーションのためにoplogアップデートを取得している場所を示します。これは現在のプライマリまたはchained replication(通常は地理的に分散したレプリカセットでのみ表示されます)の別のセカンダリになります。

このフィールドの存在は、初期同期がまだ完了している場合はSTARTUP2、メンバーが正常状態の場合はSECONDARYとなる現在のreplica set member stateとは無関係です。

syncingToフィールドには、より適切syncingFromに改名されますが、歴史的な命名選択は、既存のスクリプト/ツールを破るだろうにMongoDB 2.2と改名以来実施されています。あなたは、/をupvote見たいかもしれません。将来のメジャーリリースでこのフィールドの名前が変更される可能性があります。

私はコマンドラインで接続するたびに、常にプライマリサーバに接続します(決してプライマリではありません)。私が読んだところでは、これはレプリカセットがまだ「同期している」という事実に関連しています。あなたは(あなたのrs.status()出力ごとにs-1のように見える)シードリスト前replSet名を含める必要があるのMongoDB 3.0シェルとreplica set connectionについては

mongo --host MongoA:27017,MongoB:27017,MongoC:27017 

問題は、あなたの接続文字列であります:

mongo --host s-1/MongoA:27017,MongoB:27017,MongoC:27017 

接続文字列にreplSet接頭辞がないと、常にliの最初のホストに接続しますあなたのrs.status()出力ごとに現在セカンダリになっています。正しい書式を使用すると、シードリスト内のホストのうち少なくとも1つが使用可能である(そしてプライマリが存在する)限り、現在のプライマリに接続されます。

+1

優れた説明をいただきありがとうございます。私はいつも(replSetなしで)同じ接続文字列を使用していたので、PRIMARYに接続するのは幸いです。 –

関連する問題