Cassandra は 3 つのノードを持つクラスター モデルで動作します。すべてのノードが "UP" の場合、cqlsh で cql “select * from User” を使用します。Cassandra は正しい結果を返します。結果は返されませんが、「リクエストを完了できません: 1 つまたは複数のノードが利用できませんでした」と報告されます。cassandra-cli コマンド「get Users」を使用するようになりました。エラーなしで正しいデータが返されます。何か案は?
5 に答える
CQL を使用している場合、Consistency-Level が「ALL」のリクエストがあると思います。この場合、(そのノードのレプリカをホストする) すべてのサーバーからの応答を待ってから、戻ります。1 つのノードがダウンしているため、ダウンしているノードに接続できないため、失敗します。
Cassandra-cli を使用して実行している場合、一貫性レベルはデフォルトで「QUORUM」または「ONE」または「ANY」のいずれかに設定されているため、1 つのレプリカがダウンしていても問題なくデータが返されると思います。
cqlsh と cli の両方のデフォルトは CL.ONE です。違いは、実際には、cqlsh クエリが「すべてのユーザーを選択する」と言っているのに対し、cli の「取得」は「1 人のユーザーを選択する」ことであると思われます。
Cassandra クラスターが aws にある場合は、「cassandra.yaml」の構成を変更します。endpoint_snitch を Ec2Snitch に変更するだけです。データセンターが実際には ec2 インスタンスの「リージョン」であり、「 us-east','us-west'. あなたの場合は、'eu-west' のみにする必要があります。
datastax によると、それについて EC2Snitch¶
クラスター内のすべてのノードが 1 つのリージョン内にある Amazon EC2 での単純なクラスター展開には、EC2Snitch を使用します。リージョンはデータ センターとして扱われ、アベイラビリティ ゾーンはデータ センター内のラックとして扱われます。たとえば、ノードが us-east-1a にある場合、us-east はデータセンター名で、1a はラックの場所です。プライベート IP が使用されるため、このスニッチは複数のリージョンでは機能しません。
キースペースの strategy_options を定義するときは、EC2 リージョン名 (us-east など) をデータセンター名として使用します。
リンク - http://www.datastax.com/docs/1.0/cluster_architecture/replication http://www.datastax.com/documentation/cql/3.1/cql/cql_using/update_ks_rf_t.html
あなたのキースペースの配置はどの戦略ですか?NetworkTopologyStrategy を使用している場合は、次のように試すことができます。
CREATE KEYSPACE gxsim with placement_strategy = 'org.apache.cassandra.locator.NetworkTopologyStrategy' and strategy_options = {'DC1' : 1 , DC2' : 1} AND durable_writes = true;