Python无效列表节点cassandra群集

Python无效列表节点cassandra群集,python,cassandra,Python,Cassandra,我有2个dc和3个节点: DC1:cas01.dc01.net172.16.3.15和cas02.dc01.net172.16.3.16 例如,DC2:cas01.dc02.net172.16.9.3 运行以下脚本: cluster = Cluster(['cas01.dc01.net', 'cas02.dc01.net', 'cas01.dc02.net'],auth_provider=auth,protocol_version=3, load_balancing_policy=DCAwa

我有2个dc和3个节点: DC1:cas01.dc01.net172.16.3.15和cas02.dc01.net172.16.3.16 例如,DC2:cas01.dc02.net172.16.9.3

运行以下脚本:

  cluster = Cluster(['cas01.dc01.net', 'cas02.dc01.net', 'cas01.dc02.net'],auth_provider=auth,protocol_version=3, load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='DC1'))
session = cluster.connect('test')

print '_dc_live_hosts:'
for k, v in cluster.load_balancing_policy._dc_live_hosts.items():
    print "DC name: %s; Node address: %s" % (k, [node.address for node in v])

print 'Cluster metadata:'
for host in cluster.metadata.all_hosts():
    print 'Datacenter: %s; Host: %s; Rack: %s' % (host.datacenter, host.address, host.rack)
并收到回复:

_dc_live_hosts:
DC name: DC1; Node address: ['cas01.dc01.net', 'cas01.dc02.net', 'cas02.dc01.net', '172.16.3.15']
DC name: DC2; Node address: ['172.16.9.3']
Cluster metadata:
Datacenter: None; Host: cas01.dc01.net; Rack: None
Datacenter: None; Host: cas01.dc02.net; Rack: None
Datacenter: DC1; Host: 172.16.3.15; Rack: Rack1
Datacenter: DC2; Host: 172.16.9.3; Rack: Rack1
Datacenter: DC1; Host: cas02.dc01.net; Rack: Rack1
为什么要复制节点? 如果指定IP地址列表:

cluster = Cluster(['172.16.3.15', '172.16.3.16', '172.16.9.3'],auth_provider=auth,protocol_version=3, load_balancing_policy=DCAwareRoundRobinPolicy(local_dc='DC1'))
...
节点列表是正确的:

_dc_live_hosts:
DC name: DС1; Node address: ['172.16.3.16', '172.16.3.15']
DC name: DС2; Node address: ['172.16.9.3']
Cluster metadata:
Datacenter: DС1; Host: 172.16.3.16; Rack: Rack1
Datacenter: DС1; Host: 172.16.3.15; Rack: Rack1
Datacenter: DС2; Host: 172.16.9.3; Rack: Rack1

请帮助。

我不确定这是唯一的问题,但:

所有节点必须具有相同的种子 种子列表必须至少包括每个数据中心的一个节点 试试这个:

    - seeds : "172.16.3.16, 172.16.9.3"

简要描述驱动程序的工作原理,以澄清您的问题:

传递给集群构造函数的节点列表是初始联系人节点

驱动程序选择其中一个来创建控制连接。传递多个节点是一种很好的做法,这样当其中一个节点无法立即访问时,驱动程序可以尝试不同的连接

使用在步骤1中建立的控制连接,驱动程序从系统表中检索有关集群拓扑的信息。它使用这些详细信息来填充集群元数据对象

系统表中的信息根据广播地址、rpc地址等反映每个节点的配置


你的种子是什么?你用什么飞贼?您可以在cassandra.yaml文件中找到答案。如果它是PropertyFileSnitch,您是否可以包含cassandra-topology.properties的内容?节点cas01.dc01.net:-种子:cas01.dc01.net,cas02.dc01.net节点cas02.dc01.net:-种子:cas01.dc01.net,cas01.dc02.net节点cas01.dc02.net:-种子:cas01.dc02.net,cas01.dc01.net端点\u snitch:PropertyFileSnitch拓扑:cas01.dc01.net=DC1:Rack1 cas02.dc01.net=DC1:Rack1 cas01.dc02.net=DC2:Rack1