我有3个dc,每个dc有3个节点,复制因子是3。
假设dc为:x-3,y-3,z-3,所以总共有9个复制因子。为了在任何给定的时间点达到法定人数,5人应该到了。
x是我的本地数据中心,假设x完全关闭,所以基本上有3个节点关闭。
根据quorum一致性定义,如果y和z向上,它将变成3+3=6复制因子,因此应该实现quorum。
连接到Cassandra的设置如下:
DCAwareRoundRobinPolicy dcAwareRoundRobinPolicy = DCAwareRoundRobinPolicy
.builder()
.withLocalDc("x")
.withUsedHostsPerRemoteDc(3)
.build();
Cluster cluster = Cluster.builder()
.withSocketOptions(getOptions()).addContactPoints(getCassandraHost())
.withCredentials("casssandra","cassandra")
.withQueryOptions(new QueryOptions().setConsistencyLevel(ConsistencyLevel.QUORUM))
.withLoadBalancingPolicy(new TokenAwarePolicy(dcAwareRoundRobinPolicy))
.build();
我得到没有主机可用的例外与主机的x被提到。它从不尝试连接到远程主机以实现仲裁一致性。
我缺少什么设置?
我不想使用.allowremotedcsforLocalConsistenceLevel(),因为我有一个从本地\u仲裁到仲裁的回退,所以如果使用.allowremotedcsforLocalConsistenceLevel(),我的本地\u仲裁将自动回退到远程dc。
暂无答案!
目前还没有任何答案,快来回答吧!