読者です 読者をやめる 読者になる 読者になる

MongoDB のレプリカセット運用時の 2.2 から 2.4 へのアップグレード

Webサービス自体はを止めずにバックエンドの MongoDB のバージョンアップをしたのでメモ。
具体的なバージョンは、2.2.2 から 2.4.1 へのアップグレード。

サービスの構成

  • フロントエンドに Nginx + Node の Web サーバ 1 台
  • バックエンドに MongoDB のデータベースサーバ 2 台をレプリケーション
    但し、片方のサーバだけしか Primary にはならないように優先度をセットしている。
  • MongoDB のインストールは /usr/local 以下にバージョン毎にディレクトリ展開して、使用バージョンへシンボリックリンクを張っている。

以上のカジュアルな運用状況。

アップグレードの実行

前準備
  1. クライアントのライブラリアップデート
    mongoose や 各種言語の ライブラリを 2.4 対応にアップデートする。
  2. MongoDB 2.4 のバイナリを各サーバの /usr/local に展開しておく。
  3. 更新系のクライアント、daemon や cron によるバッチなどを停止もしくは無効にしておく。
  4. サービス死活監視を無効にする。
実行手順

Upgrade MongoDB to 2.4 — MongoDB Manual 2.4.8 こちらに従って行います。

  1. 現状の SECONDARY サーバに入り、mongod を停止させる。
  2. /usr/local/mongodb のシンボリックリンクを 2.4 へ張り替える。
  3. mongod を起動する。
  4. mongo シェルで db.serverStatus().version を実行し、バージョンアップを確認。
  5. ここまでで最初のサーバのアップグレード完了。
  6. 現状の PRIMARY サーバに入り、mongo シェルでアクセスし rs.stepDown() で SECONDARY に降格させる。
  7. ファイルオーバーが完了もしくは、SECONDARY になったことが rs.status() で確認できたら、mongod を停止させる。
  8. /usr/local/mongodb のシンボリックリンクを 2.4 へ張り替える。
  9. mongod を起動する。
  10. mongo シェルで db.serverStatus().version を実行し、バージョンアップを確認。
  11. これで2台目のサーバのアップグレード完了。
  12. 自分の環境ではこちらが PRIMARY に復帰したことを確認して終了。
補足

db.collection.validate() などでデータベースが正常か確認する。

後処理
  1. 停止した daemon や cron 設定を起動もしくは有効にする。
  2. サービス死活監視を有効にする。

まとめ

この間にフロントへのページアクセスは 150 PV/分 くらいありましたが、特に問題も起きずに終了しました。
カジュアルに運用する状況では、MongoDB は本当に使いやすいデータベースですね。