2012-06-06 65 views
2

我已經在1個節點上設置了Cassandra並用數據充斥它。然後我配置了第二個節點,它的初始標記,種子等,並啓動了Cassandra。 現在,當我在1節點集羣上運行我的Hector代碼時,它給了我所有的數據。但是當我在2節點集羣上運行相同的代碼時,我獲得的數據更少(列和行數量更少)。我不明白我做錯了什麼。 我甚至嘗試使用CassandraHostConfigurator添加一串主機,但仍然沒有獲取整個數據。 我也嘗試運行nodetool修復,但仍面臨着同樣的問題Cassandra和Hector問題

請幫我

回答

1

當您添加節點到羣集,你應該開始 auto_bootstrap: true該節點在cassandra.yaml使集羣中的其他節點(在您的情況下是唯一節點)將流式傳輸數據新節點(根據令牌)。

編輯對於Casssandra-1.0開始就沒有選擇,因爲在這種情況下,引導我們不得不開始計算它會開始流data.once流完成運行nodetool move <new_token>新的令牌第二個節點。欲瞭解更多信息,請參閱Adding nodes to cluster

如果未完成此操作,則第二個節點將不會擁有根據標記應保持的數據。當你嘗試從Cassandra中讀取數據時,它可能會根據標記查找新添加的節點上的數據,但由於沒有數據,因此無法獲得正確的結果。

+0

但在卡桑德拉1.1.0沒有auto_bootstrap的選項。那麼我在哪裏指定這個選項? – user1439690

0
  • 請查看所有的防火牆,iptables的配置是接受節點進行通信,另一個

將節點添加到環後,使用nodetool ring查看數據負載例如我的集羣有3個節點的結果將是類似:

192.168.23.84 datacenter1 RACK1以上普通37.52 GB 33.33%
192.168.23.85 datacenter1 RACK1以上普通37.5 GB 33.33%
個192.168.23.86 datacenter1 RACK1以上普通37.5 GB 33.33%

如果類似的是,當u使用威嚇,使用此代碼來檢查赫克託請求到服務器:

MutationResult result = mutator.execute(); 
logger.info(" host:" + result.getHostUsed().getHost()); 

嘗試寫了許多重新檢查目標主機的時間是包含所有主機。

我用這個CassandraHostConfigurator許多主機添加到集羣時使用赫克託 例如:

CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(
       "192.168.23.84:9160,192.168.23.85:9160,192.168.23.86:9160"); 
cluster = HFactory.getOrCreateCluster("testcluster", cassandraHostConfigurator);