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さえ無事なら大きな障害にはならない
なので思い切ってヤル!!