54
カジュアルに MongoDBの Backup機能説明 Masakazu Matsushita Cyberagent, Inc.

カジュアルにMongo dbのbackup機能説明

Embed Size (px)

DESCRIPTION

MongoDB Casual TalksのLTで話したネタ。 MongoDBのバックアップ機能について。

Citation preview

Page 1: カジュアルにMongo dbのbackup機能説明

カジュアルにMongoDBのBackup機能説明

Masakazu MatsushitaCyberagent, Inc.

Page 2: カジュアルにMongo dbのbackup機能説明

•松下 雅和 / @matsukaz•Cyberagent, Inc.•Ameba Pico (海外版ピグ)•Animal Land•DevLOVE Staff

About Me

Page 3: カジュアルにMongo dbのbackup機能説明

MongoDBでBackupと言えば?

Page 4: カジュアルにMongo dbのbackup機能説明

mongoexportor

mongodump

Page 5: カジュアルにMongo dbのbackup機能説明

mongoexportはJSON/CSV形式でデータを出力

Page 6: カジュアルにMongo dbのbackup機能説明

ただし全てのデータ型をサポートしているわけではない

Page 7: カジュアルにMongo dbのbackup機能説明

以下のデータ型はデータの忠実性が一部失われてしまう

data_regexdata_oiddata_ref

data_binary data_date data_timestamp

Page 8: カジュアルにMongo dbのbackup機能説明

> db.hoge.save( { val : 100 } );> db.hoge.save( { val : NumberInt( 200 ) } );

> db.hoge.find( val : { $type : 1} );{ _id : ObjectId("..."), val : 100 }

> db.hoge.find( val : { $type : 16} );{ _id : ObjectId("..."), val : 200 }

1 = double

16 = int

数値型も全てdoubleになる

Page 9: カジュアルにMongo dbのbackup機能説明

mongoexport(・A ・)イクナイ

Page 10: カジュアルにMongo dbのbackup機能説明

mongodumpはBSON形式でデータを出力

Page 11: カジュアルにMongo dbのbackup機能説明

データは正しい情報のまま出力される

Page 12: カジュアルにMongo dbのbackup機能説明

Onlineでの実行も可能

Page 13: カジュアルにMongo dbのbackup機能説明

ただし小規模での利用を想定したもの

Page 14: カジュアルにMongo dbのbackup機能説明

全データが一箇所に出力されるのでデータ量に注意

Page 15: カジュアルにMongo dbのbackup機能説明

実行中はパフォーマンスにも

影響する

Page 16: カジュアルにMongo dbのbackup機能説明

mongorestoreも時間がかかる

Page 17: カジュアルにMongo dbのbackup機能説明

Sharding環境だとさらに問題が

Page 18: カジュアルにMongo dbのbackup機能説明

--oplogオプションは使えない

(dump開始時~完了時の差分のoplogも出力する機能)

Page 19: カジュアルにMongo dbのbackup機能説明

mongorestoreだけでなくrestore後のマイグレーションも時間がかかる

Page 20: カジュアルにMongo dbのbackup機能説明

データ量が多いとひどいことに・・・

orz

Page 21: カジュアルにMongo dbのbackup機能説明

MongoDBを停止させていいなら

話は簡単

Page 22: カジュアルにMongo dbのbackup機能説明

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Shard内のmongod1台とmongocのデータを物理コピーでOK

Page 23: カジュアルにMongo dbのbackup機能説明

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

リカバるときはデータをコピーするだけ

Page 24: カジュアルにMongo dbのbackup機能説明

Onlineで、かつサービスへの影響を抑えたBackupって出来ないの?

Page 25: カジュアルにMongo dbのbackup機能説明

そんなうまい話なんて・・・

Page 26: カジュアルにMongo dbのbackup機能説明

あるんです!!

Page 27: カジュアルにMongo dbのbackup機能説明

Officialな手順

Page 28: カジュアルにMongo dbのbackup機能説明

1. balancerを止める

use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

Page 29: カジュアルにMongo dbのbackup機能説明

2. 全Primaryをlockdb.fsyncLock();

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

更新されないようにする更新されないようにする更新されないようにする

Page 30: カジュアルにMongo dbのbackup機能説明

3. config情報をBackup

mongodump -d config dump_configdata

Page 31: カジュアルにMongo dbのbackup機能説明

4. SecondaryのデータをBackup

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Page 32: カジュアルにMongo dbのbackup機能説明

5. 全PrimaryをUnlockdb.fsyncLock();

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Page 33: カジュアルにMongo dbのbackup機能説明

6. balancerを有効化

use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );

Page 34: カジュアルにMongo dbのbackup機能説明

Backupに時間がかかるとlock時間が長すぎる

Page 35: カジュアルにMongo dbのbackup機能説明

そこで

Page 36: カジュアルにMongo dbのbackup機能説明

mongodを落としてあとからゆっくりBackupを取ったら?

Page 37: カジュアルにMongo dbのbackup機能説明

手順はほぼ一緒

Page 38: カジュアルにMongo dbのbackup機能説明

1. balancerを止める

use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

Page 39: カジュアルにMongo dbのbackup機能説明

2. 全Primaryをlockdb.fsyncLock();

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

更新されないようにする更新されないようにする更新されないようにする

Page 40: カジュアルにMongo dbのbackup機能説明

3. config情報をBackup

mongodump -d config dump_configdata

Page 41: カジュアルにMongo dbのbackup機能説明

4. Secondaryを落とす

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Page 42: カジュアルにMongo dbのbackup機能説明

5. 全PrimaryをUnlockdb.fsyncLock();

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Page 43: カジュアルにMongo dbのbackup機能説明

6. balancerを有効化

use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );

Page 44: カジュアルにMongo dbのbackup機能説明

7. 落としたSecondaryをBackup

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

Page 45: カジュアルにMongo dbのbackup機能説明

8. 落としたSecondaryを起動

Shard 1

mongod

mongod

mongod

Shard 2

mongod

mongod

mongod

Shard 3

mongod

mongod

mongod

mongoc

mongoc

mongoc

勝手に同期が取られる勝手に同期が取られる勝手に同期が取られる

Page 46: カジュアルにMongo dbのbackup機能説明

カジュアルに検証した限りは問題なし

Page 47: カジュアルにMongo dbのbackup機能説明

なお、この方法を試して問題が起きても当方でh(ry

Page 48: カジュアルにMongo dbのbackup機能説明

銀河さん情報だとSecondaryの

Lockでいけるんだとか

Page 49: カジュアルにMongo dbのbackup機能説明

・・・

Page 50: カジュアルにMongo dbのbackup機能説明

そっちのがいいよね

Page 51: カジュアルにMongo dbのbackup機能説明

アプリケーションに影響ないしー...( = =)トオイメ

Page 52: カジュアルにMongo dbのbackup機能説明

PrimaryとSecondaryの同期ズレだけ許容できるかどうかだけ?

Page 53: カジュアルにMongo dbのbackup機能説明

大抵できると思うのでSecondaryの

Lockの方向でドウゾ

Page 54: カジュアルにMongo dbのbackup機能説明

ご清聴ありがとうございました!