У меня есть 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 автоматически вернется к удаленному постоянному току.