2015-10-20 78 views
0

我有2 dc和3節點:
DC1:cas01.dc01.net(172.16.3.15)和cas02.dc01.net(172.16.3.16)
DC2:cas01.dc02。例如淨(172.16.9.3)。Python的無效列表節點卡桑德拉集羣

運行下面的腳本:

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 

請幫助。

+0

你有什麼種子?你用什麼傳聞?你可以在你的cassandra.yaml文件中找到答案。如果它是PropertyFileSnitch,是否可以包含cassandra-topology.properties的內容? – DineMartine

+0

節點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」endpoint_snitch:PropertyFileSnitch 拓撲:cas01.dc01.net = DC1:Rack1 cas02.dc01.net = DC1:Rack1 cas01.dc02。 net = DC2:Rack1 –

回答

0

我不知道這是唯一的問題,但:

  • 所有節點都必須具有相同的種子
  • 種子名單必須在每個數據中心的至少一個節點

試試這個:

- seeds : "172.16.3.16, 172.16.9.3" 
+0

它的bug python驅動https://datastax-oss.atlassian.net/browse/PYTHON-10 –

0

驅動程序如何工作的簡短說明將闡明您的q題目了:

  1. 了在給Cluster構造通過節點列表是初始接觸節點

    駕駛員選擇的這些以創建控制連接的一個。如果其中一個節點不能立即訪問,那麼傳遞多個節點是一個很好的做法,因此驅動程序可以嘗試不同的連接。

  2. 使用在步驟1中建立的控制連接,驅動程序從system表中檢索有關集羣拓撲的信息。它使用這些詳細信息來填充羣集元數據對象。

    system表(特別是peers表)的信息反映每個節點的配置(基於broadcast_addressrpc_address等)