2017-07-29 79 views
1

我在兩個節點上運行Cassandra 3.11。這是關鍵字空間:在cqlsh中Cassandra NoHostsAvailable錯誤

CREATE KEYSPACE backend_platform_dev 
WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true; 

我有兩個節點,運行在我機器上的虛擬機上。當兩個節點都啓動時,一切正常。但是當我取下一個節點時,我的應用程序(elixir)開始拋出錯誤,以及cqlsh(NoHostAvailableInvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table test")。

我搜索了錯誤,每個人都有爲單個節點設置NetworkTopologyStrategy的問題,但這不是我的情況。

這裏發生了什麼?

編輯:這是駕駛員給出錯誤:

[不可]無法實現一致性水平之一:%{活着:0, 一致性::一,需要:1}

我確定有一個節點還活着,一個活着。從我的本地系統使用cqlsh連接到Cassandra節點證實了這一點。我現在更加困惑。

+0

您的密鑰空間中是否存在表「test」? –

+0

@AshrafulIslam'測試'是一個假名。是的,它肯定存在,因爲我可以在兩個節點都運行時運行相同的查詢。而且,'cqlsh'能夠自動完成我的表名,所以我不會寫錯。 – vfsoraki

+0

什麼是系統密鑰空間的副本放置策略類? –

回答

1

問題在於「replication_factor」被配置爲1.因此只有一個數據副本。假設你正在存儲10條記錄,那麼每個節點都應該獲得它的記錄份額,並且爲了簡單起見,前5個記錄存儲在node1中,後5個記錄存儲在node2中。現在,當您取下node1並查找第一條記錄時,您將最終得到所報告的驅動程序錯誤,因爲沒有可用的節點來提供該記錄。

  • 將replication_factor更改爲2,因爲這裏只有兩個節點的情況。對於PROD,推薦RF = 3。
  • 運行NODETOOL REPAIR,使該表中的記錄成爲兩個副本。任何未來插入將自動成爲兩個副本,但這是爲了修復現有記錄。
  • READ查詢的一致性級別默認爲1,即使在節點故障的情況下也會成功。

SimleStrategy對Single DataCenter方案應該可以正常工作。推薦的PROD配置仍然是NetworkTopology Strategy。

+0

我明白了。感謝您的解釋。 – vfsoraki