SlideShare a Scribd company logo
Cassandra summit JPN
2014
100 node cluster
admin operation
自己紹介
id:oranie
@oranie
株式会社 Cyberagent 所属
ざっくり流れ
・運用しているシステムについて
・普段どういう事をやっているか
・今までのバッドノウハウ的な奴
・ここが困るよCassandra
・運用観点からのクラスタ設計
このsessionは
for administrator
的な感じです。
開発者向けの情報は少ないかも。
基本的に内容はVer1.1をベースにし
ています。
その為、1.2, 2.0系では既に改善して
いる問題やデフォルトだと既に使わな
いワークフロー等
(vnode使った時とか)も含まれていると
思います。
運用しているシステムについて
サイバーエージェント スマートフォンプラットフォーム
s.amebame.com
なぜ今のサービスでCassandra
を使ったのかというと、入社した
らあった。、今のシステムでは
サービス規模からデータ量、負
荷などを考えるとCassandraを採
用した経緯が。
SPOFの無いマルチマスタ
ノード追加でスケールする
処理能力とデータ保持量
スキーマレスで柔軟な
データ操作
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
Latency
Read / avg 4ms.
Write / avg 0.1~0.7ms
Cluster HW spec
CPU : 16 ~ 24 core (HT enable)
Memory : 64GB
Disk : SAS 600GB RAID 10
※一部テスト的にSATAだったりSSD入れて
みたりのレンジがあり
当初10台(Ver 1.1.1 ?)からスタートし
-> 15(ver.1.1.3) -> 30 -> 45(Ver1.1.5) -> 60->
90(Ver 1.1.5-2) -> 100
これはノード追加しないと耐え切れなかったというよ
りは、低レイテンシを維持したかった+データ量に
対応のため。
但し今考えるとこの増やし方はあまり賢いやり方で
はなかった。理由は後ほど・・・。
Daily Operation
おおまかなまとめ

サイバーエージェント 公式エンジニアブログ
http://ameblo.jp/principia-ca/entry-11514557323.html
Build
構築
Chef + fabric + Jenkins
構築の手作業は
cassandra.yamlの
token設定のみ
Monitoring
監視
死活・閾値監視
Nagios + Jenkins + Perl Script
to mail & Push notification
死活監視系概要
閾値監視系概要
トレンド監視
cassandra 100 node cluster admin operation
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
Proteus-monitor : Real Time OS
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)
Opscenter
GrowthForecast + yohoushi
Pending Checker

