これがcassandra
TRANSCRIPT
これが Casandraまたの名を
鬼の哭くシステム
今日話すこと• 2013年からの 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
運用状況とか
Cluseter Writes Request: 32000/secCluseter Reads Request : 58000/sec
1 nodeあたりのデータロードサイズ約 200~ 230GB
Cassandraの設定• レプリケーションファクタ: 3 データを配置するノード数の合計• 一貫性レベル: QUORUM レプリカのあるノードの過半数から応答があった「最新」のデータを返す
• ヒープ:8 GB 8 GBより少ないほうがよいらしいhttp://www.datastax.com/docs/1.1/operations/tuning#heap-sizing
運用でよく使うコマンド・ nodetool compact 特定の key space や column familyに対して comapctionを実行・ nodetool repair 障害復旧時等にデータの修復を実行・ nodetool cleanup tokenレンジが変わった際に不要なデータを削除する為に実行・ nodetool removetoken 停止中のノードをクラスタから取り除く
バックアップ• nodetool snapshotで取得• 8時間毎の差分スナップショットをローカルに保存
• 1-3-7…の Nodeのスナップショットはバックアップサーバに定期コピー
ここからは主に 2013年に入ってからあったことを語ります
1月・ CPU8コアサーバを 24コアサーバに筐体交換( 6台)→ 筐体交換でデータの修復するために repair祭り→ repairかけている Nodeとその前後 Nodeのデータが肥大しまくる ( 2~ 3倍くらいに膨れ上がる) 主に特定の1つの column familyが激増
・肥大しまくっているデータをなんとか小さくしないとやばい状態→ メジャー Compactionすれば容量が減ることが判明→ メジャー Compaction祭り
※このころの repairは 5時間くらいで終わっていた※このころはメジャー Compactionは 8時間くらいで終わっていた※肥大しても 1台あたりのロードデータは 200GBくらいだった 肥大してない場合は 100GB以下
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がオフライン現象発生
2月• バックアップサーバ( 17TB)にスナップショット退避しまくっていたら容量が足らなくなる
→ 50TBのサーバ借りて助かる
• repairする→余計なデータ増えた状態→メジャーコンパクションすれば消えたけど、その前に近隣ノードが障害→復帰して周囲が余計なデータ持っている状態で repair→また余計なデータ増えるの繰り返しで1 Nodeのロードデータが700GB超えた。。。><(特にでかいのは特定の1つだけ。本来はロードデータ 100~ 200GB程度のはずなのに。。)とにかく特定の1つだけがでかい。。特定の1つだけの SSTableの容量が 800GB近くある。。><
2月• 86- 90レンジのノード全部のディスク容量が 90%超えに。。><1回あたりの差分スナップショットの容量が 300~ 400GBくらいに。。。><(通常は数 GBくらいなのに。。)
• 86- 90間のノードで同時並列でとにかくメジャー Compactionかけまくるメジャー Compaction祭り開催ついでに Cleanupもかけまくる※このころはこのオペやっても問題なかった。。
• 87号機の特定の1つだけのメジャー Compactionが 2日たっても終わらない現象発生。。。
(他 Nodeだとだいたい 10時間くらいかかる。。)
• 全台再起動やったらレンテンシがちょいちょい跳ねる現象発生。。。
• 実は特定の1つだけの過去データが消えてなかったことが判明。。本来であれば 1カ月以前のデータは自動で消えているはずだった。。 orzアプリ側を修正してもらって、過去データはバッチで徐々に消してもらう。。。
3月
• 1回暴れた以外は平和だった
• 毎月恒例の全台再起動はやはりレンテンシ上がる。。 orz
1-4-7...の順番で 1 順やり2-5-8...の順番で 2 順目やっていく方式1 順目は大丈夫なのに、 2 順目以降でレイテンシがはねる。。。
4月04/0189号機障害→ ボードとかのHW障害→ 筐体変更して復活
repairかけたら100GB増加する処理終わるのに7時間かかる
とにかく repairしたら容量問題にぶちあたる。。。
04/0486号機障害→ SSD死亡→ HDDのみ筐体に変更
4月04/11 89号機、 repair実行→ メモリリークで死亡
死ぬ前もモリモリ FullGCしまくりFullGC入っても6GB超のメモリが開放されていない現象発生。。。ここから FullGC祭りがはじまる。。
82号機障害(R410)→ SSD死亡
バグフィックスしたパッチあてたバージョンに差し替えはじめる(アプリ側に作ってもらった独自バージョン。世の中に出回ってない)
4月04/1689号機→ パッチあてたバージョンでも repairで死亡
04/1889号機が明らかにおかしなデータを持っている感じだったので 89号機のデータ消し去って、クラスタに組み込みなおす。repairかける(翌日障害のトリガーになる)。
4月04/19 → 88号機応答なし障害 full gcで死亡
※82号機で同じオペレーションしても障害はなかった
今度は 90号機が応答なくなったので、再起動。。 orz
87号機障害→ SSD死亡→ HDDに差し替え
88号機が最後のR420+SSDとなる。。。
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でふっとぶ。。。
4月原因切り分け(特定レンジの問題なのかクラスタ全体の問題なのか)のため63号機をデータ消して、クラスタに組み込みなおし、障害頻発するレンジと同じオペレーション( repairや Comapction)やってみる→ 問題はおきなかった→ メモリリークは後半レンジ特有問題と判明
あとついでに SSDからHDDに変更しておいた
全台をバージョンアップして再起動ヒープも全台戻す( 8GBより少ないほうがよいらしいので)
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。。。(翌日障害のトリガーとなる。。。)
5月05/0888 , 89号機メモリリークで障害再起動しても復旧せずヒープを 12GBにして再起動で復旧
05/09-1083- 90の間に予備機 7台をクラスタに Joinさせてデータを分散させる
今後• バージョンアップする( 1.2 系へ)• クラスタを分割(でかい CFが負荷高いので他に逃がしたい)
• 検証(障害頻発環境を再現させてバージョンアップ等で改善するかとか。。。)
Cassandraとの付き合い方・ JIRAを読む! https://issues.apache.org/jira/browse/CASSANDRA 自分が使っているバージョンがどんな地雷踏む可能性があるか把握しておくこと
・ソースを読む! ソースコードがマニュアルです・なんかあったら再起動! 大抵これで直ります ^^/
・とにかく祈る! 暴れないように日々祈りをささげる
最後に一言
あなたはそれでもCassandraを使いますか?