DS201学習記録:CassandraのGossipプロトコルについて

DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。

Gossipプロトコル

Cassandraは、分散データベースとしてクラスター内のノード間で情報を共有し、クラスターの状態を維持するためにGossipプロトコルを使用します。Gossipプロトコルは、ノードが定期的にお互いに通信し、自身の状態や他のノードから得た情報を交換することで、クラスター全体に情報を伝播させる分散型の通信メカニズムです。

Gossipプロトコルの動作

  1. 定期的な情報交換: 各ノードは、クラスター内のランダムに選ばれた他のノードと定期的に「ゴシップ(情報交換)」メッセージを送信します。
  2. 情報の伝播: ノードは、自身が持つ情報(例: 自身の状態、負荷、スキーマバージョンなど)と、他のノードから受信した情報を比較します。より新しい情報があれば、自身の情報を更新し、その新しい情報をさらに他のノードに伝播させます。
  3. 効率的な情報伝達: すべての情報を送信するのではなく、変更された情報や最も新しい情報のみを効率的に伝達します。これにより、ネットワーク帯域幅の消費を抑えつつ、クラスター全体に情報が迅速に伝わります。
  4. 障害検知: 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プロトコルを通じて認識している他のノードの情報も確認できます。これにより、クラスター全体の健全性を把握することができます。