cassandra 100 node cluster admin operation

112
Cassandra summit JPN 2014 100 node cluster admin operation

description

Cassandra summit JPN 2014 : 100 node cluster admin operation

Transcript of cassandra 100 node cluster admin operation

Page 1: cassandra 100 node cluster admin operation

Cassandra summit JPN 2014

100 node cluster admin operation

Page 2: cassandra 100 node cluster admin operation

自己紹介

id:oranie

@oranie

株式会社 Cyberagent 所属

Page 3: cassandra 100 node cluster admin operation

ざっくり流れ

・運用しているシステムについて

・普段どういう事をやっているか

・今までのバッドノウハウ的な奴

・ここが困るよCassandra

・運用観点からのクラスタ設計

Page 4: cassandra 100 node cluster admin operation

このsessionは

for administrator

的な感じです。

開発者向けの情報は少ないかも。

Page 5: cassandra 100 node cluster admin operation

基本的に内容はVer1.1をベースにしています。

その為、1.2, 2.0系では既に改善している問題やデフォルトだと既に使わないワークフロー等

(vnode使った時とか)も含まれていると思います。

Page 6: cassandra 100 node cluster admin operation

運用しているシステムについて

Page 7: cassandra 100 node cluster admin operation

サイバーエージェント スマートフォンプラットフォーム

s.amebame.com

Page 8: cassandra 100 node cluster admin operation

なぜ今のサービスでCassandraを使ったのかというと、入社したらあった。、今のシステムでは

サービス規模からデータ量、負荷などを考えるとCassandraを採

用した経緯が。

Page 9: cassandra 100 node cluster admin operation

SPOFの無いマルチマスタ

ノード追加でスケールする

処理能力とデータ保持量

スキーマレスで柔軟な

データ操作

Page 10: cassandra 100 node cluster admin operation

System Scale

Daily Peak Cluster Request

Read : about 45,000 qps

Write : about 40,000 qps

Total Data: about 35TB + snapshot

1 node avg: 350GB ※RF:3

Page 11: cassandra 100 node cluster admin operation

Latency

Read / avg 4ms.

Write / avg 0.1~0.7ms

Page 12: cassandra 100 node cluster admin operation

Cluster HW spec

CPU : 16 ~ 24 core (HT enable)

Memory : 64GB

Disk : SAS 600GB RAID 10 ※一部テスト的にSATAだったりSSD入れてみたりのレンジがあり

Page 13: cassandra 100 node cluster admin operation

当初10台(Ver 1.1.1 ?)からスタートし

-> 15(ver.1.1.3) -> 30 -> 45(Ver1.1.5) -> 60-> 90(Ver 1.1.5-2) -> 100

これはノード追加しないと耐え切れなかったというよりは、低レイテンシを維持したかった+データ量に

対応のため。

但し今考えるとこの増やし方はあまり賢いやり方ではなかった。理由は後ほど・・・。

Page 14: cassandra 100 node cluster admin operation

Daily Operation

Page 15: cassandra 100 node cluster admin operation

おおまかなまとめ

サイバーエージェント 公式エンジニアブログ

http://ameblo.jp/principia-ca/entry-11514557323.html

Page 16: cassandra 100 node cluster admin operation

Build

構築

Page 17: cassandra 100 node cluster admin operation

Chef + fabric + Jenkins

Page 18: cassandra 100 node cluster admin operation

構築の手作業はcassandra.yamlの

token設定のみ

Page 19: cassandra 100 node cluster admin operation

Monitoring

監視

Page 20: cassandra 100 node cluster admin operation

死活・閾値監視

Page 21: cassandra 100 node cluster admin operation

Nagios + Jenkins + Perl Script

to mail & Push notification

Page 22: cassandra 100 node cluster admin operation

死活監視系概要

Page 23: cassandra 100 node cluster admin operation

閾値監視系概要

Page 24: cassandra 100 node cluster admin operation

トレンド監視

Page 25: cassandra 100 node cluster admin operation
Page 26: cassandra 100 node cluster admin operation
Page 27: cassandra 100 node cluster admin operation

OS monitor

・Cacti :

OS, JVM Resource graph

