[MongoDB] バージョン 2.6 から 3.6 まで、バージョンアップによる変遷と移行時の考慮点

先の記事にて、まもなく登場するMongoDBの最新バージョン、4.0の新機能を紹介しました。一方で、以前のバージョンのMongoDBをバージョンアップせず、古いまま動作している環境も多いのではないでしょうか。この記事では、バージョン2.6以降、最新の3.6まで、インフラ視点での変化点を紹介します。
2018.04.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菊池です。この記事はHoneyHoney大宮店よりお送りしています。

先の記事にて、まもなく登場するMongoDBの最新バージョン、4.0の新機能を紹介しました。

一方で、以前のバージョンのMongoDBをバージョンアップせず、古いまま動作している環境も多いのではないでしょうか。この記事では、バージョン2.6以降、最新の3.6まで、インフラ視点での変化点を紹介します。

古くなった環境をバージョンアップするつ判断の助けになれば幸いです。

MongoDB リリースバージョン(v2.6 以降)

2.6以降の各メジャーバージョンのリリース日と、最新のマイナーバージョンです。

メジャーバージョン メジャーバージョンリリース日 最新マイナーバージョン(リリース日)
2.6 2014/04/08 2.6.12(2016/3/24)
3.0 2015/03/03 3.0.15(2017/05/15)
3.2 2015/12/08 3.2.19(2018/02/06)
3.4 2016/11/29 3.4.13(2018/02/10)
3.6 2017/12/05 3.6.4(2018/04/16)

※ 2018/04/16、バージョン3.6.4がリリースされました

最近では、概ね1年ごとに新しいメジャーバージョンが登場しています。

バージョン3.2以降は、最近までアップデートが提供されているようです。一方で、バージョン2.6は最新マイナーバージョンでも2年以上前となっています。

バージョンアップに伴うインフラ視点での変化点

バージョン 3.0

新しいストレージエンジン、WiredTigerが提供されました。WiredTigerは従来のMMAPv1と比較し、以下のようなメリットがあります。

  • 更新時のロックがドキュメント単位に(2.6以前のMMAPv1はデータベース単位)なりました。ロック待ち時間が実質なくなり、書き込み性能の大幅向上が見込めます。
  • データ圧縮に対応。JSONデータを格納する都合、データサイズが肥大化することが多いMongoDBですが、データ圧縮より最大1/20程度まで圧縮されることもあるようです。また、データファイルのフラグメンテーションも発生しなくなりますので、ディスク・メモリを無駄に消費することがなくなります。
  • メモリ使用量の制限が可能になります。
  • ストレージ統計情報を出力可能になりました。

バージョン2.6 -> 3.0にバージョンアップしても、基本的に利用していたストレージエンジンがそのまま引き継がれます。3.0におけるMMAPv1からWiredTigerへの移行は、以下の記事にて紹介しました。

バージョン 3.2

このバージョンでは、3.0で登場したストレージエンジン、WiredTigerがデフォルトになりました。従来のMMAPv1も使用可能ですが、その場合には明示的に指定する必要があります。

また、レプリケーション環境では、プロトコルのバージョンアップ(protocol version 1)によりプライマリ選出が高速化しました。これにより、フェイルオーバーが高速化しています。

シャード構成では、Configサーバをレプリカセット構成で組むことが可能になりました。これにより、通常のノードと同様に扱え、3台以上の構成も可能になります。バージョン3.2への移行および、Configサーバをレプリカセットに移行する手順は以下で紹介しています。

バージョン 3.4

このバージョンでは、従来型(非レプリカセット構成)のConfigサーバが非サポートとなりました。バージョンアップ、移行のためにはConfigサーバをレプリカセット構成にしておく必要があります。

また、Configサーバとして動作させるノードには、shardsvrとして明示的に指定する必要があります。以下が設定ファイルでのclusterRole指定方法です。

sharding:
  clusterRole: configsvr

バージョン 3.6

mongodおよびmongosのデフォルトで、lodalhost(127.0.0.1)のみにバインドするようになりました。バインドIPを明示的に設定する必要があります。

net:
  bindIp: 172.31.xxx.xxx

また、レプリカセットで従来のプロトコル(protocol version 0)は非推奨になっています。こちらは、クラスタメンバーが3.2以降を利用していれば特に問題ありません。

まとめ

以上、バージョン2.6から現状最新の3.6までの変遷と、インプラ観点での主要な変更点を紹介しました。バージョンアップすることで、多くの恩恵があることがわかるかと思います。

まもなく、最新のメジャーバージョン4.0が登場します。その前に、古い環境をバージョンアップして備えましょう!