Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

スニッチ

Cassandra において、スニッチには2つの機能があります。

  • リクエストを効率的にルーティングするために、ネットワークトポロジについて Cassandra に十分に教えること。

  • 関連する障害を回避するために、クラスター全体にレプリカを分散できるようにすること。これは、マシンを「データセンター」と「ラック」にグループ化することによって行われます。Cassandra は、同じ「ラック」(実際には物理的な場所ではない可能性があります)に複数のレプリカが存在しないように最善を尽くします。

動的スニッチ

動的スニッチは、読み取りレイテンシーを監視して、速度が低下したホストからの読み取りを回避します。動的スニッチは、cassandra.yaml で次のプロパティを使用して設定されます。

  • dynamic_snitch: 動的スニッチを有効にするか無効にするか。

  • dynamic_snitch_update_interval: 100 ミリ秒。ホストスコア計算のよりコストのかかる部分を実行する頻度を制御します。

  • dynamic_snitch_reset_interval: 10 分。ゼロより大きい値に設定した場合、キャッシュ容量を増やすために、レプリカをホストに「固定」できます。

  • dynamic_snitch_badness_threshold:: 不良さのしきい値は、固定されたホストがどれだけ悪くなったら、動的スニッチが他のレプリカを優先するかを制御します。これは、パーセンテージを表す double として表されます。したがって、0.2 の値は、固定されたホストが最速よりも 20% 悪くなるまで、Cassandra が静的スニッチの値を優先し続けることを意味します。

スニッチクラス

cassandra.yamlendpoint_snitch パラメータは、動的スニッチによってラップされ、2つのエンドポイントが同じデータセンターにあるか、同じラックにあるかを判断する IEndpointSnitch を実装するクラスに設定する必要があります。すぐに使えるように、Cassandra は次のスニッチ実装を提供します。

GossipingPropertyFileSnitch

これは、本番環境で使用するための適切なスニッチです。ローカルノードのラックとデータセンターは、cassandra-rackdc.properties で定義され、gossip を介して他のノードに伝播されます。cassandra-topology.properties が存在する場合、フォールバックとして使用され、PropertyFileSnitch からの移行を可能にします。

SimpleSnitch

戦略順序を近接として扱います。これにより、読み取り修復を無効にするときにキャッシュの局所性が向上します。単一データセンターのデプロイメントにのみ適しています。

PropertyFileSnitch

近接は、cassandra-topology.properties で明示的に設定されたラックとデータセンターによって決定されます。

RackInferringSnitch

近接は、各ノードの IP アドレスの 3 番目と 2 番目のオクテットにそれぞれ対応すると想定されるラックとデータセンターによって決定されます。これがデプロイメント規則と一致しない限り、これはカスタム Snitch クラスを作成する例として最適であり、その精神で提供されています。

クラウドベースのスニッチ

これらのスニッチは、さまざまなクラウドベンダーのクラウド環境で使用されます。すべてのクラウドベースのスニッチ実装は、現在 AbstractCloudMetadataServiceSnitch (さらに AbstractNetworkTopologySnitch を拡張)を拡張しています。

各クラウドベースのスニッチには、それぞれのノードがどのラックとデータセンターに属するかを解決する独自の方法があります。AbstractCloudMetadataServiceSnitch は、それを実現するための最も一般的な機構をカプセル化します。すべてのクラウドベースのスニッチは、それぞれのクラウドに固有の HTTP サービスを呼び出します。AbstractCloudMetadataServiceSnitch のコンストラクタは、HTTP URL に対して HTTP GET リクエストを、HTTP ヘッダーを送信せずに実行し、HTTP コード 200 の応答を期待するメソッド apiCall を実装する AbstractCloudMetadataServiceConnector の実装を受け入れます。実装者がそれを望む場合、リクエストの一部としてさまざまな HTTP ヘッダーを送信できます。

現在、AbstractCloudMetadataServiceConnector の唯一の実装は DefaultCloudMetadataServiceConnector です。ユーザーが AbstractCloudMetadataServiceConnector の動作をオーバーライドする必要がある場合は、独自のコネクタを実装して AbstractCloudMetadataServiceSnitch のコンストラクタに伝播することで、これを行うことができます。

