Cassandra NoHostAvailable ошибка

Я только что создал два кластера Cassandra через Docker. Команда docker exec -it name nodetool status сообщает, что кластеры созданы, все в порядке:

все в порядке

Затем я попытаюсь ВСТАВИТЬ данные в таблицу из драйвера Python.

Вот мой код:

from cassandra.cluster import Cluster
from faker import Faker
import time
fake = Faker()
num = 0
cluster = Cluster(['172.17.0.2', '172.17.0.3'], port=9042)
session = cluster.connect()
session.execute('USE keys')
print("Start create data")
start = time.time()
for i in range(10000):
    time.sleep(0.001)
    num+=1
    session.execute(
        """
        INSERT INTO tt (id, title) VALUES (%(id)s, %(title)s)
        """,
        {'id': num, 'title': fake.address()}
    )
end = time.time()
print("Total time: ", end - start)

И, наконец, когда я пытаюсь выполнить код, я выдал следующую ошибку в терминале:

[ошибка]


person GecKo    schedule 13.10.2020    source источник


Ответы (1)


Вы подключаетесь с хост-компьютера?

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

например с одним узлом:

docker run -p 9042:9042 cassandra:latest

Поскольку у вас есть два узла, которые по умолчанию используют контейнерный порт 9042, вы хотите сопоставить порт 9042 для второго узла с чем-то другим, например

docker run -p 9043:9042 cassandra:latest

Оба порта маппятся на localhost, и достаточно указать одну ноду при настройке кластера на питоне, для подключения нужна только одна нода, остальная часть кластера обнаруживается при успешном подключении:

cluster = Cluster(['127.0.0.1'], port=9042)
person bswynn    schedule 13.10.2020