mongo dbを半年運用してみた
DESCRIPTION
MongoDBの簡単な概要と、Ameba PicoでMongoDBを半年運用した中で発生した障害など。TRANSCRIPT
MongoDBを半年運用してみた
Masakazu Matsushita@matsukaz
2011年7月28日木曜日
自己紹介•松下 雅和 / @matsukaz
•(株)サイバーエージェント• Ameba Picoの中の人
• DevLOVE スタッフ
2011年7月28日木曜日
宣伝
2011年7月28日木曜日
Ameba Picoとは•「アメーバピグ」の海外版• 2010年3月
リリース
2011年7月28日木曜日
利用ユーザ(2011年7月時点)
•登録者数 390 万人、MAU 60 万人
• 10代、20代中心
•男女比 3:7
•インドネシア、フィリピン、米国で全体の半数以上を占める
2011年7月28日木曜日
カフェゲームもリリースされた!
どやっ!
2011年7月28日木曜日
アジェンダ
• MongoDBとは
• Ameba Picoのアーキテクチャ
• MongoDB事件簿
2011年7月28日木曜日
MongoDBとは
2011年7月28日木曜日
Document-oriented storage
> db.users.save( { name : "hoge", age : 20 } )> db.users.save( { name : "fuga" } )
> db.users.find(){ "_id" : ObjectId("4d6b7ef5934c0000000053a4"), "name" : "hoge", "age" : 20 }{ "_id" : ObjectId("4d6b7f06934c0000000053a5"), "name" : "fuga" }
•スキーマレス• BSON形式 (Binary JSON)
2011年7月28日木曜日
Full Index Support•ドキュメント内のどの属性にも
Indexを作成可能
• Unique Index、複合Indexにも対応
2011年7月28日木曜日
Replication• ReplicaSetにより高可用性を実現
mongodMember 1(PRIMARY)
mongodMember 3
(SECONDARY)
mongodMember 2
(SECONDARY)
2011年7月28日木曜日
Replication• ReplicaSetにより高可用性を実現
mongodMember 1(DOWN)
mongodMember 3
(SECONDARY)
mongodMember 2(PRIMARY)
2011年7月28日木曜日
Replication• ReplicaSetにより高可用性を実現
mongodMember 1
(RECOVERING)
mongodMember 3
(SECONDARY)
mongodMember 2(PRIMARY)
2011年7月28日木曜日
Replication• ReplicaSetにより高可用性を実現
mongodMember 1
(SECONDARY)
mongodMember 3
(SECONDARY)
mongodMember 2(PRIMARY)
2011年7月28日木曜日
Auto-Sharding•指定したShard Keyで水平分割
Shard 1
users
name1 name2 name3
name4 name5 name6
name7 name8 name9
items
item1 item2 item3
2011年7月28日木曜日
Auto-Sharding•指定したShard Keyで水平分割
Shard 1
users
name1 name2 name3
name4 name5 name6
name7 name8 name9
items
item1 item2 item3
Shard 2
2011年7月28日木曜日
Auto-Sharding•指定したShard Keyで水平分割
Shard 1
users
name1 name2 name3
name4 name5 name6
name7 name8 name9
items
item1 item2 item3
Shard 2
users
name7 name8 name9
・データ量の偏りを見て自動マイグレーション・マイグレーションはChunk
(Shard Keyの特定Range)単位2011年7月28日木曜日
Auto-Sharding•指定したShard Keyで水平分割
Shard 1
users
name1 name2 name3
name4 name5 name6
items
item1 item2 item3
Shard 2
users
name7 name8 name9
mongos mongocclientclient
mongosを介すことで、クラスタ構成は意識しない
Shard情報2011年7月28日木曜日
Ameba Picoのアーキテクチャ
2011年7月28日木曜日
EC2
2011年1月
Webサーバ Socketサーバ
Shard 1
mongod mongod mongod
Shard 2
mongod mongod mongod
Shard 3
mongod mongod mongod
mongos mongoc
mongoc
mongoc
ID/Point/認証
キャッシュ(memcached)
MySQL
m2.2xlarge (Mem 34.2GB / 13 EC2CU)
m1.large (Mem 7.5GB / 4 EC2CU)
m1.small (Mem 1.7GB / 1 EC2CU)
c1.xlarge (Mem 7GB / 20 EC2CU)
c1.medium (Mem 1.7GB / 5 EC2CU)S3 CloudFront Elastic MapReduce
管理サーババッチ
mongos
LB(HAProxy)
mongos
EBS
2011年7月28日木曜日
2011年3月 Shard 1
mongod mongod mongod
Shard 2
mongod mongod mongod
Shard 3
mongod mongod mongod
mongos
mongoc
mongoc
mongocmongos
mongos
Shard 4
mongod mongod mongod
mongos
S3 CloudFront Elastic MapReduceEBS
EC2
Webサーバ Socketサーバ
ID/Point/認証
キャッシュ(memcached)
MySQL
m2.2xlarge (Mem 34.2GB / 13 EC2CU)
m1.large (Mem 7.5GB / 4 EC2CU)
m1.small (Mem 1.7GB / 1 EC2CU)
c1.xlarge (Mem 7GB / 20 EC2CU)
c1.medium (Mem 1.7GB / 5 EC2CU)
管理サーババッチ
LB(HAProxy)
2011年7月28日木曜日
2011年5月 Shard 1
mongod mongod mongod
Shard 2
mongod mongod mongod
Shard 3
mongod mongod mongod
mongos
mongoc
mongoc
mongocmongos
mongos
Shard 4
mongod mongod mongod
Shard 6
Shard 5
mongod mongod mongod
mongod mongod mongod
mongos
S3 CloudFront Elastic MapReduceEBS
EC2
Webサーバ Socketサーバ
ID/Point/認証
キャッシュ(memcached)
MySQL
m2.2xlarge (Mem 34.2GB / 13 EC2CU)
m1.large (Mem 7.5GB / 4 EC2CU)
m1.small (Mem 1.7GB / 1 EC2CU)
c1.xlarge (Mem 7GB / 20 EC2CU)
c1.medium (Mem 1.7GB / 5 EC2CU)
管理サーババッチ
LB(HAProxy)
2011年7月28日木曜日
Shard 6
2011年7月 Shard 1
mongod mongod mongod
Shard 2
mongod mongod mongod
Shard 3
mongod mongod mongod
Shard 4
mongod mongod mongod
Shard 5
mongod mongod mongod
mongod mongod mongod
mongoc
mongoc
mongoc
S3 CloudFront Elastic MapReduceEBS
EC2
Webサーバ Socketサーバ
ID/Point/認証
キャッシュ(memcached)
MySQL
m2.2xlarge (Mem 34.2GB / 13 EC2CU)
m1.large (Mem 7.5GB / 4 EC2CU)
m1.small (Mem 1.7GB / 1 EC2CU)
c1.xlarge (Mem 7GB / 20 EC2CU)
c1.medium (Mem 1.7GB / 5 EC2CU)
管理サーババッチ
LB(HAProxy)
mongosmongos
mongos
2011年7月28日木曜日
MongoDB事件簿
2011年7月28日木曜日
2011年2月
2011年7月28日木曜日
週次メンテ明けでコネクションエラー多発
2011年7月28日木曜日
やがてデータ不整合が発生
2011年7月28日木曜日
徹夜で全てのmongodを
Repair
2011年7月28日木曜日
なんとか復旧・・・
2011年7月28日木曜日
なんてじゃじゃ馬だ・・・
2011年7月28日木曜日
2011年3月
2011年7月28日木曜日
負荷状況を考え新たにShardを追加
2011年7月28日木曜日
結果
2011年7月28日木曜日
自動マイグレーション発生
2011年7月28日木曜日
止まらない
2011年7月28日木曜日
いつまでも止まらない
2011年7月28日木曜日
ひたすら待つ
http://www.flickr.com/photos/andreasmarx/190619661/2011年7月28日木曜日
6時間かかってやっと終了
2011年7月28日木曜日
2011年5月
2011年7月28日木曜日
さらにShardを2台追加
2011年7月28日木曜日
反省を踏まえて自動マイグレーション
OFF
2011年7月28日木曜日
誤って最新バージョンのMongoDBが混在
2011年7月28日木曜日
起動しない・・・
2011年7月28日木曜日
なんとか前のバージョンにバージョンダウン
2011年7月28日木曜日
気をとりなおして
2011年7月28日木曜日
2台のShardの追加無事完了!
2011年7月28日木曜日
でも
2011年7月28日木曜日
それ以降マイグレーションは全て手動に・・・
2011年7月28日木曜日
2011年6月
2011年7月28日木曜日
前触れもなくmongosが死亡
2011年7月28日木曜日
プロセス監視と自動起動で逃げる
2011年7月28日木曜日
2011年7月
2011年7月28日木曜日
MongoDBのバージョンを
1.6.5 → 1.8.2 へ
2011年7月28日木曜日
バージョンアップ無事完了!
2011年7月28日木曜日
が、
2011年7月28日木曜日
chunkサイズが勝手に変わって延々とchunkが分割
2011年7月28日木曜日
ひたすら待つ・・・
http://www.flickr.com/photos/madhorse5/415958992/2011年7月28日木曜日
さらに、同月
2011年7月28日木曜日
初期の4つのShardも高性能サーバへ!
2011年7月28日木曜日
が、
2011年7月28日木曜日
同期のやり方に問題が・・・
2011年7月28日木曜日
結果
2011年7月28日木曜日
二度と起動しないカラダに・・・
2011年7月28日木曜日
バックアップから復旧
2011年7月28日木曜日
後日、ようやくサーバ入れ替え完了
2011年7月28日木曜日
さらにさらに、同月
2011年7月28日木曜日
同じShardの2台がEC2インスタンスごと
死亡・・・
2011年7月28日木曜日
30分後に復活したがRepairが必要な状態に
2011年7月28日木曜日
もはや何があっても驚かないぞ
2011年7月28日木曜日
と、思ったら今朝もmongodが1台死にました
2011年7月28日木曜日
やっぱり驚くわー2011年7月28日木曜日
まとめ
2011年7月28日木曜日
2011年7月28日木曜日
ご清聴ありがとうございました!
2011年7月28日木曜日