DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
Hinted Handoff (ヒンテッドハンドオフ)
**Hinted Handoff(ヒンテッドハンドオフ)**は、Cassandraが提供する耐障害性機能の一つで、データの書き込み時にレプリカノードが一時的に利用できない場合に、データの耐久性を保証するための仕組みです。
仕組み
データの書き込みリクエストがコーディネーターノードに到達し、そのデータが複製されるべきレプリカノードの一部がダウンしている、または一時的にネットワークから切断されている場合を考えます。
通常、Cassandraは設定されたConsistency Levelに基づいて、必要な数のレプリカからの応答を待ちます。しかし、ダウンしているノードがあるためにConsistency Levelを満たせない場合、書き込みは失敗します。
Hinted Handoffが有効になっている場合、コーディネーターノードは、ダウンしているレプリカノード宛てのデータを、一時的に別の利用可能なノード(ヒントノード)に保存します。この保存されたデータは「ヒント」と呼ばれます。
その後、ダウンしていたレプリカノードが復旧し、クラスターに再参加すると、ヒントノードは保存していたヒント情報を元のレプリカノードに転送します。これにより、ダウンタイム中に失われたはずの書き込みが、復旧後に最終的に整合性が取れるようになります。
利点と注意点
- 利点:
- 一時的なノード障害やネットワーク分断時でも、書き込みの耐久性を向上させます。
- クライアント側で書き込みエラーを回避し、可用性を高めます。
- 注意点:
- Hinted Handoffは、あくまで一時的な解決策です。ノードが長期間ダウンしている場合や、大量のヒント情報が蓄積されると、ヒントノードのディスク容量を圧迫したり、復旧時のデータ転送に時間がかかったりする可能性があります。
- デフォルトで有効になっていますが、
cassandra.yaml
で設定を変更することも可能です。しかし、特別な理由がない限り、デフォルトのまま運用することが推奨されます。
Hinted Handoffは、Cassandraの「結果整合性(Eventual Consistency)」モデルを支える重要な機能の一つであり、システムの可用性と耐久性を高める上で貢献しています。