MongoDB4.0がリリースされ、ついにMongoにもトランザクションが導入されました。
トランザクションは是非とも利用したいので現在稼働しているMongoを3.4から4.0にアップグレードしようと思います。
MongoはDocker上で1コンテナとして起動しています。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d06abb0b764a mongo "docker-entrypoint.s…" 2 months ago Up 13 minutes 27017/tcp mongo
バージョンは3.4
$ docker exec -it mongo bin/bash
root@d06abb0b764a:/# mongo --version
MongoDB shell version v3.4.16
Mongo公式に沿ってアップグレードを進めていきます。
https://docs.mongodb.com/manual/release-notes/4.0-upgrade-standalone/
ただ、3.4からアップグレードを試みると、以下のように失敗します。
db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
{
"ok" : 0,
"errmsg" : "Invalid command argument. Expected '3.6' or '3.4', found 4.0 in: { setFeatureCompatibilityVersion: \"4.0\", $db: \"admin\" }. See http://dochub.mongodb.org/core/3.6-feature-compatibility.",
"code" : 2,
"codeName" : "BadValue"
}
ということで、まずは3.6へのアップグレード
https://docs.mongodb.com/manual/release-notes/3.6-upgrade-standalone/
3.4 → 3.6
まずは、Mongo3.6のイメージをpull
docker pull mongo:3.6
docker-composeを利用している方は、docker-compose.yml
のimageを3.6にして、docker-compose up -d
mongo:
image: mongo:3.6
で、mongo3.6で起動したコンテナ内でFCVを3.6にする
> db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
{ "ok" : 1 }
これだけ!
いざ4.0へ
DockerHubから最新バージョンをインストール
DockerHubにあるMongoを確認すると、すでに4.0がlatestバージョンになっていました。
docker pull mongo:latest
コンテナをlatestにして再起動
mongo:
image: mongo
docker-compose up -d mongo
FCVを4.0にする
> db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )
{ "ok" : 1 }
お疲れ様でした。これでアップグレード完了となります。
悲報
すでにお気づきの方いらっしゃるかもしれませんが、トランザクションはレプリカセットの場合のみ対応してます。。。
そう、この手順スタンドアローンなんです。mongo1台で運用してるんです。。。
ということで、次はレプリカセットの設定をしていきます。
今回はここまで。