3

我正在尝试从我的 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

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

4

1 回答 1

1

我相信关于集群客户端如何处理节点故障仍然存在一个悬而未决的问题。我在 riak 邮件列表中看到推荐的一种解决方法是在应用程序服务器上安装例如 HAProxy 并让其处理故障转移。

于 2012-12-14T13:10:35.207 回答