Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MongoDBJP 納涼もんご祭り

  • Login to see the comments

MongoDBJP 納涼もんご祭り

  1. 1. MongoDBJP 2013納涼祭
  2. 2. About me
  3. 3. { 名前: 窪田博昭 会社: 楽天(株) 肩書: MongoDBJP代表 趣味: Golf,フットサル 悩み: 30代は体が・・・ twitter:@crumbjp github: github.com/crumbjp }
  4. 4. MongoDB ?
  5. 5. MongoDBの哲学(優先順位) 1.Read性能 >>> 全て 2.データ一貫性 3.システム堅牢性 4.データ更新性能
  6. 6. 書き込み << 読み込み なシステムに 最適!!
  7. 7. WEBシステムって 大体そうだよね!
  8. 8. 今日のお題は・・・
  9. 9. 嘘・・・
  10. 10. じゃないよ~!
  11. 11. 選挙だ!
  12. 12. わかっちゃった人は ニヤリw
  13. 13. これは何? 2/3 3/5 4/7
  14. 14. 過半数とは 全体の半分よりも多い数
  15. 15. ニヤリ?
  16. 16. MongoDB replica-set
  17. 17. -22 - replica-set Primary Secondary SecondarySecondarySecondary Primary: 書き込み可能ノード Secondary: 読み取り専用ノード 全てのノードは同じデータを持っている 同期
  18. 18. -23 - replica-set Secondary SecondarySecondarySecondary MongoDBはPrimaryノードを 選挙で選ぶ。 下の例では得票数5/5で当選! Secondary 投票
  19. 19. -24 - replica-set Secondary SecondarySecondarySecondary MongoDBはPrimaryノードを 選挙で選ぶ。 下の例では得票数5/5で当選! Secondary Primary 昇格
  20. 20. -25 - replica-set Secondary SecondarySecondarySecondary Primaryノードが死んだ場合も 残ったノードで選挙を行う。 下の例では得票数4/5で当選! Primary 投票
  21. 21. -26 - replica-set Secondary SecondarySecondaryPrimary Primaryノードが死んだ場合も 残ったノードで選挙を行う。 下の例では得票数4/5で当選! Primary
  22. 22. となると、、、
  23. 23. -28 - replica-set SecondarySecondary 構成ノードが死に過ぎると 選挙で過半数割れが起きる。 こうなるとPrimaryノード不在となる Primary Primary Primary 投票
  24. 24. -29 - replica-set Primaryは書き込みを行うノード replica-setは書き込み不能となる データの更新は当然! replica-setの構成変更も不可!!
  25. 25. 致命的!!
  26. 26. これは何? 2/3 3/5 4/7
  27. 27. デッドライン 生存数 / 全数 2/3 3/5 4/7
  28. 28. そもそも何でこんな 難儀な仕組み になってんの? 1ノードでも 生きてれば良いじゃん!
  29. 29. そうは行かない!
  30. 30. -35 - replica-set Primary Secondary SecondarySecondarySecondary 常時同期 選挙に行かないとをやらないと 大変な事に!!
  31. 31. 負荷や ネットワークトラブル等で ノード間通信が途切れる と・・・
  32. 32. -37 - replica-set Primary Secondary SecondarySecondarySecondary もしネットワークが分断したら? 分断 常時同期
  33. 33. -38 - replica-set Primary Secondary SecondaryPrimarySecondary Primary 常時同期 分断 なんと Primaryが2つ に!!
  34. 34. こうなると当然 左右双方に別々の更新が走り データがズレるぜ! Primary Secondary SecondaryPrimarySecondary Primary 常時同期 分断 replica-set データ更新 データ更新
  35. 35. あ”ー データ破壊。。
  36. 36. これが分散システムの Split brain データの一貫性が 意味的に破壊されるので 修復できない
  37. 37. ちなみに、、 split brainが起きる様なケースでは 高負荷やトラブルが起きている。 大抵は1ノード毎バラバラになるし データ修復どころか大量のログから 現象を追う事すら困難。。。
  38. 38. -43 - replica-set Primary Primary こんな風に・・・ Primary 分断 Primary Primary Primary
  39. 39. 今回の運用対象 http://www.mongodb.jp
  40. 40. www.mongodb.jp httpd PHP mongosmemcached mongod secondary host B mongod primary host C mongod secondary hidden slaveDelay replica-set
  41. 41. www.mongodb.jp httpd PHP mongosmemcached mongod secondary host B mongod primary host C mongod secondary hidden slaveDelay replica-set ・負荷的に余裕なので基本はAll in one ・基本secondaryから読み、書込みは極少ない ・host C はバックアップと非常時のリカバリ www.mongodb.jpさえ無事なら 大きな障害にはならない
  42. 42. なので思い切って ヤル!!

×