Cassandra NoHost可用错误

问题描述

我刚刚通过Docker创建了两个Cassandra集群。 docker exec -it name nodetool status命令告诉集群,创建一切正常:

everything is ok

然后,我将尝试从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)

最后,当我尝试执行代码时,在终端中出现以下错误

[mistake]

解决方法

您是否正在从主机连接?

在这种情况下,请检查是否将9042容器端口暴露给了本地主机(因为Docker容器在与主机不同的网络上运行)。

例如具有单个节点:

docker run -p 9042:9042 cassandra:latest

由于默认情况下有两个节点都使用容器端口9042,因此您要将第二个节点的端口9042映射到其他对象,例如

docker run -p 9043:9042 cassandra:latest

两个端口都映射到本地主机,并且在python中设置集群时足以指定一个节点,您只需要一个节点即可进行连接,其余的集群将在成功连接后发现:

cluster = Cluster(['127.0.0.1'],port=9042)