はじめに
どうも、おはこんばんちは。お茶太郎です。
サーバーリプレース作業、しばらくサボっていました。
しかし、年末年始の休みでやりたいことがあるため、その前準備として再開しました。
その00:LIVA マシン検討
その01:LIVA Z2 注文
その02:LIVA Z2 レビュー
その03:LIVA Z2 Ubuntuインストール
その04:LIVA Z2 Ubuntu設定 壱
その05:LIVA Z2 Ubuntu設定 弐 mongodb 設定
その06:LIVA Z2 Ubuntu設定 参 mongodb 設定2
その07:LIVA Z2 Ubuntu設定 四 mongodb 設定3
mongodbバージョン
今、移行作業中のバージョンアップは下記の通り
- 現行サーバーのmongodbバージョン:2.4.12
- 新サーバーのmongodbバージョン :3.6.3
バージョンが大きく上がる部分でトラブルが発生しています。
なんとなく、Linuxを使っているシステム屋さんではない私にはちょっとハードルが高く、手間取っております。
そして、試行錯誤して上手く行った対策を、備忘録としてブログに残しておきます。
記述に間違いがあった場合はご勘弁を。。。
ただし、注意事項やコマンドは実際に私が試して、困ったこと・上手く行ったことを記載していますので、再現性はあるはずです。
2.4から3.6へのバージョンアップは、必ずステージング環境(テスト環境)を用意して行ってください。
コレクションのバージョンアップやコマンドの修正など発生し、移行に時間が掛かります。
本番環境を直接バージョンアップすると、(使用状況にもよりますが)数日間サーバーが止まる事になります。
データファイルのバージョンアップ
状況
外付けハードディスクにあるコレクション(2.4.12で使っているもののコピー)を使ってMongodb(3.6.3)で立ち上げようとしたところ、エラー発生。
$ sudo mongod --dbpath /media/【moge-moge】/mongodb/
※【moge-moge】はmonngodbのパスを指定
これを実行し、前回ブログに記載した『journalファイルのクラッシュ』のトラブルが発生し、2.4環境で読み込みができなくなりました。
2.4の(本番)データをいきなり3.6で開こうとしない方が良いです。
エラー内容
IMPORTANT: UPGRADE PROBLEM: The data files need to be fully upgraded to version 3.4 before attempting an upgrade to 3.6; see http://dochub.mongodb.org/core/3.6-upgrade-fcv for more details.
どうやら、3.6にアップグレードする前に、データファイルを3.4にアップグレードする必要があるようです。
そして、詳細は「http://dochub.mongodb.org/core/3.6-upgrade-fcv」を見ろとのこと。
原因
2.4.12で使っていたデータファイルはいきなり、3.6.3では使えない。
まず、3.4にアップグレードして、その後さらに3.6へアップグレードと二段階の対応が必要。
そのために、mongodbも一旦3.4の古いバージョンが必要となる。
対策① mongodb Ver3.4環境作成
古いPCを引っ張り出し、Ubuntu環境を新たにもう一つ作成。
その環境にmongodb Ver2.4をインストールしました。
本番環境を動かしながらの移行のため、『3.6の新サーバー』と『3.4のデータファイルアップグレード用マシン』の2つを用意しています。
テスト用データをアップグレード用マシンでアップグレード、その後新サーバーでプログラム改修を進めています。
もろもろ、改修・テストが終わったら、改めて本番環境で稼働させているデータ(外付けディスク)を、アップグレード用マシンでアップグレードした後、新サーバーに繋ぐ予定です。
3.4環境は、トライフィールズの【Ubuntu MongoDBのインストールする手順】を参考に(記載事項そのまま)構築しました。
サイト削除等によって参照できなくなることを考慮し、念のため抜粋作業を下記には残しておきますが、実作業を行う方は上記サイトを参照ください。
パッケージ管理システムで使うパブリックキーを登録
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
パッケージ一覧にMongoDB3.4を登録
$ echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
3.4の登録ですが、トライフィールズさんのサイトで【Ubuntu 16.04】用のコマンドと表示されているものが、18.04でもそのまま実行できました。
パッケージデータベースを更新
$ sudo apt-get update
MongoDBパッケージをインストール
$ sudo apt-get install mongodb-org
MongoDBの起動
$ sudo mongod --dbpath /media/【moge-moge】/mongodb/
※【moge-moge】はmonngodbのパスを指定
外付けHDDなので上記のようにパスを指定して起動しています。
ただ、これで起動するとコンソールがひとつ立ち上がったままになってしまいます。
コンソールを非表示にしてmongo立ち上がる方法がわからないのですが。。。
どなたか、ご存じの方がいらっしゃったらコメント欄にコメントいただけると嬉しいです。
対策② データファイルのアップグレード
エラーメッセージで表示されたリンク先に記載されているのは、データファイルのバージョン確認。
コンソール立ち上げて、「mongo」と入力し、mongodbを立ち上げ、下記コマンド入力。
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
バージョン2.4と表示されました。
続いて、「Upgrade a Standalone to 3.6」のページに記載されている下記コマンドを実行。
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
再度、バージョン確認すると3.4になっています。
ここまで作業が終わったら、外付けディスクを新サーバー(3.6)に接続。
下記コマンドで外付けディスクを指定して、mongodbを起動。
$ sudo mongod --dbpath /media/【moge-moge】/mongodb/
エラーなく、起動することができました。
現時点では、3.6のmongodb環境で、3.4のデータファイルが認識されている状態です。
続いてデータフィルを3.4にアップグレードします。
3.4環境の作業と同じように、mongodbをコンソール上で立ち上げて、
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
を実行。
これで、現時点でデータファイルがバージョン3.6になりました。
もしかしたら、3.4のアップグレード用マシンで3.6にアップグレードできるかもしれませんが、試しませんでした。
最後に
なんとか、3.6でデータを表示することができました。
そして、現在Rubyのプログラムを改修中。
コレクションの指定方法や、Insert、Update、Indexで既に指定方法が変わっているようで、2.4のプログラムが止まります。
Rubyの修正内容は、次回のブログに記載することとします。
ということで、本日はここまで。。。
それではまた。 ノシ~~~~~