メインコンテンツへ移動

MongoDB 3.4 から 4.4 へのアップグレード

注意
  • アップグレードに必要な時間は、MongoDB データベース内のコレクション数によって異なります。
    コマンド find /data/mongodb/ -name '*collection*' | wc -l でコレクション数を確認できます。
    例:コレクションが10,000未満の場合、およそ1分、100,000なら約10分、300,000だと約30分かかります。サーバーディスク性能によっても影響されます。
  • 以下のコマンド例では、MongoDB プログラムのパスは /usr/local/mongodb/、データディレクトリは /data/mongodb/ です。異なる場合は記載内容を適宜変更してください。

シングルノード​

事前準備​

  1. Docker インストール の内容に従い、MongoDB サーバーに Docker をインストールします。
  2. アップグレード補助用イメージを取得します(オフラインパッケージダウンロード)。
docker pull registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0
  1. MongoDB v4.4.31 のインストールパッケージをダウンロードし、サーバーへアップロードします。
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.31.tgz
  1. MongoDB v4.4.31 のインストールパッケージを解凍し、パッケージ内の mongod プログラムに依存関係の不足がないか確認します。不足している場合は追加インストールしてください。

MongoDB v4.4.31 パッケージを解凍します。

tar xvf mongodb-linux-x86_64-rhel70-4.4.31.tgz

mongod プログラムの依存関係有無を確認します。

ldd mongodb-linux-x86_64-rhel70-4.4.31/bin/mongod

アップグレード開始​

MongoDBはバージョンごとに段階的にアップグレードを実施してください。 3.4 から 4.4 へアップグレードする場合、3.6・4.0・4.2 を順番に経由してアップグレードコマンドを合計4回実行します。
アップグレード時にバージョン不一致のメッセージが表示された場合は、直前のバージョンへのアップグレードコマンドを再度実行してください(例:3.4→3.6成功後、3.6→4.0で失敗した場合は、再度3.4→3.6コマンドを実行し、"exit upgrade"が出力されるまで繰り返します)。複数回試行しても解決しない場合、/data/mongodb/upgrade-xxxx.log で原因を確認できます。

  1. マイクロサービスを停止します。
  2. MongoDB データのバックアップを行います。
  3. 稼働中のMongoDBインスタンスを停止します。
systemctl stop mongodb
  1. MongoDB バージョンをアップグレードします。

3.4 から 3.6 へのアップグレード

docker run -i --rm -v /data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.4 3.6'

3.6 から 4.0 へのアップグレード

docker run -i --rm -v /data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 3.6 4.0'

4.0 から 4.2 へのアップグレード

docker run -i --rm -v /data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.0 4.2'

4.2 から 4.4 へのアップグレード

docker run -i --rm -v /data/mongodb:/data/mongodb registry.cn-hangzhou.aliyuncs.com/mdpublic/mingdaoyun-sc-upgrade:1.0.0 <<< 'upgradeMongodb.sh 4.2 4.4'
  1. 既存のMongoDBパッケージをv4.4.31のパッケージに置き換えます。
mv /usr/local/mongodb /usr/local/mongodb.bak-v3.4
cp -r mongodb-linux-x86_64-rhel70-4.4.31 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb /data/mongodb

※MongoDB v4.4.31 のパッケージ名は実際のファイル名に合わせてください。

  1. MongoDBの起動コマンドに --bind_ip 0.0.0.0 パラメータを追加してください。
vim /etc/systemd/system/mongodb.service
# ExecStartコマンドの末尾に `--bind_ip 0.0.0.0` を追加
  1. systemd をリロードし、MongoDBを起動します。
systemctl daemon-reload
systemctl start mongodb
  1. MongoDBへログインし、featureCompatibilityVersion を確認します。
/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  • 出力例が { "featureCompatibilityVersion" : { "version" : "4.4" }, "ok" : 1 } であれば、アップグレード成功です。

レプリカセット​

事前準備​

  1. 各バージョンの必要なMongoDBインストールパッケージをダウンロードし、サーバーへアップロードします。
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.6.23.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.28.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.25.tgz
https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.31.tgz
  1. バージョンごとにインストールパッケージを解凍し、mongod プログラムの依存関係に不足があれば追加インストールしてください。

解凍コマンド例

tar xvf mongodb-linux-x86_64-3.6.23.tgz
tar xvf mongodb-linux-x86_64-4.0.28.tgz
tar xvf mongodb-linux-x86_64-rhel70-4.2.25.tgz
tar xvf mongodb-linux-x86_64-rhel70-4.4.31.tgz

依存関係の確認

ldd mongodb-linux-x86_64-3.6.23/bin/mongod
ldd mongodb-linux-x86_64-4.0.28/bin/mongod
ldd mongodb-linux-x86_64-rhel70-4.2.25/bin/mongod
ldd mongodb-linux-x86_64-rhel70-4.4.31/bin/mongod

アップグレード開始​

注意
  • アップグレード前にマイクロサービスを停止し、MongoDBデータのバックアップを取ってください。
  • レプリカセットは各ノードごとにアップグレードします。SECONDARYノードから順に行い、最後にPRIMARYノードをアップグレードします。