・Proteus-monitor : Real Time OS monitor

(cyberagent engineer OSS product)

https://github.com/ameba-proteus/proteus-monitor-agent

Page 28: cassandra 100 node cluster admin operation

Proteus-monitor : Real Time OS

Page 29: cassandra 100 node cluster admin operation
Page 30: cassandra 100 node cluster admin operation

Cassandra monitor

・Cassandra Resource graph

GrowthForecast(LINE Engineer OSS product) +

yohoushi (DeNA Engineer OSS product)

・opscenter :Datastax Cassandra cluster status monitor

・Pending Checker :

Real Time Cassandra pending monitor

(cyberagent engeneer OSS prodct)

Page 31: cassandra 100 node cluster admin operation

Opscenter

Page 32: cassandra 100 node cluster admin operation

GrowthForecast + yohoushi

Page 33: cassandra 100 node cluster admin operation

Pending Checker

「WebSocketで監視もリアルタイムに」 http://ameblo.jp/principia-ca/entry-11513826700.html

Page 34: cassandra 100 node cluster admin operation

Pending Checker

Page 35: cassandra 100 node cluster admin operation

Cassandra operation

nodetool cmd!!

Page 36: cassandra 100 node cluster admin operation

major nodetool cmd

(ver 1.1)

Page 37: cassandra 100 node cluster admin operation

show status cmd ring : cluster状況確認。多分人生で一番打つnodetool コマンド。但し1.2系からはstatus cmdが追加されているので、どちらかというとそっちになりそう。

info : node単体の状況確認

cfstats : column family毎の統計情報

tpstats : 各stage毎の統計情報。スローダウンしているとかはまずこれ見る。

Page 38: cassandra 100 node cluster admin operation

show status cmd compactionstats : compaction等のSSTableに対する処理状況を見る。これ見ている時は凄いやきもきする。

gossipinfo : gossipの状況

netstats : repairなど他のノードとデータをやりとりするstream系処理の状況。repair掛けている時はドキドキしながら見る。

Page 39: cassandra 100 node cluster admin operation

cluster operation cmd drain : 書き込みを停止させてプロセスを停止させる

decommission : nodeが正常な状態でクラスタから削除する

move : 対象nodeのtokenを変更する

removetoken : 対象nodeのtokenをクラスタから削除する

Page 40: cassandra 100 node cluster admin operation

data operation cmd flush : memtableをflushする

repair : 自身が持つべきデータを他のノードと情報を交換して修復する

cleanup : 重複データ等を削除する(論理削除のみ)

compact : SSTableをmajor compactionする。(基本やらない方が良い)

scrub : SSTableファイルが破壊された場合に修復を試みる(らしい)

upgradesstables : CassandraのVerアップでSSTableの仕様が変更されている場合に使用する。手順などは該当Ver -> Update verの手順を確認。

Page 41: cassandra 100 node cluster admin operation

node problem operation

障害時などのオペレーション

Page 42: cassandra 100 node cluster admin operation

node down

大半は

/etc/init.d/cassandra restart

で解決 (いや、ログとか色々確認しますよ、ちゃんと)

Page 43: cassandra 100 node cluster admin operation

slow down

