我正试图从我的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
。
关于如何使这项工作的任何想法?
答案 0 :(得分:1)
我相信还有outstanding issue regarding how the cluster client handles node failures。我在riak邮件列表上看到推荐的一种解决方法是安装例如HAProxy on the application server并处理故障转移。