読者です 読者をやめる 読者になる 読者になる

IT Notebook

ITについての備忘録的なブログです

MongoDB - シャード/レプリカセット構成のスナップショットを取得して検証環境で構築する方法

AWSのEC2上にある本番環境のMongoDBのバックアップをスナップショットで取得しており、そのスナップショットからボリュームを作成して検証環境でシャード/レプリカセット構成を構築したときのメモ

環境

  • OS... Ubuntu14.04
  • MongoDB... 3.0.6
  • StorageEngine... WiredTiger

前提条件

  • 本手順で使用する環境はすべてはAWSで構築
  • 検証環境のEC2インスタンスのMongoDBのコンフィグは設定ずみ(データ領域があれば起動する状態)
  • 検証環境のボリュームのマウントポイントは作成済み
  • 本番環境と検証環境のシャード名/レプリカセット名は同一のものを使用

構築順序

1.本番環境バックアップ用Mongod停止

# 一貫性のあるバックアップを取得するためバックアップ用ノードのMongodを停止
mongo --port 27018
use admin
db.shutdownServer()
exit

2.データ領域のスナップショット取得

# バックアップ用ノードのデータ領域のボリュームのスナップショットを取得
aws ec2 create-snapshot --volume-id <VOLUME_ID>

3.Mongod起動

# バックアップ用ノードのMongodを起動
start mongod

4.スナップショットからボリュームを作成

# バックアップ用スナップショットからボリュームを作成
aws ec2 create-volume --snapshot-id <SNAPSHOT_ID> --size <SIZE> --availability-zone <AVAILABILITY_ZONE>

5.ボリュームを検証環境にAttach

# 作成したボリュームを検証環境にAttach
aws ec2 attach-volume --instance-id <INSTANCE_ID> --volume-id <VOLUME_ID> --device <DEVICE>

6.Attachしたボリュームをマウント

# Attachしたボリュームをマウント
mount -a

7.検証環境のMongodConfig起動

# AttachしたボリュームよりMongodConfigを起動
start mongodconfig

8.検証環境のMongod起動

# AttachしたボリュームよりMongodを起動
start mongod

9.検証環境のレプリカセット設定変更

# local dbにあるレプリカセット設定を削除
mongo --port 27018
use local
db.system.replset.remove({ "version": <VERSION_ID> })

# 停止/起動することにより設定が削除されたことを認識させる
use admin
db.shutdownServer()
exit

# 検証環境用レプリカセットの設定をする
mongo --port 27018
use local
config = { _id : "<SET_NAME>", members : [ { _id : 0, host : "<HOST>:<PORT>", "priority": 2 } ], "version": 1 }
rs.initiate(config)
exit

10.検証環境のMongodConfig設定変更

# MongoConfigのconfig dbにあるシャード設定を検証環境の情報に更新
mogno --port 27019
use config
db.shards.update({"_id": "<SET_NAME>"},{\$set:{"host": "<SHARD_NAME>/<HOST>:<PORT>"}},false, true)
exit

11.検証環境のMongosを起動

# 検証環境のMongosを起動
start mongos