これがcassandra

25
こここ Casandra こここここ ここここここここ

Upload: takehiro-torigaki

Post on 25-May-2015

37.488 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: これがCassandra

これが Casandraまたの名を

鬼の哭くシステム

Page 2: これがCassandra

今日話すこと• 2013年からの Cassandraとの戦いの日々と愚痴を淡々と語るだけです 過度な期待はしないでください

Page 3: これがCassandra

システム構成• Node数: 97台• サーバスペック  機器: Dell  R410、 R420  メモリ: 64GB   CPU:16コア、 24コア   HDD: 600GBx4 (RAID-10) 600GBx2(RAID-1)+SSD 512GB(RAID-0)

• クラスタ数: 1• Cassandraのバージョン: 1.1.5-2(独自バージョン )• KeySpace数: 8• ColumnFamily数: 156

Page 4: これがCassandra

運用状況とか

Cluseter Writes Request: 32000/secCluseter Reads Request : 58000/sec

1 nodeあたりのデータロードサイズ約 200~ 230GB

Page 5: これがCassandra

Cassandraの設定• レプリケーションファクタ: 3 データを配置するノード数の合計• 一貫性レベル: QUORUM レプリカのあるノードの過半数から応答があった「最新」のデータを返す

• ヒープ:8 GB 8 GBより少ないほうがよいらしいhttp://www.datastax.com/docs/1.1/operations/tuning#heap-sizing

Page 6: これがCassandra

運用でよく使うコマンド・ nodetool compact  特定の key space や column familyに対して comapctionを実行・ nodetool repair  障害復旧時等にデータの修復を実行・ nodetool cleanup   tokenレンジが変わった際に不要なデータを削除する為に実行・ nodetool removetoken  停止中のノードをクラスタから取り除く

Page 7: これがCassandra

バックアップ• nodetool snapshotで取得• 8時間毎の差分スナップショットをローカルに保存

• 1-3-7…の Nodeのスナップショットはバックアップサーバに定期コピー

Page 8: これがCassandra

ここからは主に 2013年に入ってからあったことを語ります

Page 9: これがCassandra

1月・ CPU8コアサーバを 24コアサーバに筐体交換( 6台)→ 筐体交換でデータの修復するために repair祭り→  repairかけている Nodeとその前後 Nodeのデータが肥大しまくる  ( 2~ 3倍くらいに膨れ上がる)  主に特定の1つの column familyが激増

・肥大しまくっているデータをなんとか小さくしないとやばい状態→ メジャー Compactionすれば容量が減ることが判明→ メジャー Compaction祭り

※このころの repairは 5時間くらいで終わっていた※このころはメジャー Compactionは 8時間くらいで終わっていた※肥大しても 1台あたりのロードデータは 200GBくらいだった  肥大してない場合は 100GB以下

Page 10: これがCassandra

2月2/885号機障害→  SSDがオフライン現象発生

2/1589号機障害→  SSDがオフライン現象発生→  HDDのみの筐体に変更

2/24 85号機障害→  SSD死亡→  HDDのみ筐体に変更

2/786号機障害→  SSDがオフライン現象発生→  removetokenに 3時間くらい

2/1290号機障害→  SSDが死亡→  HDDのみの筐体に変更

2/1686号機障害→  SSDがオフライン現象発生

Page 11: これがCassandra

2月• バックアップサーバ( 17TB)にスナップショット退避しまくっていたら容量が足らなくなる

→ 50TBのサーバ借りて助かる

• repairする→余計なデータ増えた状態→メジャーコンパクションすれば消えたけど、その前に近隣ノードが障害→復帰して周囲が余計なデータ持っている状態で repair→また余計なデータ増えるの繰り返しで1 Nodeのロードデータが700GB超えた。。。><(特にでかいのは特定の1つだけ。本来はロードデータ 100~ 200GB程度のはずなのに。。)とにかく特定の1つだけがでかい。。特定の1つだけの SSTableの容量が 800GB近くある。。><

Page 12: これがCassandra

2月• 86- 90レンジのノード全部のディスク容量が 90%超えに。。><1回あたりの差分スナップショットの容量が 300~ 400GBくらいに。。。><(通常は数 GBくらいなのに。。)

• 86- 90間のノードで同時並列でとにかくメジャー Compactionかけまくるメジャー Compaction祭り開催ついでに Cleanupもかけまくる※このころはこのオペやっても問題なかった。。

• 87号機の特定の1つだけのメジャー Compactionが 2日たっても終わらない現象発生。。。

(他 Nodeだとだいたい 10時間くらいかかる。。)

• 全台再起動やったらレンテンシがちょいちょい跳ねる現象発生。。。

