DCAwareRoundRobinPolicy Vs RoundRobinPolicy - PullRequest
0 голосов
/ 29 октября 2018

Я запутался между DCAwareRoundRobinPolicy и RoundRobinPolicy

Согласно документации, DCAwareRoundRobinPolicy сначала связывается с узлами с локального DC, а затем с удаленного DC.

Если я не установил withUsedHostsPerRemoteDc & allowRemoteDCsForLocalConsistencyLevel. Будут ли все клиентские приложения java все еще отправляться на удаленный DC в случае отказа ??

Я сейчас использую код ниже:

    DCAwareRoundRobinPolicy.builder().withLocalDc(cassandraConfig.getLocalDC())
.withUsedHostsPerRemoteDc(cassandraConfig.getUsedHostsPerRemoteDc())
.allowRemoteDCsForLocalConsistencyLevel();

У меня проблема при добавлении новых контроллеров домена в моем текущем производственном кластере. Из-за приведенного выше кода я вижу, что чтение / запись запускается также на удаленном DC, который я просто добавляю. Хотя для новых контроллеров домена для них не установлен фактор репликации. Тем не менее я мог видеть этот трафик. Поскольку восстановление новых узлов займет несколько часов, я не мог позволить всем приложениям добраться до новых узлов. Наконец, мне нужно списать новые узлы, чтобы временно остановить это поведение.

После удаления withUsedHostsPerRemoteDc & allowRemoteDCsForLocalConsistencyLevel все выглядит хорошо.

Также в документации Datastax написано https://docs.datastax.com/en/latest-java-driver-api/com/datastax/driver/core/policies/DCAwareRoundRobinPolicy.Builder.html#allowRemoteDCsForLocalConsistencyLevel--

Однако это нецелесообразно делать почти во всех случаях, так как это потенциально нарушает гарантии согласованности

Если выше верно, тогда какая польза от DCAwareRoundRobinPolicy, почему RoundRobinPolicy не был хорош ???

1 Ответ

0 голосов
/ 29 октября 2018

По умолчанию DCAwareRoundRobinPolicy не перейдет на удаленный DC, пока не будут установлены указанные вами параметры. Но это произойдет только для уровней согласованности LOCAL_ONE & LOCAL_QUORUM. Если вы используете уровни согласованности, отличные от LOCAL_, то запросы могут также отправляться на удаленный контроллер домена. Но это должно произойти только для QUORUM, EACH_QUORUM или когда:

эта политика гарантирует, что ни один узел в удаленном центре обработки данных не будет запрошен, если не будет достигнут узел в локальном центре обработки данных.

Хотя это очень странно видеть, потому что вы сказали:

Хотя для новых контроллеров домена для них не установлен фактор репликации.

Я бы порекомендовал проверить через JMX, действительно ли он достигает ваших таблиц в удаленном DC?

...