mongo dbを半年運用してみた

74
MongoDB半年運用してみた Masakazu Matsushita @matsukaz 2011728日木曜日

Upload: masakazu-matsushita

Post on 10-May-2015

50.792 views

Category:

Technology


0 download

DESCRIPTION

MongoDBの簡単な概要と、Ameba PicoでMongoDBを半年運用した中で発生した障害など。

TRANSCRIPT

Page 1: Mongo DBを半年運用してみた

MongoDBを半年運用してみた

Masakazu Matsushita@matsukaz

2011年7月28日木曜日

Page 2: Mongo DBを半年運用してみた

自己紹介•松下 雅和 / @matsukaz

•(株)サイバーエージェント• Ameba Picoの中の人

• DevLOVE スタッフ

2011年7月28日木曜日

Page 3: Mongo DBを半年運用してみた

宣伝

2011年7月28日木曜日

Page 4: Mongo DBを半年運用してみた

Ameba Picoとは•「アメーバピグ」の海外版• 2010年3月

リリース

2011年7月28日木曜日

Page 5: Mongo DBを半年運用してみた

利用ユーザ(2011年7月時点)

•登録者数 390 万人、MAU 60 万人

• 10代、20代中心

•男女比 3:7

•インドネシア、フィリピン、米国で全体の半数以上を占める

2011年7月28日木曜日

Page 6: Mongo DBを半年運用してみた

カフェゲームもリリースされた!

どやっ!

2011年7月28日木曜日

Page 7: Mongo DBを半年運用してみた

アジェンダ

• MongoDBとは

• Ameba Picoのアーキテクチャ

• MongoDB事件簿

2011年7月28日木曜日

Page 8: Mongo DBを半年運用してみた

MongoDBとは

2011年7月28日木曜日

Page 9: Mongo DBを半年運用してみた

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日木曜日

Page 10: Mongo DBを半年運用してみた

Full Index Support•ドキュメント内のどの属性にも

Indexを作成可能

• Unique Index、複合Indexにも対応

2011年7月28日木曜日

Page 11: Mongo DBを半年運用してみた

Replication• ReplicaSetにより高可用性を実現

mongodMember 1(PRIMARY)

mongodMember 3

(SECONDARY)

mongodMember 2

(SECONDARY)

2011年7月28日木曜日

Page 12: Mongo DBを半年運用してみた

Replication• ReplicaSetにより高可用性を実現

mongodMember 1(DOWN)

mongodMember 3

(SECONDARY)

mongodMember 2(PRIMARY)

2011年7月28日木曜日

Page 13: Mongo DBを半年運用してみた

Replication• ReplicaSetにより高可用性を実現

mongodMember 1

(RECOVERING)

mongodMember 3

(SECONDARY)

mongodMember 2(PRIMARY)

2011年7月28日木曜日

Page 14: Mongo DBを半年運用してみた

Replication• ReplicaSetにより高可用性を実現

mongodMember 1

(SECONDARY)

mongodMember 3

(SECONDARY)

mongodMember 2(PRIMARY)

2011年7月28日木曜日

Page 15: Mongo DBを半年運用してみた

Auto-Sharding•指定したShard Keyで水平分割

Shard 1

users

name1 name2 name3

name4 name5 name6

name7 name8 name9

items

item1 item2 item3

2011年7月28日木曜日

Page 16: Mongo DBを半年運用してみた

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日木曜日

Page 17: Mongo DBを半年運用してみた

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日木曜日

Page 18: Mongo DBを半年運用してみた

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日木曜日

Page 19: Mongo DBを半年運用してみた

Ameba Picoのアーキテクチャ

2011年7月28日木曜日

Page 20: Mongo DBを半年運用してみた

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日木曜日

Page 21: Mongo DBを半年運用してみた

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日木曜日

Page 22: Mongo DBを半年運用してみた

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日木曜日

Page 23: Mongo DBを半年運用してみた

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日木曜日

Page 24: Mongo DBを半年運用してみた

MongoDB事件簿

2011年7月28日木曜日

Page 25: Mongo DBを半年運用してみた

2011年2月

2011年7月28日木曜日

Page 26: Mongo DBを半年運用してみた

週次メンテ明けでコネクションエラー多発

2011年7月28日木曜日

Page 27: Mongo DBを半年運用してみた

やがてデータ不整合が発生

2011年7月28日木曜日

Page 28: Mongo DBを半年運用してみた

徹夜で全てのmongodを

Repair

2011年7月28日木曜日

Page 29: Mongo DBを半年運用してみた

なんとか復旧・・・

2011年7月28日木曜日

Page 30: Mongo DBを半年運用してみた

なんてじゃじゃ馬だ・・・

2011年7月28日木曜日

Page 31: Mongo DBを半年運用してみた

2011年3月

2011年7月28日木曜日

Page 32: Mongo DBを半年運用してみた

