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

11,483 views

Published on

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

Published in: Technology
0 Comments
24 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,483
On SlideShare
0
From Embeds
0
Number of Embeds
4,694
Actions
Shares
0
Downloads
48
Comments
0
Likes
24
Embeds 0
No embeds

No notes for slide

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

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

×