我如何使用Java API来促进故障转移?

时间:2012-12-03 14:33:26

标签: java api riak

我正试图从我的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集群很好时,这段代码可以工作,但当其中一台机器出现故障时,我会在几秒钟后收到以下错误:com.basho.riak.client.RiakRetryFailedException: com.basho.riak.pbc.AcquireConnectionTimeoutException: timeout acquiring connection permit from pool

关于如何使这项工作的任何想法?

1 个答案:

答案 0 :(得分:1)

我相信还有outstanding issue regarding how the cluster client handles node failures。我在riak邮件列表上看到推荐的一种解决方法是安装例如HAProxy on the application server并处理故障转移。