weseek/growi-docker-compose

MongoDBのバージョンアップによるmongoコンテナの無限再起動問題

tats-u opened this issue · 5 comments

6854f23 が適用されてからでしょうか、mongoコンテナが無限に再起動を繰り返すようになりました。
docker-compose logs mongoでログを確認してみた所、"reason":"95: Operation not supported"という行を発見しました。
急遽すでに作成していたdocker-compose.override.ymlを編集し、オプションimage: mongo:3.6を追加したら一応動くようになりました。
docker-compose exec mongo mongoでmongoコンテナに入り、db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )と打つと、次のような出力を得ました。(追記: docker-compose exec mongo mongo --eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )' --quiet で一気に実行可能)

{ "featureCompatibilityVersion" : { "version" : "3.4" }, "ok" : 1 }

mongo:4.0を指定した場合は、同様に再起動ループを繰り返しますが、メッセージが異なります。

IMPORTANT: Collection admin.system.version is missing an UUID. We expect all collections to have UUIDs starting in FCV 3.6. Please make sure the FCV is version 3.6 before attempting an upgrade to 4.0; see http://dochub.mongodb.org/core/4.0-upgrade-fcv for more details. If the FCV is already 3.6, please try --repair with a 3.6 binary or initial sync to fix the data files.

このことから、mongoのデータはバージョン3.4で作られ、3.6では問題なく動作したものの4.4で問題が顕在化したものと考えられます。

https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/
https://docs.mongodb.com/manual/release-notes/4.2-upgrade-standalone/
https://docs.mongodb.com/manual/release-notes/4.4-upgrade-standalone/

の手順に従って後日アップデートを行いたいと思っています。

  1. mongoのバージョンをfeatureCompatibilityVersionの次バージョンに上げて起動し直す(docker-compose up -d)
  2. mongoコンテナのmongoシェルを起動(docker-compose exec mongo mongo)
  3. featureCompatibilityVersionをコンテナのバージョンに上げる(db.adminCommand( { setFeatureCompatibilityVersion: "(バージョン)" } ))

一応GROWIのドキュメントにもこのMongoDB内データのアップデートに関しては扱われていますが、Docker Composeでも必須であることに関する言及がなかったのは残念です。

https://docs.growi.org/ja/admin-guide/admin-cookbook/upgrade-mongodb.html#mongodb-v3-6-%E3%81%8B%E3%82%89-v4-0-%E3%81%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89

Docker Compose用の手順や、必要であることの言及があればよいと思います。ドキュメントに対するPRも検討中です。

開発者Wikiにも言及がありましたが、featureCompatibilityVersionが元から3.6であることと、手順が洗練されていない(わざわざBashを経由している、execdocker-composeを使っていない、画像化しているためコピペ不可)ので少し参考になったか、という程度でしょうか。
https://dev.growi.org/Tips/MongoDB%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

@tats-u 混乱させてしまってすみません。こちらは本当にタッチの差というか…本体の v4.2.0 リリースと同時に docs と growi-docker-compose を更新する予定だったのですが、ギリギリで本体側のみ週明けリリースに変更したので、growi-docker-compose だけ先行してマージされてしまった、というのが言い訳というか事の顛末になります。

v4.2.0 用のアップグレードマニュアルはこちらです。
https://docs.growi.org/ja/admin-guide/upgrading/42x.html

growi-docker-compose 利用者がどのようなパスであればアップグレードのためのマニュアルに誘導できるか、というのは、今のところ README の

Check upgrading guide

Access to Admin's guide - GROWI Docs
and see 'Upgrading' section.

で読んでもらえるのではないかなと考えていますが、不足であるとか、他に誘導のためのリンクを載せるべき場所でよい場所があればご提案いただけると幸いです。

以下の手順でアップグレードを済ませました。

# mongoイメージの固定バージョンを変える / 4.4に上げる時はimageの設定自体を消す
# 3.6→4.0→4.2→4.4(消去)
vim docker-compose.override.yml
docker-compose up -d
# $MONGO_VERSIONは最初のvimで固定したもの
# コマンドは思いの外一瞬で完了
docker-compose exec mongo mongo --eval 'db.adminCommand( { setFeatureCompatibilityVersion: "'$MONGO_VERSION'" } )'
# バージョン変えて繰り返し

以前3.4へのアップグレードでも手動操作が必要な時がありました。こちら同様、「growi-docker-compose利用者でも手動操作が必要」ということを明示していただけると幸いです。
https://docs.growi.org/ja/admin-guide/upgrading/34x.html#growi-docker-compose-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88

Dockerに特化した説明(コマンド)もあるとよいと思います。

Access to Admin's guide - GROWI Docs and see 'Upgrading' section.

Please be sure to access Admin's guide - GROWI Docs and see 'Upgrading' section before upgrading. Sometimes you may have to deal with problems that may occur by yourself.

このような文の方がよいと思います。(英文があっているかは保証しません)「アップグレード前に必ずお読みください。自分で起こりうる問題をご自身でご対処していただく必要があるかもしれません。」というニュアンスがほしいです。

@tats-u
アドバイスありがとうございます。ドキュメントの拡充をしてみました。
追加で気になる点などございましたら是非ご指摘をお願いします。

growi-docker-compose 側の注意喚起

README に注意喚起文を追加しました。

docs の docker-compose インストールガイドでのアップグレードガイドへの案内

Upgrade GROWI セクション冒頭で、アップグレードガイドを必ず確認するよう注意喚起文を追加しました。

docs の MongoDB アップグレードガイドに付録を追加

docker, docker-compose ユーザー向けの手順例 を追加しました。

ご対応ありがとうございます。対応箇所については異議ありません・・・と思いましたが、今後またMongoDBのアップグレードを2回した場合、upgrade-mongodb.mdの「GROWI のバージョン v4.1.x から v4.2.x にアップグレードする場合は、以下のセクションを上から順に一つずつ操作する必要があります。」の文面を変更する必要がある点を懸念します。

Upgrade GROWI セクション冒頭で、アップグレードガイドを必ず確認するよう注意喚起文を追加しました。

「Upgrade GROWI」の部分がlocalhostを指しています。

今回のアップデートで一番厄介なケースとしては、docker-compose.ymlを自動取得・自動更新しているケース(環境固有設定を別途docker-compose.override.ymlを作成して追記)が挙げられます。MongoDBのバージョンが3.6から一気に4.4まで上げられたため、いきなり4.4移行のコマンドを実行しようとして弾かれ、途方に暮れるケースが十分想定され、フォローが必要です。その他のケース(docker-composeを使っていない・自前のdocker-compose.ymlを利用している)ではMongoDBのバージョンを責任を持って管理しているはずなので、ここまで親切に明記する必要はそこまで感じませんが。

それと、https://docs.growi.org/ja/admin-guide/の「アップグレード」のリンクが3.4へのものになっています。英語版も同様です。
https://github.com/weseek/growi-docs/blame/master/docs/ja/admin-guide/README.md#L18