3

クラスター内のマシンの1つがダウンした場合に、他のマシンの使用を開始するように、JavaアプリからRiakを使用しようとしています。私はC#でCorrugated Ironドライバーを使用してこれを行うことができましたが、Javaで機能させることができないようです。

PBClusterConfigで複数のRiakマシンを指定していること、つまり、クライアントがクラスター内のすべてのマシンを「認識している」ことを確認しました。

私はこのように設定しましたPBClusterConfig

BClusterConfig config = new PBClusterConfig(maxConnections);
for(RiakServerConfig server : servers) {
    PBClientConfig.Builder builder = new PBClientConfig.Builder();
    PBClientConfig serverConfig = builder
        .withHost(server.getHostname())
        .withPort(server.getPort())
        .build();

    config.addClient(serverConfig);
}

次に、私の実際の操作(読み取りと書き込みのみ)は次のようになります。

client
    .createBucket(bucket)
    .withRetrier(DefaultRetrier.attempts(3))
    .execute()
    .store(key, value)
    .withRetrier(DefaultRetrier.attempts(3))
    .execute();

riakクラスターに問題がない場合、このコードは機能しますが、マシンの1つがダウンすると、数秒後に次のエラーが発生しますcom.basho.riak.client.RiakRetryFailedException: com.basho.riak.pbc.AcquireConnectionTimeoutException: timeout acquiring connection permit from pool

これを機能させる方法について何かアイデアはありますか?

4

1 に答える 1

1

クラスター クライアントがノード障害を処理する方法に関して、まだ未解決の問題があると思います。riak メーリング リストで推奨されている 1 つの回避策は、アプリケーション サーバーに HAProxyなどをインストールし、これでフェイルオーバーを処理することです。

于 2012-12-14T13:10:35.207 に答える