Top Banner
47

MongoDBJP 納涼もんご祭り

Jun 21, 2015

Download

Documents

Hiroaki Kubota
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MongoDBJP 納涼もんご祭り
Page 2: MongoDBJP 納涼もんご祭り

MongoDBJP2013納涼祭

Page 3: MongoDBJP 納涼もんご祭り

About me

Page 4: MongoDBJP 納涼もんご祭り

{名前: 窪田博昭会社: 楽天(株)肩書: MongoDBJP代表趣味: Golf,フットサル悩み: 30代は体が・・・twitter:@crumbjpgithub: github.com/crumbjp

}

Page 5: MongoDBJP 納涼もんご祭り
Page 6: MongoDBJP 納涼もんご祭り
Page 7: MongoDBJP 納涼もんご祭り

MongoDB ?

Page 8: MongoDBJP 納涼もんご祭り
Page 9: MongoDBJP 納涼もんご祭り

MongoDBの哲学(優先順位)1.Read性能 >>> 全て2.データ一貫性3.システム堅牢性4.データ更新性能

Page 10: MongoDBJP 納涼もんご祭り

書き込み << 読み込みなシステムに

最適!!

Page 11: MongoDBJP 納涼もんご祭り

WEBシステムって大体そうだよね!

Page 12: MongoDBJP 納涼もんご祭り

今日のお題は・・・

Page 13: MongoDBJP 納涼もんご祭り
Page 14: MongoDBJP 納涼もんご祭り

嘘・・・

Page 15: MongoDBJP 納涼もんご祭り

じゃないよ~!

Page 16: MongoDBJP 納涼もんご祭り

選挙だ!

Page 17: MongoDBJP 納涼もんご祭り

わかっちゃった人は

ニヤリw

Page 18: MongoDBJP 納涼もんご祭り

これは何?2/33/54/7

Page 19: MongoDBJP 納涼もんご祭り

過半数とは

全体の半分よりも多い数

Page 20: MongoDBJP 納涼もんご祭り

ニヤリ?

Page 21: MongoDBJP 納涼もんご祭り

MongoDBreplica-set

Page 22: MongoDBJP 納涼もんご祭り

-22 -

replica-set

Primary

Secondary SecondarySecondarySecondary

Primary: 書き込み可能ノードSecondary: 読み取り専用ノード

全てのノードは同じデータを持っている

同期

Page 23: MongoDBJP 納涼もんご祭り

-23 -

replica-set

Secondary SecondarySecondarySecondary

MongoDBはPrimaryノードを選挙で選ぶ。下の例では得票数5/5で当選!

Secondary投票

Page 24: MongoDBJP 納涼もんご祭り

-24 -

replica-set

Secondary SecondarySecondarySecondary

MongoDBはPrimaryノードを選挙で選ぶ。下の例では得票数5/5で当選!

Secondary Primary昇格

Page 25: MongoDBJP 納涼もんご祭り

-25 -

replica-set

Secondary SecondarySecondarySecondary

Primaryノードが死んだ場合も残ったノードで選挙を行う。下の例では得票数4/5で当選!

Primary投票

Page 26: MongoDBJP 納涼もんご祭り

-26 -

replica-set

Secondary SecondarySecondaryPrimary

Primaryノードが死んだ場合も残ったノードで選挙を行う。下の例では得票数4/5で当選!

Primary

Page 27: MongoDBJP 納涼もんご祭り

となると、、、

Page 28: MongoDBJP 納涼もんご祭り

-28 -

replica-set

SecondarySecondary

構成ノードが死に過ぎると選挙で過半数割れが起きる。こうなるとPrimaryノード不在となる

Primary

Primary Primary

投票

Page 29: MongoDBJP 納涼もんご祭り

-29 -

replica-setPrimaryは書き込みを行うノードreplica-setは書き込み不能となる

データの更新は当然!replica-setの構成変更も不可!!

Page 30: MongoDBJP 納涼もんご祭り

致命的!!

Page 31: MongoDBJP 納涼もんご祭り

これは何?2/33/54/7

Page 32: MongoDBJP 納涼もんご祭り

デッドライン生存数 / 全数

2/33/54/7

Page 33: MongoDBJP 納涼もんご祭り

そもそも何でこんな難儀な仕組み

になってんの?

1ノードでも生きてれば良いじゃん!

Page 34: MongoDBJP 納涼もんご祭り

そうは行かない!

Page 35: MongoDBJP 納涼もんご祭り

-35 -

replica-set

Primary

Secondary SecondarySecondarySecondary

常時同期

選挙に行かないとをやらないと大変な事に!!

Page 36: MongoDBJP 納涼もんご祭り

負荷やネットワークトラブル等でノード間通信が途切れる

と・・・

Page 37: MongoDBJP 納涼もんご祭り

-37 -

replica-set

Primary

Secondary SecondarySecondarySecondary

もしネットワークが分断したら?

分断

常時同期

Page 38: MongoDBJP 納涼もんご祭り

-38 -

replica-set

Primary

Secondary SecondaryPrimarySecondary

Primary

常時同期

分断

なんとPrimaryが2つ

に!!

Page 39: MongoDBJP 納涼もんご祭り

こうなると当然左右双方に別々の更新が走り

データがズレるぜ!Primary

Secondary SecondaryPrimarySecondary

Primary

常時同期

分断

replica-set

データ更新 データ更新

Page 40: MongoDBJP 納涼もんご祭り

あ”ーデータ破壊。。

Page 41: MongoDBJP 納涼もんご祭り

これが分散システムの

Split brainデータの一貫性が

意味的に破壊されるので修復できない

Page 42: MongoDBJP 納涼もんご祭り

ちなみに、、split brainが起きる様なケースでは高負荷やトラブルが起きている。

大抵は1ノード毎バラバラになるしデータ修復どころか大量のログから現象を追う事すら困難。。。

Page 43: MongoDBJP 納涼もんご祭り

-43 -

replica-set

Primary

Primary

こんな風に・・・

Primary 分断

Primary Primary Primary

Page 44: MongoDBJP 納涼もんご祭り

今回の運用対象 http://www.mongodb.jp

Page 45: MongoDBJP 納涼もんご祭り

www.mongodb.jp

httpd

PHP

mongosmemcached

mongodsecondary

host B

mongodprimary

host C

mongodsecondary

hiddenslaveDelay

replica-set

Page 46: MongoDBJP 納涼もんご祭り

www.mongodb.jp

httpd

PHP

mongosmemcached

mongodsecondary

host B

mongodprimary

host C

mongodsecondary

hiddenslaveDelay

replica-set

・負荷的に余裕なので基本はAll in one・基本secondaryから読み、書込みは極少ない・host C はバックアップと非常時のリカバリ

www.mongodb.jpさえ無事なら大きな障害にはならない

Page 47: MongoDBJP 納涼もんご祭り

なので思い切ってヤル!!