2

各データセンターには単一のノードが含まれ、各データセンターはネットワーク上の別々の物理サーバーに配置されています。1 つのデータセンターがクラッシュしても、もう 1 つのデータセンターは引き続き読み取りと書き込みに使用できます。3 番目のサーバーで Java アプリケーションを起動し、すべて正常に動作しました。カサンドラへの読み書きです。

次に、2 番目のデータセンター サーバーをネットワークから切断し、ネットワーク ケーブルを引き抜きました。第 1 データセンターに対してアプリケーションが例外なく引き続き実行されることを期待していましたが、そうではありませんでした。

アプリケーションで次の例外が発生し始めました:

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:60)
        at me.prettyprint.cassandra.service.KeyspaceServiceImpl$9.execute(KeyspaceServiceImpl.java:354)
        at me.prettyprint.cassandra.service.KeyspaceServiceImpl$9.execute(KeyspaceServiceImpl.java:343)
        at me.prettyprint.cassandra.service.Operation.executeAndSetResult(Operation.java:101)
        at me.prettyprint.cassandra.connection.HConnectionManager.operateWithFailover(HConnectionManager.java:232)
        at me.prettyprint.cassandra.service.KeyspaceServiceImpl.operateWithFailover(KeyspaceServiceImpl.java:131)
        at me.prettyprint.cassandra.service.KeyspaceServiceImpl.getSuperColumn(KeyspaceServiceImpl.java:360)
        at me.prettyprint.cassandra.model.thrift.ThriftSuperColumnQuery$1.doInKeyspace(ThriftSuperColumnQuery.java:51)
        at me.prettyprint.cassandra.model.thrift.ThriftSuperColumnQuery$1.doInKeyspace(ThriftSuperColumnQuery.java:45)
        at me.prettyprint.cassandra.model.KeyspaceOperationCallback.doInKeyspaceAndMeasure(KeyspaceOperationCallback.java:20)
        at me.prettyprint.cassandra.model.ExecutingKeyspace.doExecute(ExecutingKeyspace.java:85)
        at me.prettyprint.cassandra.model.thrift.ThriftSuperColumnQuery.execute(ThriftSuperColumnQuery.java:44)

ネットワーク ケーブルを 2 番目のサーバーに再接続すると、エラーは停止しました。

カサンドラ1.0.10の詳細はこちら

1) 以下は、両方のデータセンターの cassandra からの説明です。

Keyspace: AdvancedAds:
Replication Strategy: org.apache.cassandra.locator.NetworkTopologyStrategy
Durable Writes: true
Options: [DC2:1, DC1:1]

2) 各インスタンスに対してノード ツール リングを実行しました

./nodetool -h 111.111.111.111 -p 11000 ring
Address DC Rack Status State Load Owns Token
1
111.111.111.111 DC1 RAC1 # <-- usUp Normal 1.07 GB 100.00% 0
111.111.111.222 DC2 RAC1 Up Normal 1.1 GB 0.00% 1

./nodetool -h 111.111.111.222 ring -port 11000
Address DC Rack Status State Load Owns Token
1
111.111.111.111 DC1 RAC1 Up Normal 1.07 GB 100.00% 0
111.111.111.222 DC2 RAC1 # <-- usUp Normal 1.1 GB 0.00% 1

3) cassandra.yaml を確認しました

the seeds are 111.111.111.111, 111.111.111.222

4) cassandra-topology.properties を確認しました

111.111.111.111

    # Cassandra Node IP=Data Center:Rack

    # datacenter 1
    111.111.111.111=DC1:RAC1 # <-- us

    # datacenter 2
    111.111.111.222=DC2:RAC1

    default=DC1:r1

111.111.111.222

    # Cassandra Node IP=Data Center:Rack

    # datacenter 1
    111.111.111.111=DC1:RAC1

    # datacenter 2
    111.111.111.222=DC2:RAC1 # <-- us

    default=DC1:r1

5) 次のように、java アプリケーションで、consistencyLevel を LOCAL_QUORUM に設定します。

public Keyspace getKeyspace(final String keyspaceName, final String serverAddresses)
{        
    Keyspace ks = null;
    Cluster c = clusterMap.get(serverAddresses);
    if (c != null)
    {            
        ConfigurableConsistencyLevel policy = new ConfigurableConsistencyLevel();
        policy.setDefaultReadConsistencyLevel(consistencyLevel);
        policy.setDefaultWriteConsistencyLevel(consistencyLevel);

        // Create Keyspace
        ks = HFactory.createKeyspace(keyspaceName, c, policy);
    }        
    return ks;
}

この構成でうまくいくと言われましたが、何かが足りないのかもしれません。

洞察をありがとう

4

3 に答える 3

1

Hector は、偽の使用不可エラーを返すことが知られています。ネイティブ プロトコルの Java ドライバーには、この問題はありません: https://github.com/datastax/java-driver

于 2013-08-19T22:55:42.833 に答える
0

ノードが 2 つしかなく、データが実際にダウンしているノードに配置される場合、整合性が必要なときに完全な書き込み可用性を達成できない可能性があります。Cassandra はHinted Handoffを使用してそれを達成しますが、QUORUM 一貫性レベルではUnavailableExceptionとにかくスローされます。

ダウンしているノードに属するデータを要求する場合も同様です。

ただし、クラスターのバランスが取れていないようです。あなたのノード111.111.111.111は 100% を所有していて、その後111.111.111.2220% を所有しているように見えます。トークンを見ると、その理由のようです。

ここで初期トークンを設定する方法を確認してください: http://www.datastax.com/docs/0.8/install/cluster_init#token-gen-cassandra

さらに、このような状況が発生する可能性がある場合は、より多くの理由を含む回答を含む別の質問を確認することをお勧めします。

于 2013-08-19T19:33:25.770 に答える