mongodbjp 納涼もんご祭り

Post on 21-Jun-2015

527 Views

Category:

Documents

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MongoDBJP2013納涼祭

About me

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

}

MongoDB ?

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

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

最適!!

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

今日のお題は・・・

嘘・・・

じゃないよ~!

選挙だ!

わかっちゃった人は

ニヤリw

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

過半数とは

全体の半分よりも多い数

ニヤリ?

MongoDBreplica-set

-22 -

replica-set

Primary

Secondary SecondarySecondarySecondary

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

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

同期

-23 -

replica-set

Secondary SecondarySecondarySecondary

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

Secondary投票

-24 -

replica-set

Secondary SecondarySecondarySecondary

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

Secondary Primary昇格

-25 -

replica-set

Secondary SecondarySecondarySecondary

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

Primary投票

-26 -

replica-set

Secondary SecondarySecondaryPrimary

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

Primary

となると、、、

-28 -

replica-set

SecondarySecondary

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

Primary

Primary Primary

投票

-29 -

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

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

致命的!!

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

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

2/33/54/7

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

になってんの?

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

そうは行かない!

-35 -

replica-set

Primary

Secondary SecondarySecondarySecondary

常時同期

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

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

と・・・

-37 -

replica-set

Primary

Secondary SecondarySecondarySecondary

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

分断

常時同期

-38 -

replica-set

Primary

Secondary SecondaryPrimarySecondary

Primary

常時同期

分断

なんとPrimaryが2つ

に!!

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

データがズレるぜ!Primary

Secondary SecondaryPrimarySecondary

Primary

常時同期

分断

replica-set

データ更新 データ更新

あ”ーデータ破壊。。

これが分散システムの

Split brainデータの一貫性が

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

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

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

-43 -

replica-set

Primary

Primary

こんな風に・・・

Primary 分断

Primary Primary Primary

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

www.mongodb.jp

httpd

PHP

mongosmemcached

mongodsecondary

host B

mongodprimary

host C

mongodsecondary

hiddenslaveDelay

replica-set

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さえ無事なら大きな障害にはならない

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

top related