java—如果cassandra的本地数据中心关闭,如何实现仲裁一致性?

dgsult0t  于 2021-06-15  发布在  Cassandra
关注(0)|答案(0)|浏览(232)

我有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。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题