3.4 から 3.6 へのアップグレード​

  1. SECONDARYノードを1台ずつアップグレードします。
    現在のMongoDBインスタンスを停止し、既存パッケージを3.6版に入れ替えます。
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-3.4
cp -r mongodb-linux-x86_64-3.6.23 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb

※MongoDB v3.6.23 のパッケージ名は実際のファイル名に合わせてください。

  1. MongoDB の起動コマンドに --bind_ip 0.0.0.0 を追加してください。
vim /etc/systemd/system/mongodb.service
# ExecStart に `--bind_ip 0.0.0.0` を追加
  1. systemd をリロードし、MongoDB を起動します。
systemctl daemon-reload
systemctl start mongodb
  • 起動後、ノードへのログインができない場合はサービス状況やデータ量・ディスク性能に起因する遅延を確認してください。
  1. 他の SECONDARY ノードも同様にアップグレードします。

  2. PRIMARY ノードをダウングレードします。 MongoDB PRIMARY ノードへログインし、rs.stepDown() コマンドで PRIMARY を強制降格します。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> rs.stepDown()
  1. 旧PRIMARYノードもSECONDARYノードと同じ手順でアップグレードします。

  2. PRIMARYノードへログインし、featureCompatibilityVersion を 3.6 に設定します。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
  • 正常時の出力例:{ "ok" : 1 } 各ノードの状態確認
> rs.status()
  • PRIMARY 1台・SECONDARY 2台が理想です。

featureCompatibilityVersion の確認

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  • 出力が { "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 } ならアップグレード成功です。

3.6 から 4.0 へのアップグレード​

  1. SECONDARYノードから1台ずつアップグレードします。
    現在のMongoDBインスタンスを停止し、4.0版のパッケージに入れ替え、MongoDBを起動します。
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-3.6
cp -r mongodb-linux-x86_64-4.0.28 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb

※MongoDB v4.0.28 のパッケージ名は実際のファイル名に合わせてください。

  • ノードへのログイン不可の場合や、起動遅延時はサービスやハードウェア状況を確認してください。
  1. 他のSECONDARYノードも同様にアップグレードします。

  2. PRIMARYノードをダウングレードします。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> rs.stepDown()
  1. 旧PRIMARYノードもSECONDARYノードと同じ手順でアップグレードします。

  2. PRIMARYノードでfeatureCompatibilityVersionを4.0に設定します。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
  • 正常出力:{ "ok" : 1 }
    各ノードの状態確認
> rs.status()
  • PRIMARY 1台・SECONDARY 2台を確認します。

featureCompatibilityVersion の確認

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  • { "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 } になっていれば成功です。

4.0 から 4.2 へのアップグレード​

  1. SECONDARYノードを1台ずつアップグレードし、MongoDBを起動します。
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-4.0
cp -r mongodb-linux-x86_64-rhel70-4.2.25 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb

※MongoDB v4.2.25 のパッケージ名はファイルに合わせてください。

  • ログインできない場合や、起動が遅い場合は状況を確認してください。
  1. 他のSECONDARYノードも同様にアップグレードします。

  2. PRIMARYノードをダウングレードします。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> rs.stepDown()
  1. 旧PRIMARYノードもSECONDARYノードと同じ手順でアップグレードします。

  2. PRIMARYノードでfeatureCompatibilityVersionを4.2に設定します。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )
  • 正常出力:{ "ok" : 1 } 各ノードの状態を確認
> rs.status()
  • PRIMARY 1台・SECONDARY 2台であることを確認してください。

featureCompatibilityVersion の確認

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  • { "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 } ならアップグレード完了です。

4.2 から 4.4 へのアップグレード​

  1. SECONDARYノードを1台ずつアップグレードし、MongoDBを起動します。
systemctl stop mongodb
mv /usr/local/mongodb /usr/local/mongodb.bak-4.2
cp -r mongodb-linux-x86_64-rhel70-4.4.31 /usr/local/mongodb
chown -R mongodb:mongodb /usr/local/mongodb
systemctl start mongodb

※MongoDB v4.4.31 のパッケージ名はファイルに合わせてください。

  • ノードのログイン不可や遅延があれば状況確認を行ってください。
  1. 他のSECONDARYノードも同様の手順でアップグレードします。

  2. PRIMARYノードをダウングレードします。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> rs.stepDown()
  1. 旧PRIMARYノードもSECONDARYノード同様にアップグレードします。

  2. PRIMARYノードでfeatureCompatibilityVersionを4.4に設定します。

/usr/local/mongodb/bin/mongo -u root -p password --authenticationDatabase admin
> db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
  • 正常出力:{ "ok" : 1 }
    各ノードの状態確認
> rs.status()
  • PRIMARY 1台・SECONDARY 2台であることを確認してください。

featureCompatibilityVersion の確認

> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
  • { "featureCompatibilityVersion" : { "version" : "4.4" }, "ok" : 1 } となればアップグレード完了です。