web-dev-qa-db-ja.com

Cassandraシードノードとノードに接続するクライアント

Cassandraシードノードと、クライアントがクラスターに接続する方法について少し混乱しています。この情報はドキュメントにありません。

クライアントにはシードノードのリストのみが含まれ、各ノードはクライアントが接続するための新しいホストを委任しますか?シードノードは、クライアント用の特別なノードではなく、実際にノード間ディスカバリー専用ですか?

各クライアントは、DCで接続するランダムノードの小さなサンプルを使用する必要がありますか?

または、各クライアントはDC内のすべてのノードを使用する必要がありますか?

29
gak

自分の質問に答える:

種子

[〜#〜] faq [〜#〜] から:

シードは起動時にクラスターを検出するために使用されます。

「Gossip」の DataStaxドキュメント からも:

シードノードの指定には、クラスターに参加する新しいノードのゴシッププロセスをブートストラップする以外の目的はありません。 Seedノードは単一障害点ではありません。また、ノードのブートストラップ以外のクラスター操作で他の特別な目的もありません。

これらの詳細から、シードはクライアントにとって特別なものではないようです。

クライアント

DataStax documentation クライアントリクエストから:

Cassandra=のすべてのノードはピアです。クライアントの読み取りまたは書き込み要求はクラスター内の任意のノードに送信できます。クライアントがノードに接続して読み取りまたは書き込み要求を発行すると、そのノードは特定のクライアント操作のコーディネーター。

コーディネーターの仕事は、クライアントアプリケーションと、要求されているデータを所有するノード(またはレプリカ)との間のプロキシとして機能することです。コーディネーターは、クラスター構成のパーティショナーとレプリカ配置戦略に基づいて、リング内のどのノードがリクエストを取得するかを決定します。

クライアントが接続するノードのプールは、潜在的な障害を許容するためにDC内の少数の(ランダム?).

41
gak

シードノードには2つの目的があります。

  1. これらは、新しいノードがクラスターに自らをアナウンスする場所として機能します。したがって、少なくとも1つのライブシードノードがない場合、新しいノードはクラスタに参加できませんクラスターの状態。
  2. シードノードはゴシップホットスポットとして機能します。ノードのゴシップは非シードよりもシードを使用する頻度が高いため、シードには最新の情報が含まれる傾向があり、したがってクラスター全体に最新の情報が含まれます。これが理由ですnotすべてのノードをシードにする同様に、これは、特定のデータセンター内のすべてのノードが、cassandra.yamlファイル内に同じシードノードのリストを持つ必要がある理由でもあります。通常、データセンターあたり3つのシードノードが理想的です。

cassandra=クライアントコンタクトポイントは、単にクライアントにクラスタトポロジを提供します。その後、クライアントはクラスタ内の任意のノードに接続できます。したがって、シードノードに似ており、シードとクライアントの連絡先の両方に同じノードを使用しますが、cassandraクライアントの連絡先を好きなだけ設定できます。他の唯一の考慮事項は、クライアントが最初に接続するノードがデータセンターのアフィニティを設定することです。そのため、特定のデータセンターを優先するように連絡先を注文できます。

連絡先の詳細については、この質問を参照してください: Cassandra Java driver:連絡先の数は妥当ですか?

19
james turner

あなたの答えは正しいです。追加する唯一のことは、クラスター全体で同じシードリスト(つまり、cassandra.yaml)を使用することをお勧めします。これは、「ベストプラクティス」のようなものです。ゴシップコードによってシードが(非常に最小限)異なる方法で処理されるため、ゴシップトラフィックが通常のニースで伝播するのに役立ちます( http://wiki.Apache.org/cassandra/ArchitectureGossip を参照)。

8
the paul