• 実は特定の1つだけの過去データが消えてなかったことが判明。。本来であれば 1カ月以前のデータは自動で消えているはずだった。。 orzアプリ側を修正してもらって、過去データはバッチで徐々に消してもらう。。。

Page 13: これがCassandra

3月

• 1回暴れた以外は平和だった

• 毎月恒例の全台再起動はやはりレンテンシ上がる。。 orz

1-4-7...の順番で 1 順やり2-5-8...の順番で 2 順目やっていく方式1 順目は大丈夫なのに、 2 順目以降でレイテンシがはねる。。。

Page 14: これがCassandra

4月04/0189号機障害→ ボードとかのHW障害→ 筐体変更して復活

repairかけたら100GB増加する処理終わるのに7時間かかる

とにかく repairしたら容量問題にぶちあたる。。。

04/0486号機障害→ SSD死亡→ HDDのみ筐体に変更

Page 15: これがCassandra

4月04/11 89号機、 repair実行→ メモリリークで死亡

死ぬ前もモリモリ FullGCしまくりFullGC入っても6GB超のメモリが開放されていない現象発生。。。ここから FullGC祭りがはじまる。。

82号機障害(R410)→  SSD死亡

バグフィックスしたパッチあてたバージョンに差し替えはじめる(アプリ側に作ってもらった独自バージョン。世の中に出回ってない)

Page 16: これがCassandra

4月04/1689号機→ パッチあてたバージョンでも repairで死亡

04/1889号機が明らかにおかしなデータを持っている感じだったので 89号機のデータ消し去って、クラスタに組み込みなおす。repairかける(翌日障害のトリガーになる)。

Page 17: これがCassandra

4月04/19 → 88号機応答なし障害   full gcで死亡

※82号機で同じオペレーションしても障害はなかった

今度は 90号機が応答なくなったので、再起動。。 orz

87号機障害→  SSD死亡→ HDDに差し替え

88号機が最後のR420+SSDとなる。。。

Page 18: これがCassandra

4月04/20 → 1:03 88号機メモリリークで障害→ 7:57 88号機メモリリークで障害→ 11:43 88号機メモリリークで障害

全部87号機の repairがトリガー。。。

ヒープを 12GBにして回避する

→ 23:14 88号機障害(SSD死亡)→ HDDに変更

04/23→  89号機メモリリークで障害   メジャーCompactionでふっとぶ。。。

4/24 → 87号機メモリリークで障害  メジャーCompactionでふっとぶ。。。

Page 19: これがCassandra

4月原因切り分け(特定レンジの問題なのかクラスタ全体の問題なのか)のため63号機をデータ消して、クラスタに組み込みなおし、障害頻発するレンジと同じオペレーション( repairや Comapction)やってみる→ 問題はおきなかった→ メモリリークは後半レンジ特有問題と判明

あとついでに SSDからHDDに変更しておいた

全台をバージョンアップして再起動ヒープも全台戻す( 8GBより少ないほうがよいらしいので)

Page 20: これがCassandra

5月05/07 90号機メモリリークで障害  cleanupでふっとぶ。。

87号機(R420)を97号機(R410)と差し替えてみたが、メモリリーク発生OSと機種特有の問題ではないことがわかった。。

toke-1で Joinさせてから removeをやったが、 remove時間は変わらず。。orz

ノード障害への対処の推奨方法は token-1で新Nodeを Joinさせてから障害NodeをRemoveするのがよいらしいhttp://wiki.apache.org/cassandra/Operations_JP#A.2BMM4w.2FDDJlpxbszB4MG5b.2FlHm-

97号機を repair。。。(翌日障害のトリガーとなる。。。)

Page 21: これがCassandra

5月05/0888 , 89号機メモリリークで障害再起動しても復旧せずヒープを 12GBにして再起動で復旧

05/09-1083- 90の間に予備機 7台をクラスタに Joinさせてデータを分散させる

Page 22: これがCassandra

今後• バージョンアップする( 1.2 系へ)• クラスタを分割(でかい CFが負荷高いので他に逃がしたい)

• 検証(障害頻発環境を再現させてバージョンアップ等で改善するかとか。。。)

Page 23: これがCassandra

Cassandraとの付き合い方・ JIRAを読む!  https://issues.apache.org/jira/browse/CASSANDRA 自分が使っているバージョンがどんな地雷踏む可能性があるか把握しておくこと

・ソースを読む! ソースコードがマニュアルです・なんかあったら再起動! 大抵これで直ります ^^/

・とにかく祈る! 暴れないように日々祈りをささげる

Page 24: これがCassandra

最後に一言

Page 25: これがCassandra

あなたはそれでもCassandraを使いますか?