DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
Gossipプロトコル
Cassandraは、分散データベースとしてクラスター内のノード間で情報を共有し、クラスターの状態を維持するためにGossipプロトコルを使用します。Gossipプロトコルは、ノードが定期的にお互いに通信し、自身の状態や他のノードから得た情報を交換することで、クラスター全体に情報を伝播させる分散型の通信メカニズムです。
Gossipプロトコルの動作
- 定期的な情報交換: 各ノードは、クラスター内のランダムに選ばれた他のノードと定期的に「ゴシップ(情報交換)」メッセージを送信します。
- 情報の伝播: ノードは、自身が持つ情報(例: 自身の状態、負荷、スキーマバージョンなど)と、他のノードから受信した情報を比較します。より新しい情報があれば、自身の情報を更新し、その新しい情報をさらに他のノードに伝播させます。
- 効率的な情報伝達: すべての情報を送信するのではなく、変更された情報や最も新しい情報のみを効率的に伝達します。これにより、ネットワーク帯域幅の消費を抑えつつ、クラスター全体に情報が迅速に伝わります。
- 障害検知: Gossipプロトコルは、ノードのハートビート情報も交換します。これにより、ノードが応答しなくなった場合、他のノードがそのノードを「ダウン」と判断し、クラスター全体にその情報が伝播されます。
Gossipプロトコルは、Cassandraの分散アーキテクチャにおいて、ノードの参加・離脱、障害検知、スキーマの同期、負荷情報の共有など、クラスターの健全性と一貫性を維持するための基盤となっています。
演習
nodetool gossipinfo
コマンド
nodetool gossipinfo
コマンドは、ローカルノードがGossipプロトコルを通じて収集しているクラスター内のノードに関する情報を表示します。
$ nodetool gossipinfo
localhost/127.0.0.1
generation:1686366680
heartbeat:8156
STATUS:19:NORMAL,-1868919513406135542
LOAD:8135:1.2650205E7
SCHEMA:223:8aec9840-06b7-356a-b5ed-07e43a42d65e
DC:9:datacenter1
RACK:11:rack1
RELEASE_VERSION:6:4.1.2
RPC_ADDRESS:5:127.0.0.1
NET_VERSION:2:12
HOST_ID:3:349d6a93-038a-45a9-bd86-cc22ed3d8e0d
RPC_READY:21:true
NATIVE_ADDRESS_AND_PORT:4:127.0.0.1:9042
STATUS_WITH_PORT:18:NORMAL,-1868919513406135542
SSTABLE_VERSIONS:7:big-nb
TOKENS:17:<hidden>
この出力は、各ノードの状態がキーバリューペアとして表されていることを示しています。例えば、STATUS
はノードの稼働状態(NORMAL
など)、LOAD
はノードの負荷、DC
はデータセンター、RACK
はラック情報などです。
複数のノードで構成されるクラスターの場合、あるノードで nodetool gossipinfo
コマンドを実行すると、そのノードがGossipプロトコルを通じて認識している他のノードの情報も確認できます。これにより、クラスター全体の健全性を把握することができます。