mongo dbを半年運用してみた

Post on 10-May-2015

50.792 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

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

top related