web-dev-qa-db-ja.com

Cassandra Javaドライバ:いくつの接点が妥当ですか?

Java私はこのようにCussandraクラスターに接続します:

Cluster cluster = Cluster.builder().addContactPoints("Host-001","Host-002").build();

そこにクラスターのすべてのホストを指定する必要がありますか? 1000ノードのクラスターがある場合はどうなりますか?無作為にいくつかを選択しますか?いくつありますか、それとも本当にランダムに行いますか?

17
henry

構成したシードノードのリストと同じノードのリストを使用するようにクライアントを構成するCassandraを使用すると、最良の結果が得られます。

ご存じのように、Cassandraノードはシードノードを使用して互いを見つけ、リングのトポロジを検出します。ドライバは、リストで提供されているノードの1つだけを使用して制御接続、クラスタートポロジの検出に使用されますが、クライアントにシードノードを提供すると、ノード障害が発生した場合にクライアントが動作し続ける可能性が高くなります。

11
Alex Popescu

私のアプローチは、できるだけ多くのノードを追加することです-理由は簡単です:シードはクラスターの起動にのみ必要ですが、クラスターが起動して実行中のシードは単なる共通ノードです-シードのみを使用すると、接続できなくなる可能性があります稼働中のクラスターでは-妥当な量のノードを維持しながら、クラスターに接続するための最良の機会を私自身に与えます-現在のクラスター構成を取得するには、1つの稼働ノードで十分です。

10

DataStaxのドキュメント

_public Cluster.Builder addContactPoint(String address)
_

連絡先を追加します。

接点はCassandraノードのアドレスであり、ドライバーがクラスタートポロジーを検出するために使用します。接点は1つだけ必要です(ドライバーは他のノードのアドレスを自動的に取得します)が、通常は複数の接点を提供することをお勧めします。その単一の接点が使用できない場合、ドライバーは正しく初期化できません。

デフォルトでは(つまり、このビルダーのwithLoadBalancingPolicy(com.datastax.driver.core.policies.LoadBalancingPolicy))メソッドを使用しない限り)、最初に正常に接続されたホストがクライアントのローカルデータセンターを定義するために使用されることに注意してください。 Cassandraを複数のデータセンター設定で実行している場合、クライアントと同じデータセンターにある連絡先のみを提供するか、手動で提供することをお勧めしますニーズに合った負荷分散ポリシー。

_Parameters:
    address - the address of the node to connect to
Returns:
    this Builder.
Throws:
    IllegalArgumentException - if no IP address for address could be found
    SecurityException - if a security manager is present and permission to resolve the Host name is denied.
_

私が理解していることから、1つの接触点を追加するだけで、ドライバーが残りを検出します。お役に立てば幸いです。私は個人的にhectorを使用しています。

8
qualebs

Netflixとその Cassandraのインストール に関する興味深い記事を読みました。

彼らは、彼らのGorillaシステムを使用して、Cassandraクラスタの33%をダウンさせ、システムはまだ期待どおりに機能していました。

2,000個のCassandra=ノードがあり、33%ダウンしました。つまり、3つのノードのうち1つがなくなっています(Netflixの場合は約660ノード)。

本当に運が悪い場合、指定したすべての接続は660ノードの一部です...痛い。

ただし、十分な数のノードを使用していて、ネットワークの33%以上がダウンするような劇的なイベントを予期しない場合は、6ノードなどのかなり少ない数を使用できるはずです。数、あなたは常に少なくとも4つをヒットする必要があります...

現在、可能であれば、戦略的に選択する必要があります。つまり、6つの異なるラックがあるときに、同じラック内の6つのノードをすべて選択した場合、おそらく間違って選択したことになります。代わりに、ラックごとに1つのノードを指定する必要があります。 (もちろん、それだけ成長したら、ということになります。)

レプリケーション係数が5で、Cassandraノードの33%がダウンした場合、とにかく問題が発生します。そのような状況では、多くのノードがQUORUM方式でデータベースにアクセスできません。 。Netflixがそれについて話していることに注意してください。その複製係数は3です(つまり、1/3 = 0.331/5 = 0.2したがって、20%は33%未満です。)

最後に、Javaドライバーを知りません。C++ドライバーを使用します。失敗した場合は、通知されます。それで、私ができることは、必要に応じて別のIPセットを試してみることです。動作します...私のシステムにはクライアントアクセス間で維持される1つの接続があるため、これは1回限りのプロセスであり、このサーバーがCassandraに接続されているためクライアントを受け入れることができるという事実を中継できます。 Cassandraに再接続する場合、クライアントがリクエストを送信するたびに、多くのIPを送信しないのが賢明かもしれません。

3
Alexis Wilke