Skip to content

Instantly share code, notes, and snippets.

@y-oda-oni-juba
Last active December 17, 2015 00:49
Show Gist options
  • Save y-oda-oni-juba/5524170 to your computer and use it in GitHub Desktop.
Save y-oda-oni-juba/5524170 to your computer and use it in GitHub Desktop.
クラスタ管理ツール調査(Cassandra)
クラスタ管理ツール調査
======================
調査対象
--------
- Cassandra 1.2.4
- 同 nodetool
- DataStax OpsCenter
調査結果
--------
提供機能
~~~~~~~~
============================= ==== ====
ライフサイクル 提供 補足
============================= ==== ====
クラスタの設定 有 - GUIツール有(OpsCenter)
- もしくは 設定ファイルを事前に別途配布
クラスタの起動 有 - 全ノードを順次起動
- 前回起動時と設定が異なる場合、起動できない
- GUIツール有(OptsCenter)
クラスタの停止 有 - ノードごとにコマンドで停止実施
- GUIツール有(OpsCenter)
- 停止だけではレンジの移譲は実施されない
クラスタの状態確認 有 - nodetool ring など
- ver1.2 から仮想ノードに対応したので、1物理ノードに
複数の仮想ノード存在
============================= ==== ====
ノード追加 有 - 動的追加可能。追加時自動的に負荷分散実施。
- initial_token 未指定時、最も負荷が高いレンジを分割
- GUIツール有(OpsCenter)
ノード削除 有 - 動的削除可能。 いくつかの削除方法あり:
+ decommision: 生きているノードに対して発行され、
担当しているレンジのデータを他ノードに安全に移譲して
からノード削除
+ removetoken: 死んでいるノードについて、 (その
ノードが担当していた)トークンを削除
+ drain:あるノードを一時的に read-only にする
- GUIツール有(OpsCenter)
ノード移動 有 - 動的移動可能
- GUIツール有(OpsCenter)
リバランス 有 - ノード移動を順次手動で実施することでリバランス
- vnode利用時は shuffle により仮想ノード再配置によりリバランス
- OpsCenter有償版では自動リバランス有り
============================= ==== ====
スナップショットの採取 有 - ノード単位での snapshot。全ノードについてsnapshotを
実行することで、クラスタ全体での snapshot がとれる。
- GUIツール有(OpsCenter)
スナップショットからの復元 有 - ファイルコピーによる手動操作。ノード単位でのrestore
- GUIツール有(OpsCenter)
============================= ==== ====
ログ収集 有 log4j, JMX compliant, GUI有
ログ監視 有 log4j, JMX compliant, GUI有
============================= ==== ====
状態確認可能項目
~~~~~~~~~~~~~~~~
+ ノード個別の情報
nodetool info などによりノード個別の情報を取得
================ ====
項目 補足
================ ====
token
gossip 動作状況
load disk 使用量
generation ノード世代番号
uptime
memory usage
rack/datacenter
例外 発生数
================ ====
+ リング情報
nodetool ring などにより、クラスタの token ring 情報を取得
=============== ====
項目 補足
=============== ====
host
dataceter/rack
load
status up/down
state normal/boot/leaving/left/moving
token
=============== ====
+ column family情報
nodetool cfstats などにより、クラスタが保持する column familyの統計情報を
column familyごとに取得
===================== ====
項目 補足
===================== ====
SSTable 使用量
memtable 使用量
key cache 利用状況
read/write 数
read/write レイテンシ
pending 数
row サイズ統計情報
===================== ====
column family 全体での統計情報も取得できる
===================== ====
項目 補足
===================== ====
read/write 数
read/write レイテンシ
pending 数
===================== ====
+ スレッド情報
nodetool tpstats などにより、ステージとスレッド状態毎のスレッド数統計情報を取得
======================= ====
項目 補足
======================= ====
ステージ ReadStage, RequestResponseStage, MutationStage,
ReadRepairStage, ReplicateOnWriteStage, GossipStage,
AntiEntropyStage, MigrationStage, MemtablePostFlusher,
StreamStage, FlushWriter, MiscStage, AntiEntropySessions,
InternalResponseStage, HintedHandoff
スレッド状態 active/pending/completed/blocked/all time blocked
ドロップリクエスト数 RANGE_SLICE、READ_REPAIR, BINARY, READ, MUTATION,
REQUEST_RESPONSE
======================= ====
+ 通信状況
nodetool netstats などにより、ネットワーク通信状況を取得
================= ====
項目 補足
================= ====
ストリーミング状況 bootstrap/repair/move/decommission
リクエスト数 active/pending/completed
================= ====
その他
~~~~~~
+ OpsCenter Enterpise Ed.
- アラート メール通知
- 自動リバランス
- ソフトウェア更新通知
etc...
+ パフォーマンスチューニングのためのストレスツール有り
- cassandra-stress(無償)
まとめ&感想
~~~~~~~~~~~
+ OpsCenter とセットで考えると、管理系は充実している
+ クラスタ全体のメンテナンス機能は Cassandra自体では提供していない。
このあたりは OpsCenter で補完している
+ クラスタ構成の変更はオンラインで実施する。(例えば、ある時点のクラスタのスナップショットを
それとは異なる構成のクラスタに読み込ませる といったことは想定していない)
+ リバランスのための道具が標準でも用意されている
+ 監視機能が標準的なフレームワークに乗っかっているので既存の監視システムへの統合には便利かも
+ 各種 streaming などアプリからは見えない部分の負荷も確認できる
+ とにかく online
+ jubavisor/ctl 相当の機能
→ Cassandra 自体では提供されていない。が、DataStax OpsCenter によって提供される
(無償版でも利用可能)。ノードの追加/削除/リバランス/監視機能が統合されている分
OpsCenterのほうが高機能
+ 管理ツールの導入に関して
→ OpsCenterの場合、別途 agent の導入が必要。ただし、DataStaxが配布している
Cassandraのディストリビューション(rpm or deb)を利用すれば、Cassandra本体と
まとめて導入される
+ Jubaに何が必要か? (個人的見解)
- 【共通】各ノードの負荷を監視できる機能、ストレステストが欲しい
- 【分散】jubavisor/ctl はあったほうがよさげ
- 【分散】クラスタ構成変更/リバランスのための機能がほしい
- 【分散】クラスタ自体はオンラインのままでノードをメンテナンスできる仕組みが欲しい
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment