replSet error RS102 too stale to catch up


replSet error RS102 too stale to catch up
セカンダリコピーメンバーは、シャットダウンしてメモリを追加する必要があります.早くシャットダウンし、翌日サーバーが立ち上がったらrs.status()情報を表示すると、「stateStr」:「RECOVERING」がキャプチャされます.実はメンテナンスウィンドウの時間をとっくに超えています.このとき、運が良ければerror RS 102 too stale to catch upエラーが表示されます.このエラーは、10分ごとにキャプチャされます.mongodbのログファイルから次のように表示されます.
 
Thu Mar 26 20:50:48.561 [rsBackgroundSync] replSet error RS102 too stale to catch up, at least from dal05mgo13.sl.dx:27017
Thu Mar 26 20:50:48.561 [rsBackgroundSync] replSet error RS102 too stale to catch up
Thu Mar 26 21:00:49.632 [rsBackgroundSync] replSet error RS102 too stale to catch up, at least from dal05mgo13.sl.dx:27017
Thu Mar 26 21:00:49.632 [rsBackgroundSync] replSet error RS102 too stale to catch up
Thu Mar 26 21:10:50.701 [rsBackgroundSync] replSet error RS102 too stale to catch up, at least from dal05mgo12.sl.dx:27017
Thu Mar 26 21:10:50.701 [rsBackgroundSync] replSet error RS102 too stale to catch up
Thu Mar 26 21:20:51.770 [rsBackgroundSync] replSet error RS102 too stale to catch up, at least from dal05mgo13.sl.dx:27017
Thu Mar 26 21:20:51.770 [rsBackgroundSync] replSet error RS102 too stale to catch up

 
メンテナンスウィンドウサイズの確認
プライマリ・レプリカのメンテナンス・ウィンドウとoplogサイズを表示するには、次の手順に従います.
 
rs_main:PRIMARY> db.printReplicationInfo()
configured oplog size: 23552MB
log length start to end: 38133secs (10.59hrs)
oplog first event time: Mon Mar 30 2015 12:00:13 GMT-0500 (CDT)
oplog last event time: Mon Mar 30 2015 22:35:46 GMT-0500 (CDT)
now: Mon Mar 30 2015 22:35:46 GMT-0500 (CDT)

 
メンテナンスウィンドウは10時間、oplogサイズは23 Gと表示されます.
セカンダリ・レプリカのメンテナンス・ウィンドウのサイズは、プライマリ・レプリカから同期したoplogをセカンダリ・レプリカが保存できるように、プライマリ・レプリカ・メンバーと一致することが望ましい.
 
どのようにoplogを再構築しますか?
standaloneで起動し、次のスクリプトの削除と作成を行います.
 
> use local
> db.oplog.rs.drop()
> db.createCollection("oplog.rs", {"capped" : true, "size" : 23 * 1024 * 1024 * 1024})
 
> db.runCommand( { create: "oplog.rs", capped: true, size: (23 * 1024 * 1024 * 1024) } )

 
replset error RS 102 too stale to catch upはどのように処理しますか?
レプリカセットエラーRS 102は古くてついていけません.このノードは、レプリカセットから離れる時間が長すぎるため、クラスタ全体についていけないことを示します.セカンダリコピーメンバーを再同期する必要があります.参照:
http://docs.mongodb.org/manual/tutorial/resync-replica-set-member/
公式マニュアルでは、データを削除して初期化同期(initial sync)を実施することで、メンバーを完全に再同期することを提案しています.
 
MongoDBは、初期化同期を実装する2つの方法を提供します.
  • データディレクトリを空にし、mongodを再起動します.MongoDBの通常初期化同期データを復元します.この方法はもっと簡単ですが、データを置き換えるのにもっと時間がかかります.
  • レプリカセットの別のメンバーから現在のデータディレクトリをコピーし、マシンを再起動します.このプロセスでは、データの置き換えがより高速ですが、より多くの手動手順が必要です.