2020年3月10日火曜日

MongoDBを4.2にしたら起動しなくなったので、対応してみた!

VPNサーバーのバックエンドにMongoDBを使っていて、
せっかくなので、最新のStable版4.2にしようとしたらハマったので、メモです。


もくじ



前提条件

  • Ubuntu Linux(18.04 bionic)OS上で実行されているMongoDB
  • 作業マシン上でMongoDBが稼働
  • MongoDB 3.6,4.0 とUpgradeされてきた
  • 格納データは、比較的少量

流れ

  • 既存のMongoDBは4.0で4.2にUpgrade
  • 「WiredTiger」のエラーが出たので、解消させる
  • 4.2から4.0にDowngrade
  • データをダンプ
  • MongoDBをPurge
  • 既存データファイルを削除
  • MongoDB4.2をinstall
  • ダンプしたデータをrestore

既存のMongoDBは4.0で4.2にUpgrade

既存のMongoDBは、「4.0」でした。
しかしながら、「3.6」からUpgradeを経たものでした。
(2019年に作ったのになんでだろう?w)

公式のドキュメント通りに進めていきます
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get upgrade # 既存でMongoDBはインストールされていたため、upgrade

「WiredTiger」のエラーが出たので、解消させる

しかーし!エラーが
2020-03-04T12:53:55.236+0900 E  STORAGE  [initandlisten] WiredTiger error (13) [1583294035:236642][1094:0x7f2b0166db00], wiredtiger_open: __posix_open_file, 667: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied Raw: [1583294035:236642][1094:0x7f2b0166db00], wiredtiger_open: __posix_open_file, 667: /var/lib/mongodb/WiredTiger.turtle: handle-open: open: Permission denied
「Permission denied」。。。なんだと。。。
確認するも、権限でおかしそうなものはない。

WiredTigerで調べてみると、どうやら旧版の「MMAPv1」から移行する必要があるみたい
しかも、WiredTigerが採用されたのって、「Starting in MongoDB 3.2」だって。
2018年だか、2019年に作ったのになんでー!って思いながらも
せっかくなので、移行しておこうかと。

4.2から4.0にDowngrade

とりあえず、dump取ろうにもMongoDBが立ち上がっていないので。
Downgradeして立ち上げることにした。
sudo apt remove mongo*
sudo rm /etc/apt/sources.list.d/mongodb-org-4.2.list
wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo systemctl restart mongod.service

データをダンプ


公式の移行手順

こちらは参考程度に。
mongodump --out=hogehoge-dir

MongoDBをPurge

sudo systemctl stop mongod.service
sudo apt-get purge mongodb*

既存データファイルを削除

パッケージを削除しただけでは、既存データは残るので。
そちらを削除します。
sudo rm -rf /var/lib/mongodb

MongoDB4.2をinstall

また、新たにMongoDBをinstall
wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.2.list
sudo apt-get update
sudo apt-get install -y mongodb-org

ダンプしたデータをrestore

先程ダンプしたデータをrestoreします
sudo systemctl restart mongod.service
mongorestore hogehoge-dir
これで、アプリケーションから接続できて
正常稼働できることを確認します。

まとめ

ここに至るまで、いろいろ試行錯誤したのでメモにしました。
結局の所
  • データをダンプして
  • MongoDBのデータファイル消して、installし直し
  • データのリストア
という流れが、一番シンプルでした。
この方法だと、データ量が多いと難しいと思うので、公式の手順を参考にアレンジするしかないですね!

共有