Сеть — Должен ли я беспокоиться о выборе распределения нагрузки драйвера Cassandra C ++?

У меня есть небольшой кластер Cassandra из 4 узлов, на котором работает Cassandra 3.9.

Я передаю 4 IP-адреса connect() функция и когда я проверяю соединения с netstat -a4n | grep 9042Я вижу, что они все связаны. Обратите внимание, что я передаю 1 IP или 4 на connect()результат будет тот же, когда он полностью подключен, включая двойное подключение к узлу 10.0.1.1 … (10.0.1.1 и 10.0.1.3 — начальные числа, но почему-то только 10.0.1.1 имеет двойное подключение, так что я не слишком уверенный, почему это происходит с этим, я попытался перетасовать список IP-адресов, используемых для подключения, и снова, в конце концов, это не имело никакого значения.)

tcp        0      0 10.0.0.1:45012      10.0.1.3:9042      ESTABLISHED
tcp        0      0 10.0.0.1:48400      10.0.1.4:9042      ESTABLISHED
tcp        0      0 10.0.0.1:51514      10.0.1.2:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56460      10.0.1.1:9042      ESTABLISHED
tcp        0      0 10.0.0.1:56452      10.0.1.1:9042      ESTABLISHED

Когда я смотрю на вывод nodetool statusэто выглядит довольно хорошо:

Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address   Load       Tokens       Owns (effective)  Host ID  Rack
UN  10.0.1.1  7.92 MiB   256          76.1%             (id)     rack1
UN  10.0.1.4  12.26 MiB  256          77.7%             (id)     rack1
UN  10.0.1.3  10.08 MiB  256          72.2%             (id)     rack1
UN  10.0.1.2  8.77 MiB   256          74.0%             (id)     rack1

(Примечание: я удалил ID, они здесь не нужны).

Тем не менее, с точки зрения сети, я вижу огромное несоответствие, когда смотрю на объем данных, передаваемых на эти машины. Я использую iptables -L -nvx команда, и к моему удивлению я вижу, что я отправляю примерно в 3 раза больше пакетов и почти в 20 раз больше данных на первый узел Cassandra:

6856 13581751 RETURN     all  --  eth1   *  10.0.1.1    0.0.0.0/0
2736   816810 RETURN     all  --  eth1   *  10.0.1.2    0.0.0.0/0
2831   807426 RETURN     all  --  eth1   *  10.0.1.3    0.0.0.0/0
2745   806023 RETURN     all  --  eth1   *  10.0.1.4    0.0.0.0/0

(6,856 / 2736 = 2,51 и 13,581,751 / 806,023 = 16,85)

Я полагаю, что в некотором смысле это не имеет большого значения, если узлы все равно не заняты, но я все еще задаюсь вопросом, почему я вижу такое огромное несоответствие? Почему не все 4 соединения участвуют на одном уровне?

1

Решение

Драйверы будут использовать контактные точки в качестве начальной точки подключения для настройки пула подключений. После этого пул создается на основе топологии схемы, локальной политики балансировки и параметров пула. Для справки некоторые полезные документы здесь (извините, если вы уже видели их):

http://datastax.github.io/cpp-driver/topics/

http://datastax.github.io/cpp-driver/topics/configuration/

Дополнительным трафиком вполне может быть управляющее соединение, используемое драйвером, которое обновляет топологию схемы, чтобы помочь способу работы драйвера:

http://datastax.github.io/cpp-driver/topics/basics/schema_metadata/

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]