2011-05-25 114 views
3

我想學習Cassandra並設置了4節點Cassandra集羣。我使用Hector編寫了一個Java客戶端,它目前連接到集羣中的硬編碼單節點。理想情況下,我希望我的客戶端連接到「集羣」,而不是特定的節點....因此,如果任何4個節點都關閉,客戶端仍然會連接到某個東西。從客戶端應用程序的角度來看,這是如何工作的?我似乎無法找到一個好的解釋。如何將基於Java的Cassandra客戶端連接到Cassandra集羣,而不是特定的節點?

我的赫克託連接字符串目前,我需要在這裏指定一個特定的節點:

Cluster c = getOrCreateCluster("Test Cluster", cassandraNode1:9160); 

我卡桑德拉節點都配置了我的rpc_address:0.0.0.0

回答

5

如果傳遞一個CassandraHostConfiguratorgetOrCreateCluster() ,您可以指定多個節點作爲逗號分隔的字符串:

public CassandraHostConfigurator(String hosts) { 
    this.hosts = hosts; 
    } 

    ... 

    String[] hostVals = hosts.split(","); 

    CassandraHost[] cassandraHosts = new CassandraHost[hostVals.length]; 
    ... 
3

您也可以切換CassandraHostConfig urator#setAutoDiscoverHosts和#setUseAutoDiscoverAtStartup使用您的初始主機自動添加通過Thrift API方法describe_keyspaces找到的所有主機。這使配置更容易一點,因爲您只需引用單個主機。

保持啓用自動發現(默認情況下處於關閉狀態)使得擴展更容易一點,因爲新節點將在發現時添加。添加節點的功能也可以通過JMX使用,因此添加節點可以隨時手動完成,但是您必須在每個Hector實例中執行一次。

+0

«你只需要引用一個主機» - 我認爲這是主要問題之一。如果該主機在您嘗試連接羣集時關閉,則根本無法連接。 – 2015-10-11 20:10:56