2017-10-11 4 views
0

にレプリカセットのバージョン:あなたは気づいているかもしれませんがセットMongoDBの私は3-レプリカのMongoDBは、以下の構成で設定されている以前の値

rs0:PRIMARY> rs.conf() 
{ 
    "_id" : "rs0", 
    "version" : 138086, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "host_1:27017", 
      "arbiterOnly" : false, 
      "buildIndexes" : true, 
      "hidden" : false, 
      "priority" : 1, 
      "tags" : { 

      }, 
      "slaveDelay" : 0, 
      "votes" : 1 
     }, 
     { 
      "_id" : 1, 
      "host" : "host_2:27017", 
      "arbiterOnly" : false, 
      "buildIndexes" : true, 
      "hidden" : false, 
      "priority" : 0.5, 
      "tags" : { 

      }, 
      "slaveDelay" : 0, 
      "votes" : 1 
     }, 
     { 
      "_id" : 2, 
      "host" : "host_3:27017", 
      "arbiterOnly" : false, 
      "buildIndexes" : true, 
      "hidden" : false, 
      "priority" : 0.5, 
      "tags" : { 

      }, 
      "slaveDelay" : 0, 
      "votes" : 1 
     } 
    ], 
    "settings" : { 
     "chainingAllowed" : true, 
     "heartbeatTimeoutSecs" : 10, 
     "getLastErrorModes" : { 

     }, 
     "getLastErrorDefaults" : { 
      "w" : 1, 
      "wtimeout" : 0 
     } 
    } 
} 

、バージョン番号は、いくつかのゴミ値です。これは、以前の9だった、と私は10です。ただし、DBへの別のインスタンス接続が、それは私が試したバージョン9を持っている必要があり、それにするために何かを変更:

cfg = rs.conf() 
cfg.version = 9 
rs.reconfig(cfg, { force: true }) 

しかし、それはゴミ値を作成しました。 9に戻す方法はありますか?ああ、rs.initiate()もうまくいきませんでした。このlinkには、レプリカセットを完全にシャットダウンする方法が記載されています。それは生産にあるように私にとっては危険です。助けてください!

答えて

0

それは以前の9だった、そして、私はそれ10.作るために何かを変えしかし、DBへの別のインスタンス接続がバージョン9

version値ではないレプリカセットの構成を有しているためにそれを必要とします手動で変更することを意味します。この値は、構成バージョンを区別するために使用される増分番号であるため、ドライバまたは複製セットメンバは、その構成が最新であることを認識します。

お気づきのことでしょうが、バージョン番号はいくらかのゴミ値です。

これはforced reconfigurationの予想される結果である:数十または数百万のことで、真の、かなりのレプリカセット構成増加にバージョン番号:あなたは力を使用する場合

。誤ってネットワークパーティションの両側で強制的に再構成してからネットワークパーティションが終了した場合、バージョンの衝突が発生しないように、これは正常です。再構成が唯一の災害復旧のために使用すべきであると、通常の再構成のために意図されていない強制

forceオプションは、部材上に新しい設定を強制します。この手順は、致命的な中断から回復する場合にのみ使用してください。再設定するたびにforceを使用しないでください。また、自動スクリプトでforceオプションを使用しないでください。まだプライマリが存在する場合はforceを使用しないでください。

私は9に戻す方法はありますか?

あり、バック9にバージョンを変更する通常の操作理由あってはならない、そうすることはあなたの展開(コミット書き込みの例については、潜在的なロールバック)との予期しない問題を作成することがあります。ダウンタイムでこれを変更する努力をすることができますが、これをそのままにしておくことをお勧めします(特に運用環境の場合)。

ああ、rs.initiate()も機能しませんでした。

rs.initiate()コマンドは、レプリカセットのライフサイクルに一度使用されている:あなたはoplogを作成するために、レプリカセットの最初のメンバーを初期化するとき。

関連する問題