MongoDB のレプリカセット運用時の 2.2 から 2.4 へのアップグレード
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() などでデータベースが正常か確認する。 ...