すべてのクラウドベースのスニッチは、cassandra-rackdc.properties で次のプロパティを受け入れます。

metadata_url

トポロジ情報を取得するクラウドサービスの URL。これはクラウド固有です。

metadata_request_timeout

30 秒(30 秒)のデフォルト値は、apiCall による呼び出し時に接続タイムアウトを設定します。言い換えれば、metadata_url に対するリクエストは、その期間内に応答が到着しないとタイムアウトします。

dc_suffix

解決されたデータセンターに追加される文字列。デフォルトでは空です。

組み込みのクラウドベースのスニッチは次のとおりです。

Ec2Snitch

単一のリージョン内の EC2 デプロイメント、またはリージョン間 VPC が有効な複数のリージョンでの EC2 デプロイメントに適しています (2017 年末以降に利用可能。 AWS の発表を参照)。EC2 API からリージョンとアベイラビリティーゾーンの情報をロードします。リージョンはデータセンターとして扱われ、アベイラビリティーゾーンはラックとして扱われます。プライベート IP のみが使用されるため、リージョン間 VPC が有効になっている場合にのみ、複数のリージョンで機能します。

Ec2MultiRegionSnitch

リージョン間の接続を許可するために、パブリック IP を broadcast_address として使用します(したがって、シードアドレスもパブリック IP に設定する必要があります)。パブリック IP ファイアウォールで storage_port または ssl_storage_port を開く必要があります(リージョン内のトラフィックの場合、Cassandra は接続を確立した後、プライベート IP に切り替えます)。

Ec2 スニッチの場合、CASSANDRA-16555以降、AWS IMDS のバージョンを選択できます。デフォルトでは、IMDSv2 が使用されます。IMDS のバージョンは、プロパティ ec2_metadata_type によって駆動され、v1 または v2 のいずれかの値を指定できます。IMDS のカスタム URL を ec2_metadata_url (または metadata_url) で指定できます。これはデフォルトでは 169.254.169.254 であり、/latest/meta-data/placement/availability-zone エンドポイントに対してクエリが実行されます。

IMDSv2 は、最初に IDMSv2 からフェッチする必要があるトークンによって保護されており、IDMSv2 への実際のクエリのヘッダーで渡す必要があります。Ec2SnitchEc2MultiRegionSnitch はこれを自動的に行います。ユーザーに公開される唯一の設定パラメータは ec2_metadata_token_ttl_seconds であり、デフォルトでは 21600 に設定されています。TTL は範囲 [30, 21600] の整数である必要があります。

AlibabaCloudSnitch

ECS リージョンが DC であり、ECS availability_zone がラックであると想定するスニッチ。この情報は、ノードの設定で利用できます。ゾーン ID の形式は cn-hangzhou-a のようになります。ここで、cn は中国を意味し、hangzhou は杭州リージョンを意味し、a は az ID を意味します。cn-hangzhou を dc として、a をゾーン ID として使用します。このスニッチの metadata_url は、デフォルトでは 100.100.100.200/ であり、エンドポイント /latest/meta-data/zone-id に対して HTTP リクエストを実行します。

AzureSnitch

Azure Snitch は、デフォルトで API バージョン 2021-12-13/metadata/instance/compute?api-version=%s&format=json エンドポイントを 169.254.169.254metadata_url に対して呼び出し、JSON 形式で応答を返すことで、データセンターとラックを解決します。API のバージョンは、cassandra-rackdc.properties のプロパティ azure_api_version を介して設定できます。データセンターは応答の location フィールドから解決され、ラックは最初に zone フィールドを調べることで解決されます。zone が設定されていない場合、または空の文字列の場合、platformFaultDomain フィールドを調べます。このような解決された値は、rack- 文字列が前に付けられます。

GoogleCloudSnitch

Google スニッチは、metadata.google.internalmetadata_url に対して /computeMetadata/v1/instance/zone エンドポイントを呼び出すことで、データセンターとラックを解決します。