Webサービス自体はを止めずにバックエンドの MongoDB のバージョンアップをしたのでメモ。
具体的なバージョンは、2.2.2 から 2.4.1 へのアップグレード。
サービスの構成
- フロントエンドに Nginx + Node の Web サーバ 1 台
- バックエンドに MongoDB のデータベースサーバ 2 台をレプリケーション
但し、片方のサーバだけしか Primary にはならないように優先度をセットしている。 - MongoDB のインストールは /usr/local 以下にバージョン毎にディレクトリ展開して、使用バージョンへシンボリックリンクを張っている。
以上のカジュアルな運用状況。
アップグレードの実行
前準備
- クライアントのライブラリアップデート
mongoose や 各種言語の ライブラリを 2.4 対応にアップデートする。 - MongoDB 2.4 のバイナリを各サーバの /usr/local に展開しておく。
- 更新系のクライアント、daemon や cron によるバッチなどを停止もしくは無効にしておく。
- サービス死活監視を無効にする。
実行手順
Upgrade MongoDB to 2.4 — MongoDB Manual 2.4.8 こちらに従って行います。
- 現状の SECONDARY サーバに入り、mongod を停止させる。
- /usr/local/mongodb のシンボリックリンクを 2.4 へ張り替える。
- mongod を起動する。
- mongo シェルで db.serverStatus().version を実行し、バージョンアップを確認。
- ここまでで最初のサーバのアップグレード完了。
- 現状の PRIMARY サーバに入り、mongo シェルでアクセスし rs.stepDown() で SECONDARY に降格させる。
- ファイルオーバーが完了もしくは、SECONDARY になったことが rs.status() で確認できたら、mongod を停止させる。
- /usr/local/mongodb のシンボリックリンクを 2.4 へ張り替える。
- mongod を起動する。
- mongo シェルで db.serverStatus().version を実行し、バージョンアップを確認。
- これで2台目のサーバのアップグレード完了。
- 自分の環境ではこちらが PRIMARY に復帰したことを確認して終了。
補足
db.collection.validate()
などでデータベースが正常か確認する。
後処理
- 停止した daemon や cron 設定を起動もしくは有効にする。
- サービス死活監視を有効にする。
まとめ
この間にフロントへのページアクセスは 150 PV/分 くらいありましたが、特に問題も起きずに終了しました。
カジュアルに運用する状況では、MongoDB は本当に使いやすいデータベースですね。