Cassandra LOCAL_QUORUM ожидает ответов от удаленного центра обработки данных - PullRequest
1 голос
/ 04 марта 2020

У нас есть 2 центра обработки данных (один в ЕС и один в США) с 4 узлами, каждый из которых развернут в AWS. Узлы разделены на 3 стойки (зоны доступности) каждый. В кластере у нас есть тестирование пространства ключей с репликацией: NetworkTopologyStrategy, eu-west: 3, us-east: 3 В пространстве ключей у нас есть таблица mytable, которая имеет только одну строку 'id' text

Теперь, мы делали некоторые тесты на производительность базы данных. В CQL SH с уровнем согласованности LOCAL_QUORUM мы выполняли некоторые вставки с TRACING ON, и мы заметили, что запросы не работают так, как мы ожидали.

Из данных трассировки мы обнаружили, что узел-координатор как и ожидалось, ударил 2 других локальных узла, а также отправлял запрос на один из удаленных узлов центра обработки данных. Теперь проблема заключалась в том, что координатор ждал не только локальных узлов (которые быстро завершили работу), но и удаленных узлов.

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

Примечания: - Это не происходит с DSE, но мы понимаем, что нам не нужно платить сумасшедшие деньги, чтобы LOCAL_QUORUM работал, как ожидается

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Для функциональных тестов и тестов производительности было бы лучше использовать драйвер вместо CQL SH, поскольку в большинстве случаев это будет способ взаимодействия с базой данных.

Для этого случая , вы можете использовать политику D C -wareware, такую ​​как

Cluster cluster = Cluster.builder()
    .addContactPoint("127.0.0.1")
    .withLoadBalancingPolicy(
            DCAwareRoundRobinPolicy.builder()
                    .withLocalDc("myLocalDC")
                    .build()
    ).build();

Это модифицировано из примера здесь , где удалены все пункты, которые позволяют взаимодействовать с удаленными центрами обработки данных, Ваша цель - изолировать звонки на местные номера.

1 голос
/ 04 марта 2020

Существует высокая вероятность, что вы нажмете CASSANDRA-9753 , когда ненулевое dclocal_read_repair_chance вызовет запрос к удаленному D C. Вам нужно проверить трассировку для подсказки о срабатывании восстановления чтения для вашего запроса. Если вы действительно получили его, то можете установить dclocal_read_repair_chance в 0 - этот параметр все равно не рекомендуется ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...