2013年10月3日木曜日

mongoのレプリカセット構成を修正する方法

■概要
stateStrが突如「RECOVERING」のまま動かないとか
「STARTUP2」のまま何も始まらない
というときにとりあえず同じデータのまま再度レプリカセット構成でサービスを再開したい
というどうしようもないときには使えそうなのでメモしておきます

■環境
CentOS 6.3
mongo 2.4.5
※2台構成(host001, host002)の5ノード構成(20001から20005)で1台がスレーブ1台がバックアップ用途とする

■手順
  1. レプリカセットとして動作しているノードを全て停止
  2. kill or db.shutdownServer()で停止します
  3. PRIMARYとして動作させたいノード配下のデータ以外すべて削除する(ノード用の空ディレクトリだけ残しておく)
  4. EX) node01はデータあり、node02,03,04,05は空ディレクトリだけ用意
  5. PRIMARY用のノードディレクトリ配下のlocal.*をすべて削除する
  6. EX) node01配下のlocal.*ファイルを削除する(もしくは避ける)
  7. 全ノード起動(この時点でreplicaset構成が解消されている)
  8. mongo --port 20001
  9. PRIMARYにしたいノードに対してmongoコマンドで対話形式になる
  10. cfg={ "_id":"rs1", "version":1, "members":[ { "_id":1, "host":"host001:20001" }, { "_id":2, "host":"host001:20002" }, { "_id":3, "host":"host001:20003" }, { "_id":4, "host":"host002:20004", "votes":0, "priority":0, "slaveDelay":3600 }, { "_id":5, "host":"host002:20005", "votes":0, "priority":0 } ] }
  11. cfgを作成
  12. rs.initiate(cfg)
  13. レプリカセットを再構成する
rs.initiate(cfg)後に順次PRIMARY、SECONDARYとノードが構築されていくと思います
もうどうすることもできなくなったらやってみてください

0 件のコメント:

コメントを投稿