再起動で(ry

(いや、ログとかcfstatsとか色々確認しますよ、ちゃんと)

Page 44: cassandra 100 node cluster admin operation

HW障害時

この場合はnodeの入れ替えが必要。基本的な流れは

datastax @yukimさんの https://gist.github.com/yukim/5086476

をベースにオペレーションする。

Page 45: cassandra 100 node cluster admin operation

イメージ

Page 46: cassandra 100 node cluster admin operation

データの肥大化

適切なnode追加

クラスタ分割

が必要。

クラスタ分割は今後予定。

Page 47: cassandra 100 node cluster admin operation

バックアップ

nodetool snapshot で生成されたハードリンクを一定期間ノード上で保持+外部ストレージに

バックアップ

Page 48: cassandra 100 node cluster admin operation

今までのバッドノウハウ的な奴

Page 49: cassandra 100 node cluster admin operation

node down対応の為、repairを掛けるとデータが肥大化してし

まった・・・。

Page 50: cassandra 100 node cluster admin operation

repair時に各node間でmarkle hash tree交換を実行してそこから各node間でデータのstreamを実行するが、本来は持っているデータでもmarkle hash tree交換の処理で持っていないと判断され新たに取得・送信している。

Page 51: cassandra 100 node cluster admin operation

repairイメージ

Page 52: cassandra 100 node cluster admin operation

対応策

まずrepairが完了したら、肥大化したCFに対してcleanupを実行し、不要重複データの論理削除を掛ける。この後compactionが発生したら削除される

…..が、大きなSSTableだとそうそうcompactionが掛からない。

Page 53: cassandra 100 node cluster admin operation

でどうするか

nodetool compact

を実行してmajor compactionを

明示的に実行させる

Page 54: cassandra 100 node cluster admin operation

但し

この手法は麻薬と呼ばれるようなオペレーション

Page 55: cassandra 100 node cluster admin operation

なぜ?

major compactionを実行するとそのSSTableは巨大にSSTable

になり、余計に自動的にcompactionが掛かりにくくなるため、また手動でcompactionをす

る必要が・・・

Page 56: cassandra 100 node cluster admin operation

いわゆる

_人人人人人人人人_> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄

Page 57: cassandra 100 node cluster admin operation

他には

謎のJVM Full GC

Page 58: cassandra 100 node cluster admin operation

よくよく調べると

ある特定のCFに対するcompaction等がトリガーくさい

Page 59: cassandra 100 node cluster admin operation

ログを見ると

INFO [ValidationExecutor:26] 2012-11-09 09:53:14,804

CompactionController.java (line 172) Compacting large row hoge /fuga :313938353330333037 (87368050

bytes) incrementally

※ログ出ている中では少ない方です

Page 60: cassandra 100 node cluster admin operation

要は

一つのrowでヘタするとGBサイズの物があるCFだった

Page 61: cassandra 100 node cluster admin operation

その為

推測ですが、compactionやdeleteなどをする際にこのデータを一度

memtableに展開し処理が終わるまでは開放されない

+通常処理も入る

memtableは 大サイズがheapの1/3で更にこれをCF単位で取り合う

Page 62: cassandra 100 node cluster admin operation

いわゆる

_人人人人人人人人_> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄

Page 63: cassandra 100 node cluster admin operation

対応策

肥大化したrowを作らない以外方法は無いのでschema設計超重要です。

また、一つのrowに大量のcolumnを作成しデータを入れる様な設計にすると、row単位でノード毎に分散されるので負荷が偏ります。で、この偏りはノードをいくら追加しても偏りが移動

するだけなので解消出来ないです。

Page 64: cassandra 100 node cluster admin operation

対応策

この時はもうしょうがないので、推奨されていないですがJVMの

heap sizeを8GB -> 12GBとかに変更してしのぎました。

Page 65: cassandra 100 node cluster admin operation

他には

1.2系や2.0系verではあるかどうかわからないですが、今使っているVerでは連続稼働に伴いレ

イテンシが悪化する性能リーク的な挙動がある。

Page 66: cassandra 100 node cluster admin operation

対応策

再起動のみ

Page 67: cassandra 100 node cluster admin operation

その為

Consistency level QUORUM

Replica Factor 3

simple strategy

(1.1系なのでvnode無し)

を考慮した上でアプリケーション側に影響が少ない全台再起動ジョブを作成し、定期

実行しています。

Page 68: cassandra 100 node cluster admin operation

HWの安定性の重要さについて

Page 69: cassandra 100 node cluster admin operation

もしかして見たことがある人が?

Page 70: cassandra 100 node cluster admin operation

一部のレンジで検証+色々な事があり納期の問題でそれまで利用してたSAS Diskでは無くSSDを利用

しました。

ただ、これがRAIDカードとの相性が悪かったらしく地雷でした。

Page 71: cassandra 100 node cluster admin operation

何が起きるか

SSD障害によりノードダウン -> 追加サーバでrepair -> データ肥大化 -> cleanup -> compaction -> 周辺ノードがrepairによるデータ書

き込みトリガーでSSD死亡…

以下ループ

Page 72: cassandra 100 node cluster admin operation

またも

_人人人人人人人人_> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄

Page 73: cassandra 100 node cluster admin operation

Cassandra云々というより

納期が無いからといって十分な検証が取れていないHWを投入

してはいけない

Page 74: cassandra 100 node cluster admin operation

ここが困るよCassandra

Page 75: cassandra 100 node cluster admin operation

障害時のオペレーションでも触れましたが、repairが結構重い +

データの肥大化が発生する。

Page 76: cassandra 100 node cluster admin operation

その為

node障害から完全にクラスタ復旧するまでにnodeが持つデータ

量に比例して時間が掛かる。

Page 77: cassandra 100 node cluster admin operation

実測値レベルですが

1 node data -> 300~400GB

join / remove -> about 4 ~6 h

repair -> about 24 h ※但しexpire的に不要なCFは見送ったりしている。

compaction -> ?

Page 78: cassandra 100 node cluster admin operation

近実行したログより

INFO [CompactionExecutor:1709] 2014-01-03 00:33:56,625

CompactionTask.java (line 221) Compacted to [/var/lib/cassandra/data/ hoge /fuga /

hoge-fuga-he-16636-Data.db,]. 352,943,576,048 to 70,536,103,035 (~19% of

original) bytes for 139,068 keys at 0.157685MB/s. Time: 426,599,477ms.

Page 79: cassandra 100 node cluster admin operation

426,600sec = 7110 minute = 118.5 hour = about 5 days

(;゚Д゚)

Page 80: cassandra 100 node cluster admin operation

これはcompactionがCF単位で並列化されており、CF内の複数

SSTableについては並列に実行されないため、巨大なSSTableを持つCFでmajor compactionが実行されると恐ろしい時間が掛かります。

※iowait等は発生していませんでした。

Page 81: cassandra 100 node cluster admin operation

但し

multithreaded_compaction

を有効にするとまだ不安定な機能だったらしくLA高騰など挙動

が悪化しました

Page 82: cassandra 100 node cluster admin operation

なので

この辺のオペレーションは可能な限りCF単位で分割実行出来るようにjob組んで、少しでもコン

トロールしています

Page 83: cassandra 100 node cluster admin operation

他に

よくあるMySQLとの比較で言うと

slow query logが無い

Page 84: cassandra 100 node cluster admin operation

一応

query traceが1.2系から実装されている様ですが、もちろん重いのであくまでもサンプリング的に出力するのが推奨の様です。

Page 85: cassandra 100 node cluster admin operation

そのため

ある閾値を超えたクエリだけを集めてパフォーマンス調査したいとかは

今のところ厳しそう。

なので、アプリケーション側でslow logを実装しておいた方が確実で

しょう。

Page 86: cassandra 100 node cluster admin operation

他に

nodetool コマンドの出力結果フォーマットが1.1系と1.2系で微

妙に変えられた。

nodetool ringとか。

Page 87: cassandra 100 node cluster admin operation

他に

mbeanの格納場所も微妙に変わったりしている。

Page 88: cassandra 100 node cluster admin operation

そのため

nodetool やjolokia経由で値を取得しているジョブが微妙に動

かなくなる! (まあ、nodetoolの方は

お前のパースの仕方が悪いという説もありますが)

Page 89: cassandra 100 node cluster admin operation

あと

nodetool cfstatsとかはjsonで初めから出力するオプションとか欲

しい。

今は自分でperlスクリプトで実行結果をパースしてゴニョゴニョし

ている

Page 90: cassandra 100 node cluster admin operation

他に

mysqldumpの様に一発でそのデータストアのデータをdumpする機能に相当するものは無い。

Page 91: cassandra 100 node cluster admin operation

回避方法として

snapshot(SSTableファイル)をbulkloadする為の

sstableloaderというツールがあるがまだ未検証

(どれくらい時間掛かるかが結構怖い)

Page 92: cassandra 100 node cluster admin operation

どちらかというと

snapshotをコピーしてもcassandra.yamlのcluster nameが変更されていたら起動出来ないという仕様を改善して欲しい

(チラッ

Page 93: cassandra 100 node cluster admin operation

以上の事から

凄まじく偏見に満ちた主観的なクラスタ設計

Page 94: cassandra 100 node cluster admin operation

1 cluster

1 cluster node -> about 50 node ?

これ以上のノード数になるとrepairの実行時間の所でも触れましたが、基本的な

ジョブ等でも時間が結構掛かる

Page 95: cassandra 100 node cluster admin operation

また

nodeの追加も一気に50台追加とかは出来ない為、1台ずつ追加するオペレーションが必要になる。全て完了するのに何時間掛かるかは・・・?

Page 96: cassandra 100 node cluster admin operation

そして

じゃあ、50台に10台だけ追加、とかをやろうとするとtokenレンジを平準化する為にmoveが必要だった為、その処理時間は

repairなどと同じだけ掛かってしまう。

Page 97: cassandra 100 node cluster admin operation

あと

バックアップの事を考えるとRF3の場合

・ 低限のデータ保全:1/3

・QUORUMの事を考えると2/3

・repair無しを考えると3/3

が必要になる為、ストレージの容量も。

Page 98: cassandra 100 node cluster admin operation

1 node

Total data -> Limit 100~200GB?

後々のクラスタ分割や

repair + snapshot + compaction等の

運用オペレーションを考慮 snapshotの保存期間とかにもよりますが。1.2系や2.0系でrepair

の肥大化が抑えられるのであれば300GBくらいはアリかも。

Page 99: cassandra 100 node cluster admin operation

各環境にもよりますが

AWSの場合EBSの 大ボリュームが1TBなので、

「まあ後でEBSを拡張すれば

なんとかなるっしょ(^ω^)」

と思っていると泣きながらクラスタ分割や、なんとか消し込み作業を行いmajor compactionをせざるを得ない可

能性があります。

(EBSをストライピングするという手も多分ありますが)

※僕はAWS使っていないのでEBSストライピングは妄想です。

Page 100: cassandra 100 node cluster admin operation

CF

1 CFで1 node 200GBとか超えると後々のコントロールが大変になるので、

50 node で1node 1CF 50GB程度になるようであれば早めにクラスタ分割や論

理分割を検討?

※分割する際の移行先クラスタへのデータ移行やCF自体の分割に伴うApp改修など

Page 101: cassandra 100 node cluster admin operation

row

絶対にwide rowはNG

Cassandraも運用者も死ぬ

なので、 大でも数十MBとかにするような設計・コントロールを。

繰り返しになりますが、大きなrowを持ち、そこにアクセスが集中するとノード

追加して分散しても回避出来ない。

Page 102: cassandra 100 node cluster admin operation

一般的なWebサービスで使うなら

やはりアーカイブ系やヒストリー系などデータ量が爆発しやすい所が

一番向いているか?

一時的なイベント系などスキーマレスが有効に利用できる所も良いか

も。

Page 103: cassandra 100 node cluster admin operation

今後やっていきたい事

Page 104: cassandra 100 node cluster admin operation

2.0系、2.1系への移行

network topology strategy

の導入

Page 105: cassandra 100 node cluster admin operation

監視系の統合

(かなりツール分散しまくっているので)

Netflix先生が出している各種toolの検証

https://github.com/Netflix/Priam

Page 106: cassandra 100 node cluster admin operation

まあ、色々と書きましたが

Page 107: cassandra 100 node cluster admin operation

Cassandraは今まで問題もあったがそれと同じくらいメリットもあるので、今後

も使い続けるだろう

社内でも新しいサービスでCassandraを利用する所も続々出ている。

ver的には2.0系のサービス利用も出ている。

Page 108: cassandra 100 node cluster admin operation

2.0系からはCQLが強化され、SQLライクな操作や、

データ操作もCASやLightweight transactions

など強化されている。

Page 109: cassandra 100 node cluster admin operation

個人的には

なんでもかんでもRDBMSからCassandraに置き換えれば良い

訳では無い

あくまでもCassandraが有効に使えるかどうかを見極めて導入する

事が必要

Page 110: cassandra 100 node cluster admin operation

運用することも考えてね!

Page 111: cassandra 100 node cluster admin operation

何か質問があればどうぞ!

Page 112: cassandra 100 node cluster admin operation

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