1

2 つのシードを持つ 4 つのノードで cassandra クラスターを構成しました。nodetool status を実行すると、個々のノードの所有者は次のようになります。

node1 (seed1)    - 24.5%
node2            - 15.0%
node3(seed2)     - 46.1%
node4            - 14.5%

所有する必要があります % が等しい必要があります。もしそうなら、どうすればそれを等しくすることができますか。そして、ノード2とノード4を作成すると、レプリケーション係数2でデータを挿入/取得できます。しかし、ノード1またはノード2を作成すると、次の例外が発生します。

SEVERE: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
java.lang.Exception: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
    at com.july.storage.cassandra.util.CassandraDBUtil.getData(CassandraDBUtil.java:197)
    at com.july.storage.cassandra.util.CassandraDBUtil.doSelect(CassandraDBUtil.java:370)
    at com.july.storage.cassandra.action.CassandraHandler.getCall(CassandraHandler.java:127)
    at com.july.storage.service.StorageService.GET(StorageService.java:58)
    at com.july.storage.cassandra.action.CassandraHandler.main(CassandraHandler.java:571)
Caused by: me.prettyprint.hector.api.exceptions.HUnavailableException: : May not be enough replicas present to handle consistency level.
    at me.prettyprint.cassandra.service.ExceptionsTranslatorImpl.translate(ExceptionsTranslatorImpl.java:59)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:130)
    at me.prettyprint.cassandra.model.CqlQuery$1.execute(CqlQuery.java:100)
    at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:103)
    at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:258)
    at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecuteOperation(ExecutingKeyspace.java:97)
    at me.prettyprint.cassandra.model.CqlQuery.execute(CqlQuery.java:99)
    at com.july.storage.cassandra.util.CassandraDBUtil.getData(CassandraDBUtil.java:179)

ありがとう、サンジータ

4

1 に答える 1

3

不均衡は多くの要因に依存する可能性があり、あなたは私たちに先に進むことをあまり与えていません.

  • クラスター内のデータ量は? それほど多くない場合、これは完全に正常です。クラスター内に 1000 行しかない場合、均等に分散される可能性はほとんどありません。
  • vnode を有効にしましたか? 1.2.5 などの最近のバージョンを使用している場合、これはデフォルトで有効になっています。古いバージョンを使用している場合、または vnode を無効にしている場合、ノードのバランスが崩れることは珍しくありません。を使用して手動でノードをモード化できますnodetoolが、本番システムでは実行せず、最初にテスト環境でテストしてください。
  • どのパーティショナーを使用していますか? ランダム パーティショナーを使用していることがわからない場合は、均等に分配される可能性が高くなりますが、順序付けされたパーティショナーに変更した場合は、均等に分配されるとは期待できません。ノードを移動する必要があります。クラスタにデータを追加するときに手動で。

2 つのノードがダウンしているときにデータを取得できない理由は、おそらく、取得している行がそれらの 2 つのノードにあり、ノードが 4 つしかなく、レプリケーション ファクターが 2 である可能性が非常に高いためです。他の 2 つのノードのみが稼働している場合のデータ。別の行を試してみると、異なる結果が得られる可能性が高く、リクエストの整合性レベルを 1 に変更してみてください (どの整合性レベルを使用しているかは言わなかったので、クォーラムで読んでいると仮定します。係数 2 は、両方のノードが稼働している必要があることを意味します)。

于 2013-06-27T10:18:50.700 に答える