負荷状況を考え新たにShardを追加

2011年7月28日木曜日

Page 33: Mongo DBを半年運用してみた

結果

2011年7月28日木曜日

Page 34: Mongo DBを半年運用してみた

自動マイグレーション発生

2011年7月28日木曜日

Page 35: Mongo DBを半年運用してみた

止まらない

2011年7月28日木曜日

Page 36: Mongo DBを半年運用してみた

いつまでも止まらない

2011年7月28日木曜日

Page 37: Mongo DBを半年運用してみた

ひたすら待つ

http://www.flickr.com/photos/andreasmarx/190619661/2011年7月28日木曜日

Page 38: Mongo DBを半年運用してみた

6時間かかってやっと終了

2011年7月28日木曜日

Page 39: Mongo DBを半年運用してみた

2011年5月

2011年7月28日木曜日

Page 40: Mongo DBを半年運用してみた

さらにShardを2台追加

2011年7月28日木曜日

Page 41: Mongo DBを半年運用してみた

反省を踏まえて自動マイグレーション

OFF

2011年7月28日木曜日

Page 42: Mongo DBを半年運用してみた

誤って最新バージョンのMongoDBが混在

2011年7月28日木曜日

Page 43: Mongo DBを半年運用してみた

起動しない・・・

2011年7月28日木曜日

Page 44: Mongo DBを半年運用してみた

なんとか前のバージョンにバージョンダウン

2011年7月28日木曜日

Page 45: Mongo DBを半年運用してみた

気をとりなおして

2011年7月28日木曜日

Page 46: Mongo DBを半年運用してみた

2台のShardの追加無事完了!

2011年7月28日木曜日

Page 47: Mongo DBを半年運用してみた

でも

2011年7月28日木曜日

Page 48: Mongo DBを半年運用してみた

それ以降マイグレーションは全て手動に・・・

2011年7月28日木曜日

Page 49: Mongo DBを半年運用してみた

2011年6月

2011年7月28日木曜日

Page 50: Mongo DBを半年運用してみた

前触れもなくmongosが死亡

2011年7月28日木曜日

Page 51: Mongo DBを半年運用してみた

プロセス監視と自動起動で逃げる

2011年7月28日木曜日

Page 52: Mongo DBを半年運用してみた

2011年7月

2011年7月28日木曜日

Page 53: Mongo DBを半年運用してみた

MongoDBのバージョンを

1.6.5 → 1.8.2 へ

2011年7月28日木曜日

Page 54: Mongo DBを半年運用してみた

バージョンアップ無事完了!

2011年7月28日木曜日

Page 55: Mongo DBを半年運用してみた

が、

2011年7月28日木曜日

Page 56: Mongo DBを半年運用してみた

chunkサイズが勝手に変わって延々とchunkが分割

2011年7月28日木曜日

Page 57: Mongo DBを半年運用してみた

ひたすら待つ・・・

http://www.flickr.com/photos/madhorse5/415958992/2011年7月28日木曜日

Page 58: Mongo DBを半年運用してみた

さらに、同月

2011年7月28日木曜日

Page 59: Mongo DBを半年運用してみた

初期の4つのShardも高性能サーバへ!

2011年7月28日木曜日

Page 60: Mongo DBを半年運用してみた

が、

2011年7月28日木曜日

Page 61: Mongo DBを半年運用してみた

同期のやり方に問題が・・・

2011年7月28日木曜日

Page 62: Mongo DBを半年運用してみた

結果

2011年7月28日木曜日

Page 63: Mongo DBを半年運用してみた

二度と起動しないカラダに・・・

2011年7月28日木曜日

Page 64: Mongo DBを半年運用してみた

バックアップから復旧

2011年7月28日木曜日

Page 65: Mongo DBを半年運用してみた

後日、ようやくサーバ入れ替え完了

2011年7月28日木曜日

Page 66: Mongo DBを半年運用してみた

さらにさらに、同月

2011年7月28日木曜日

Page 67: Mongo DBを半年運用してみた

同じShardの2台がEC2インスタンスごと

死亡・・・

2011年7月28日木曜日

Page 68: Mongo DBを半年運用してみた

30分後に復活したがRepairが必要な状態に

2011年7月28日木曜日

Page 69: Mongo DBを半年運用してみた

もはや何があっても驚かないぞ

2011年7月28日木曜日

Page 70: Mongo DBを半年運用してみた

と、思ったら今朝もmongodが1台死にました

2011年7月28日木曜日

Page 71: Mongo DBを半年運用してみた

やっぱり驚くわー2011年7月28日木曜日

Page 72: Mongo DBを半年運用してみた

まとめ

2011年7月28日木曜日

Page 73: Mongo DBを半年運用してみた

2011年7月28日木曜日

Page 74: Mongo DBを半年運用してみた

ご清聴ありがとうございました!

2011年7月28日木曜日