「WebSocketで監視もリアルタイムに」
http://ameblo.jp/principia-ca/entry-11513826700.html
Pending Checker
Cassandra operation
nodetool cmd!!
major nodetool cmd
(ver 1.1)
show status cmd
ring : cluster状況確認。多分人生で一番打
つnodetool コマンド。但し1.2系からはstatus
cmdが追加されているので、どちらかというと
そっちになりそう。
info : node単体の状況確認
cfstats : column family毎の統計情報
tpstats : 各stage毎の統計情報。スローダウ
ンしているとかはまずこれ見る。
show status cmd
compactionstats : compaction等の
SSTableに対する処理状況を見る。これ
見ている時は凄いやきもきする。
gossipinfo : gossipの状況
netstats : repairなど他のノードとデータ
をやりとりするstream系処理の状況。
repair掛けている時はドキドキしながら
見る。
cluster operation cmd
drain : 書き込みを停止させてプロセ
スを停止させる
decommission : nodeが正常な状態
でクラスタから削除する
move : 対象nodeのtokenを変更する
removetoken : 対象nodeのtokenをク
ラスタから削除する
data operation cmd
flush : memtableをflushする
repair : 自身が持つべきデータを他のノードと情報を交換し
て修復する
cleanup : 重複データ等を削除する(論理削除のみ)
compact : SSTableをmajor compactionする。(基本やらな
い方が良い)
scrub : SSTableファイルが破壊された場合に修復を試みる
(らしい)
upgradesstables : CassandraのVerアップでSSTableの仕様
が変更されている場合に使用する。手順などは該当Ver ->
Update verの手順を確認。
node problem operation
障害時などのオペレーション
node down
大半は
/etc/init.d/cassandra restart
で解決
(いや、ログとか色々確認しますよ、ちゃんと)
slow down
再起動で(ry
(いや、ログとかcfstatsとか色々確認しますよ、ちゃんと)
HW障害時
この場合はnodeの入れ替えが必
要。基本的な流れは
datastax @yukimさんの
https://gist.github.com/yukim/5086476

をベースにオペレーションする。
イメージ
データの肥大化
適切なnode追加
クラスタ分割
が必要。
クラスタ分割は今後予定。
バックアップ
nodetool snapshot で生成され
たハードリンクを一定期間ノード
上で保持+外部ストレージに
バックアップ
今までのバッドノウハウ的な奴
node down対応の為、repairを
掛けるとデータが肥大化してし
まった・・・。
repair時に各node間でmarkle
hash tree交換を実行してそこか
ら各node間でデータのstreamを
実行するが、本来は持っている
データでもmarkle hash tree交
換の処理で持っていないと判断
され新たに取得・送信している。
repairイメージ
対応策
まずrepairが完了したら、肥大化し
たCFに対してcleanupを実行し、
不要重複データの論理削除を掛け
る。この後compactionが発生した
ら削除される
…..が、大きなSSTableだとそうそう
compactionが掛からない。
でどうするか
nodetool compact
を実行してmajor compactionを
明示的に実行させる
但し
	
この手法は麻薬と呼ばれるような
オペレーション
なぜ?
	
major compactionを実行すると
そのSSTableは巨大にSSTable
になり、余計に自動的に
compactionが掛かりにくくなるた
め、また手動でcompactionをす
る必要が・・・
いわゆる
_人人人人人人人人_

> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄
他には
謎のJVM Full GC
よくよく調べると
ある特定のCFに対する
compaction等がトリガーくさい
ログを見ると
INFO [ValidationExecutor:26]
2012-11-09 09:53:14,804
CompactionController.java (line 172)
Compacting large row hoge /fuga :
313938353330333037 (87368050
bytes) incrementally
※ログ出ている中では少ない方です
要は
一つのrowでヘタするとGBサイ
ズの物があるCFだった
その為
推測ですが、compactionやdelete
などをする際にこのデータを一度
memtableに展開し処理が終わるま
では開放されない
+通常処理も入る
memtableは最大サイズがheapの
1/3で更にこれをCF単位で取り合う
いわゆる
_人人人人人人人人_

> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄
対応策
肥大化したrowを作らない以外方法は無いの
でschema設計超重要です。
また、一つのrowに大量のcolumnを作成し
データを入れる様な設計にすると、row単位で
ノード毎に分散されるので負荷が偏ります。で、
この偏りはノードをいくら追加しても偏りが移動
するだけなので解消出来ないです。
対応策
この時はもうしょうがないので、推
奨されていないですがJVMの
heap sizeを8GB -> 12GBとかに
変更してしのぎました。
他には
1.2系や2.0系verではあるかどう
かわからないですが、今使って
いるVerでは連続稼働に伴いレ
イテンシが悪化する性能リーク的
な挙動がある。
対応策
再起動のみ
その為
Consistency level QUORUM
Replica Factor 3
simple strategy
(1.1系なのでvnode無し)
を考慮した上でアプリケーション側に影響
が少ない全台再起動ジョブを作成し、定期
実行しています。
HWの安定性の重要さについて
もしかして見たことがある人が?
一部のレンジで検証+色々な事が
あり納期の問題でそれまで利用し
てたSAS Diskでは無くSSDを利用
しました。
ただ、これがRAIDカードとの相性
が悪かったらしく地雷でした。
何が起きるか
SSD障害によりノードダウン -> 追
加サーバでrepair -> データ肥大
化 -> cleanup -> compaction ->
周辺ノードがrepairによるデータ書
き込みトリガーでSSD死亡…
以下ループ
またも
_人人人人人人人人_

> 賽の河原状態 <

 ̄Y^Y^Y^Y^Y^Y^Y ̄
Cassandra云々というより
納期が無いからといって十分な
検証が取れていないHWを投入
してはいけない
ここが困るよCassandra
障害時のオペレーションでも触
れましたが、repairが結構重い +
データの肥大化が発生する。
その為
node障害から完全にクラスタ復
旧するまでにnodeが持つデータ
量に比例して時間が掛かる。
実測値レベルですが
1 node data -> 300~400GB
join / remove -> about 4 ~6 h
repair -> about 24 h
※但しexpire的に不要なCFは見送ったりしている。

compaction -> ?
最近実行したログより
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.
426,600sec = 7110 minute =
118.5 hour = about 5 days
(;゚Д゚)
これはcompactionがCF単位で並
列化されており、CF内の複数
SSTableについては並列に実行さ
れないため、巨大なSSTableを持
つCFでmajor compactionが実行
されると恐ろしい時間が掛かります。
※iowait等は発生していませんで
した。
但し
multithreaded_compaction
を有効にするとまだ不安定な機
能だったらしくLA高騰など挙動
が悪化しました
なので
この辺のオペレーションは可能
な限りCF単位で分割実行出来
るようにjob組んで、少しでもコン
トロールしています
他に
よくあるMySQLとの比較で言うと
slow query logが無い
一応
query traceが1.2系から実装さ
れている様ですが、もちろん重
いのであくまでもサンプリング的
に出力するのが推奨の様です。
そのため
ある閾値を超えたクエリだけを集め
てパフォーマンス調査したいとかは
今のところ厳しそう。
なので、アプリケーション側でslow
logを実装しておいた方が確実で
しょう。
他に
nodetool コマンドの出力結果
フォーマットが1.1系と1.2系で微
妙に変えられた。
nodetool ringとか。
他に
mbeanの格納場所も微妙に変
わったりしている。
そのため
nodetool やjolokia経由で値を
取得しているジョブが微妙に動
かなくなる!
(まあ、nodetoolの方は
お前のパースの仕方が悪いという説もありますが)
あと
nodetool cfstatsとかはjsonで初
めから出力するオプションとか欲
しい。
今は自分でperlスクリプトで実行
結果をパースしてゴニョゴニョし
ている
他に
mysqldumpの様に一発でその
データストアのデータをdumpす
る機能に相当するものは無い。
回避方法として
snapshot(SSTableファイル)を
bulkloadする為の
sstableloaderというツールがあるが
まだ未検証
(どれくらい時間掛かるかが結構怖
い)
どちらかというと
snapshotをコピーしても
cassandra.yamlのcluster name
が変更されていたら起動出来な
いという仕様を改善して欲しい
(チラッ
以上の事から
凄まじく偏見に満ちた主観的な
クラスタ設計
1 cluster
1 cluster node -> about 50
node ?
これ以上のノード数になるとrepairの実行
時間の所でも触れましたが、基本的な
ジョブ等でも時間が結構掛かる
また

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

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

バックアップの事を考えるとRF3の場合
・最低限のデータ保全:1/3
・QUORUMの事を考えると2/3
・repair無しを考えると3/3
が必要になる為、ストレージの容量も。
1 node
Total data -> Limit 100~200GB?
後々のクラスタ分割や
repair + snapshot + compaction等の
運用オペレーションを考慮
snapshotの保存期間とかにもよりますが。1.2系や2.0系でrepair
の肥大化が抑えられるのであれば300GBくらいはアリかも。
各環境にもよりますが

AWSの場合EBSの最大ボリュームが1TBなので、
「まあ後でEBSを拡張すれば
なんとかなるっしょ(^ω^)」
と思っていると泣きながらクラスタ分割や、なんとか消し
込み作業を行いmajor compactionをせざるを得ない可
能性があります。
(EBSをストライピングするという手も多分ありますが)
※僕はAWS使っていないのでEBSストライピングは妄想です。
CF
1 CFで1 node 200GBとか超えると
後々のコントロールが大変になるので、
50 node で1node 1CF 50GB程度にな
るようであれば早めにクラスタ分割や論
理分割を検討?
※分割する際の移行先クラスタへのデータ
移行やCF自体の分割に伴うApp改修など
row
絶対にwide rowはNG
Cassandraも運用者も死ぬ
なので、最大でも数十MBとかにするよ
うな設計・コントロールを。
繰り返しになりますが、大きなrowを持
ち、そこにアクセスが集中するとノード
追加して分散しても回避出来ない。
一般的なWebサービスで使うなら
やはりアーカイブ系やヒストリー系
などデータ量が爆発しやすい所が
一番向いているか?
一時的なイベント系などスキーマレ
スが有効に利用できる所も良いか
も。
今後やっていきたい事
2.0系、2.1系への移行
network topology strategy
の導入
監視系の統合
(かなりツール分散しまくっているので)
Netflix先生が出している各種toolの検証

https://github.com/Netflix/Priam
まあ、色々と書きましたが
Cassandraは今まで問題もあったがそ
れと同じくらいメリットもあるので、今後
も使い続けるだろう
+
社内でも新しいサービスでCassandra
を利用する所も続々出ている。
ver的には2.0系のサービス利用も出て
いる。
2.0系からはCQLが強化され、
SQLライクな操作や、
データ操作もCASや
Lightweight transactions
など強化されている。
個人的には
なんでもかんでもRDBMSから
Cassandraに置き換えれば良い
訳では無い
あくまでもCassandraが有効に使
えるかどうかを見極めて導入する
事が必要
運用することも考えてね!
何か質問があればどうぞ!
御清聴ありがとうございました

More Related Content

PPTX
Cassandraのバックアップと運用を考える
DOC
cassandra調査レポート
PPT
Webアプリケーションから見たCassandra
 
PPT
インフラエンジニアのためのcassandra入門
PPT
Cassandraのしくみ データの読み書き編
PDF
はじめるCassandra
PDF
Db tech showcase 2016
PDF
Guide to Cassandra for Production Deployments
Cassandraのバックアップと運用を考える
cassandra調査レポート
Webアプリケーションから見たCassandra
 
インフラエンジニアのためのcassandra入門
Cassandraのしくみ データの読み書き編
はじめるCassandra
Db tech showcase 2016
Guide to Cassandra for Production Deployments

What's hot (20)

PPTX
これがCassandra
PDF
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
PPTX
Consistency level
PDF
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
PDF
Cassandraとh baseの比較して入門するno sql
PPTX
Cassandraバージョンアップ&移設
PPTX
Cassandra Meetup Tokyo, 2016 Spring
PPT
Cassandra0.7
PDF
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
PPTX
事例で学ぶApache Cassandra
PPT
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
PPTX
The rethinkingofrepair
PDF
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
PPT
Cassandra(no sql)によるシステム提案と開発
PDF
キャッシュ・権威 兼用型浸透問題への対処
PDF
書くべきは手順書ではなくスクリプトです。定型業務をスクリプトで自動化して楽をしよう
PDF
Cassandra Summit Tokyo 2015 - intra-mart
PDF
Mobageの技術を体験(MyDNS編)
PDF
DNSキャッシュサーバ チューニングの勘所
PPTX
Cloudera Impala Seminar Jan. 8 2013
これがCassandra
スマートフォン×Cassandraによるハイパフォーマンス基盤の構築事例
Consistency level
[db tech showcase Tokyo 2016] D27: Next Generation Apache Cassandra by ヤフー株式会...
Cassandraとh baseの比較して入門するno sql
Cassandraバージョンアップ&移設
Cassandra Meetup Tokyo, 2016 Spring
Cassandra0.7
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
事例で学ぶApache Cassandra
Devsumi2013【15-e-5】NoSQLの野心的な使い方 ~Apache Cassandra編~
The rethinkingofrepair
Awsのクラウドデザインパターンをwindows azureに持ってきてみた
Cassandra(no sql)によるシステム提案と開発
キャッシュ・権威 兼用型浸透問題への対処
書くべきは手順書ではなくスクリプトです。定型業務をスクリプトで自動化して楽をしよう
Cassandra Summit Tokyo 2015 - intra-mart
Mobageの技術を体験(MyDNS編)
DNSキャッシュサーバ チューニングの勘所
Cloudera Impala Seminar Jan. 8 2013
Ad

Viewers also liked (8)

PPTX
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
PPTX
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
PDF
OpenVZ - Linux Containers:第2回 コンテナ型仮想化の情報交換会@東京
PDF
コンテナ情報交換会2
PDF
PaaSの作り方 Sqaleの場合
PDF
Intel DPDK Step by Step instructions
PDF
Nosqlの基礎知識(2013年7月講義資料)
PPTX
Understanding DPDK
Seastar:高スループットなサーバアプリケーションの為の新しいフレームワーク
Inside Sqale's Backend at Sapporo Ruby Kaigi 2012
OpenVZ - Linux Containers:第2回 コンテナ型仮想化の情報交換会@東京
コンテナ情報交換会2
PaaSの作り方 Sqaleの場合
Intel DPDK Step by Step instructions
Nosqlの基礎知識(2013年7月講義資料)
Understanding DPDK
Ad

Similar to cassandra 100 node cluster admin operation (20)

PDF
Yahoo! JAPANにおけるApache Cassandraへの取り組み
PPTX
Cassandra Summit 2016 注目セッション報告
PDF
ヤフーにおけるHadoop Operations #tdtech
PDF
Participation report of data stax accelerate 2019
PDF
最新版Hadoopクラスタを運用して得られたもの
PPTX
Diskless Compute Nodeを使ったImmutable OpenStack
PPTX
今からでも間に合う!インフラ自動化超入門 @渋谷
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
PDF
20140807 AWS Startup Tech Meetup
PDF
Kubernetes Cluster Adminやってました #con_rider
PDF
Jvm operation casual talks
PPTX
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
PDF
運用に自動化を求めるのは間違っているだろうか
PDF
守る - cybozu.com 運用の裏側
PDF
RDB脳でCassandra/MSAを始めた僕達が、 分散Drivenなトランザクション管理に たどり着くまで
PPTX
アメーバブログを支えるデータセンターとインフラ技術
PDF
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
PPT
PPTX
HDFS Supportaiblity Improvements
PDF
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~
Yahoo! JAPANにおけるApache Cassandraへの取り組み
Cassandra Summit 2016 注目セッション報告
ヤフーにおけるHadoop Operations #tdtech
Participation report of data stax accelerate 2019
最新版Hadoopクラスタを運用して得られたもの
Diskless Compute Nodeを使ったImmutable OpenStack
今からでも間に合う!インフラ自動化超入門 @渋谷
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
20140807 AWS Startup Tech Meetup
Kubernetes Cluster Adminやってました #con_rider
Jvm operation casual talks
エンプラに Kubernetes を 導入してみて分かった 4つの Lessons Learned
運用に自動化を求めるのは間違っているだろうか
守る - cybozu.com 運用の裏側
RDB脳でCassandra/MSAを始めた僕達が、 分散Drivenなトランザクション管理に たどり着くまで
アメーバブログを支えるデータセンターとインフラ技術
RDB脳でCassandra / MSAを始めた僕達が、分散Drivenなトランザクション管理にたどり着くまで / A journey to a...
HDFS Supportaiblity Improvements
NTTデータ流 Hadoop活用のすすめ ~インフラ構築・運用の勘所~

More from oranie Narut (10)

PDF
Devsumi2019 dynamodb
PDF
Fluentd casual
PDF
Webサーバ勉強会#5
PDF
Webサーバ勉強会#4
PDF
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
PDF
Webサーバ勉強会03
PDF
財務分析勉強会挨拶
PPT
Webサーバ勉強会02
PPT
Webサーバ勉強会 発表資料
PPT
It勉強会の勉強会
Devsumi2019 dynamodb
Fluentd casual
Webサーバ勉強会#5
Webサーバ勉強会#4
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
Webサーバ勉強会03
財務分析勉強会挨拶
Webサーバ勉強会02
Webサーバ勉強会 発表資料
It勉強会の勉強会

cassandra 100 node cluster admin operation