Cassandraシードノードと、クライアントがクラスターに接続する方法について少し混乱しています。この情報はドキュメントにありません。
クライアントにはシードノードのリストのみが含まれ、各ノードはクライアントが接続するための新しいホストを委任しますか?シードノードは、クライアント用の特別なノードではなく、実際にノード間ディスカバリー専用ですか?
各クライアントは、DCで接続するランダムノードの小さなサンプルを使用する必要がありますか?
または、各クライアントはDC内のすべてのノードを使用する必要がありますか?
自分の質問に答える:
種子
[〜#〜] faq [〜#〜] から:
シードは起動時にクラスターを検出するために使用されます。
「Gossip」の DataStaxドキュメント からも:
シードノードの指定には、クラスターに参加する新しいノードのゴシッププロセスをブートストラップする以外の目的はありません。 Seedノードは単一障害点ではありません。また、ノードのブートストラップ以外のクラスター操作で他の特別な目的もありません。
これらの詳細から、シードはクライアントにとって特別なものではないようです。
クライアント
DataStax documentation クライアントリクエストから:
Cassandra=のすべてのノードはピアです。クライアントの読み取りまたは書き込み要求はクラスター内の任意のノードに送信できます。クライアントがノードに接続して読み取りまたは書き込み要求を発行すると、そのノードは特定のクライアント操作のコーディネーター。
コーディネーターの仕事は、クライアントアプリケーションと、要求されているデータを所有するノード(またはレプリカ)との間のプロキシとして機能することです。コーディネーターは、クラスター構成のパーティショナーとレプリカ配置戦略に基づいて、リング内のどのノードがリクエストを取得するかを決定します。
クライアントが接続するノードのプールは、潜在的な障害を許容するためにDC内の少数の(ランダム?).
シードノードには2つの目的があります。
cassandra=クライアントコンタクトポイントは、単にクライアントにクラスタトポロジを提供します。その後、クライアントはクラスタ内の任意のノードに接続できます。したがって、シードノードに似ており、シードとクライアントの連絡先の両方に同じノードを使用しますが、cassandraクライアントの連絡先を好きなだけ設定できます。他の唯一の考慮事項は、クライアントが最初に接続するノードがデータセンターのアフィニティを設定することです。そのため、特定のデータセンターを優先するように連絡先を注文できます。
連絡先の詳細については、この質問を参照してください: Cassandra Java driver:連絡先の数は妥当ですか?
あなたの答えは正しいです。追加する唯一のことは、クラスター全体で同じシードリスト(つまり、cassandra.yaml)を使用することをお勧めします。これは、「ベストプラクティス」のようなものです。ゴシップコードによってシードが(非常に最小限)異なる方法で処理されるため、ゴシップトラフィックが通常のニースで伝播するのに役立ちます( http://wiki.Apache.org/cassandra/ArchitectureGossip を参照)。