Как добиться согласованности кворума, если в Кассандре не работает локальный центр обработки данных? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть 3 постоянных тока с 3 узлами каждый, и коэффициент репликации равен 3.

позволяет сказать, что постоянные значения будут: x - 3, y - 3, z - 3, так что всего 9 коэффициентов репликации.для достижения кворума в любой заданный момент времени 5 должно быть вверх.

x - мой локальный центр обработки данных, и, скажем, x полностью отключен, поэтому в основном 3 узла не работают.

в соответствии с определением согласованности кворумаесли y и z повышаются, он становится равным 3 + 3 = 6, поэтому кворум должен быть достигнут.

Мои настройки для подключения к 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.Он никогда не пытается подключиться к удаленному хосту для достижения согласованности кворума.

какие параметры мне не хватает?

Я не хочу использовать .allowRemoteDCsForLocalConsistencyLevel (), поскольку у меня есть откат от Local_quorumв кворум, поэтому, если я использую .allowRemoteDCsForLocalConsistencyLevel (), мой local_quorum автоматически вернется к удаленному постоянному току.

...