Мне нужно передать все узлы клиенту Cassandra? - PullRequest
0 голосов
/ 04 апреля 2019

Я видел, что клиенту Cassandra нужен массив хостов.

Например, Python использует это:

from cassandra.cluster import Cluster

cluster = Cluster(['192.168.0.1', '192.168.0.2'])

Вопрос 1. Зачем мне проходить эти узлы?

Вопрос 2: мне нужно пройти все узлы? Или одного достаточно? (Все узлы имеют информацию обо всех остальных узлах, верно?)

Вопрос 3: Клиент выбирает лучший узел для соединения, зная все узлы? Знает ли клиент, какие данные хранятся в каждом узле?

Вопрос 4: Я начинаю использовать Кассандру впервые и впервые использую Кубернетес. Я развернул кластер Cassandra с 3 узлами Cassandra. Я развернул еще одну машину, и на этой машине я хочу подключиться к Cassandra с помощью клиента Python Cassandra. Нужно ли передавать все IP-адреса Cassandra клиенту Python Cassandra? Или достаточно поставить Cassandra DNS, данный Kubernetes?

Например, когда я запускаю команду dig, я знаю все IP-адреса Cassandra. Я не знаю, достаточно ли передать этот DNS клиенту

# dig cassandra.default.svc.cluster.local

IP-адреса: 10.32.1.19, 10.32.1.24, 10.32.2.24

; <<>> DiG 9.10.3-P4-Debian <<>> cassandra.default.svc.cluster.local
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18340
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;cassandra.default.svc.cluster.local. IN    A

;; ANSWER SECTION:
cassandra.default.svc.cluster.local. 30 IN A 10.32.1.19
cassandra.default.svc.cluster.local. 30 IN A 10.32.1.24
cassandra.default.svc.cluster.local. 30 IN A 10.32.2.24

;; Query time: 2 msec
;; SERVER: 10.35.240.10#53(10.35.240.10)
;; WHEN: Thu Apr 04 16:08:06 UTC 2019
;; MSG SIZE  rcvd: 125

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

from cassandra.cluster import Cluster

cluster = Cluster(['cassandra.default.svc.cluster.local'])

1 Ответ

2 голосов
/ 04 апреля 2019

Вопрос 1: Зачем мне проходить эти узлы?

Чтобы установить первоначальный контакт с кластером.Если соединение установлено, то эти контактные точки бесполезны.

Вопрос 2. Нужно ли пропускать все узлы?Или одного достаточно?(Все узлы имеют информацию обо всех других узлах, верно?)

Вы можете передать только один узел в качестве точки контакта, но проблема в том, что если этот узел не работает, когда драйвер пытается связаться с ним, онне сможет подключиться к кластеру.Поэтому, если вы предоставите другую контактную точку, она попытается соединиться с ней, даже если первая не удалась.Было бы лучше, если бы вы использовали свой начальный список Cassandra в качестве контактных точек.

Вопрос 3: Клиент выбирает лучший узел для соединения, зная все узлы?Знает ли клиент, какие данные хранятся в каждом узле?

Как только начальное соединение установлено, драйвер клиента будет иметь метаданные о кластере.Клиент будет знать, какие данные хранятся в каждом узле, а также какой узел можно запрашивать с меньшей задержкой.Вы можете настроить все это с помощью политик балансировки нагрузки

См .: https://docs.datastax.com/en/developer/python-driver/3.10/api/cassandra/policies/

Вопрос 4: Я начинаю использовать Кассандру в первый раз, и я использую kubernetes дляпервый раз.Я развернул кластер кассандры с 3 узлами кассандры.Я развернул еще одну машину, и на этой машине я хочу подключиться к cassandra с помощью клиента Python Cassandra.Нужно ли передавать все IP-адреса cassandra клиенту Python Cassandra?Или достаточно поставить DNS-кассандру, заданную Kubernetes?

Если имя хоста может быть разрешено, то всегда лучше использовать DNS вместо IP.Я не вижу никаких недостатков.

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