カジュアルにmongo dbのbackup機能説明
DESCRIPTION
MongoDB Casual TalksのLTで話したネタ。 MongoDBのバックアップ機能について。TRANSCRIPT
![Page 1: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/1.jpg)
カジュアルにMongoDBのBackup機能説明
Masakazu MatsushitaCyberagent, Inc.
![Page 2: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/2.jpg)
•松下 雅和 / @matsukaz•Cyberagent, Inc.•Ameba Pico (海外版ピグ)•Animal Land•DevLOVE Staff
About Me
![Page 3: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/3.jpg)
MongoDBでBackupと言えば?
![Page 4: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/4.jpg)
mongoexportor
mongodump
![Page 5: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/5.jpg)
mongoexportはJSON/CSV形式でデータを出力
![Page 6: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/6.jpg)
ただし全てのデータ型をサポートしているわけではない
![Page 7: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/7.jpg)
以下のデータ型はデータの忠実性が一部失われてしまう
data_regexdata_oiddata_ref
data_binary data_date data_timestamp
![Page 8: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/8.jpg)
> 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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/9.jpg)
mongoexport(・A ・)イクナイ
![Page 10: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/10.jpg)
mongodumpはBSON形式でデータを出力
![Page 11: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/11.jpg)
データは正しい情報のまま出力される
![Page 12: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/12.jpg)
Onlineでの実行も可能
![Page 13: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/13.jpg)
ただし小規模での利用を想定したもの
![Page 14: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/14.jpg)
全データが一箇所に出力されるのでデータ量に注意
![Page 15: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/15.jpg)
実行中はパフォーマンスにも
影響する
![Page 16: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/16.jpg)
mongorestoreも時間がかかる
![Page 17: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/17.jpg)
Sharding環境だとさらに問題が
![Page 18: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/18.jpg)
--oplogオプションは使えない
(dump開始時~完了時の差分のoplogも出力する機能)
![Page 19: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/19.jpg)
mongorestoreだけでなくrestore後のマイグレーションも時間がかかる
![Page 20: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/20.jpg)
データ量が多いとひどいことに・・・
orz
![Page 21: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/21.jpg)
MongoDBを停止させていいなら
話は簡単
![Page 22: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/22.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/23.jpg)
Shard 1
mongod
mongod
mongod
Shard 2
mongod
mongod
mongod
Shard 3
mongod
mongod
mongod
mongoc
mongoc
mongoc
リカバるときはデータをコピーするだけ
![Page 24: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/24.jpg)
Onlineで、かつサービスへの影響を抑えたBackupって出来ないの?
![Page 25: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/25.jpg)
そんなうまい話なんて・・・
![Page 26: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/26.jpg)
あるんです!!
![Page 27: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/27.jpg)
Officialな手順
![Page 28: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/28.jpg)
1. balancerを止める
use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
![Page 29: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/29.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/30.jpg)
3. config情報をBackup
mongodump -d config dump_configdata
![Page 31: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/31.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/32.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/33.jpg)
6. balancerを有効化
use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );
![Page 34: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/34.jpg)
Backupに時間がかかるとlock時間が長すぎる
![Page 35: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/35.jpg)
そこで
![Page 36: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/36.jpg)
mongodを落としてあとからゆっくりBackupを取ったら?
![Page 37: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/37.jpg)
手順はほぼ一緒
![Page 38: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/38.jpg)
1. balancerを止める
use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );
![Page 39: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/39.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/40.jpg)
3. config情報をBackup
mongodump -d config dump_configdata
![Page 41: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/41.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/42.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/43.jpg)
6. balancerを有効化
use config;db.settings.update( { _id: "balancer" }, { $set : { stopped: false } } , true );
![Page 44: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/44.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/45.jpg)
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機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/46.jpg)
カジュアルに検証した限りは問題なし
![Page 47: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/47.jpg)
なお、この方法を試して問題が起きても当方でh(ry
![Page 48: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/48.jpg)
銀河さん情報だとSecondaryの
Lockでいけるんだとか
![Page 49: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/49.jpg)
・・・
![Page 50: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/50.jpg)
そっちのがいいよね
![Page 51: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/51.jpg)
アプリケーションに影響ないしー...( = =)トオイメ
![Page 52: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/52.jpg)
PrimaryとSecondaryの同期ズレだけ許容できるかどうかだけ?
![Page 53: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/53.jpg)
大抵できると思うのでSecondaryの
Lockの方向でドウゾ
![Page 54: カジュアルにMongo dbのbackup機能説明](https://reader034.vdocuments.net/reader034/viewer/2022052222/54b618984a7959a32a8b4608/html5/thumbnails/54.jpg)
ご清聴ありがとうございました!