2014-03-06 69 views
5

我試圖設置cassandra的用戶身份驗證,當我遇到以下問題時。試圖登錄到cassandra的控制檯(cqlsh),它拒絕我

首先我已經更新了cassandra.yaml用:

authenticator: PasswordAuthenticator 

然後創建的system_auth密鑰空間用3作爲一個replication_factor:

CREATE KEYSPACE system_auth WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3}; 

然後重新運行卡桑德拉與命令:

bin/cassandra 

然後,所有這一切,我繼續並確保修復IR我的節點(S)與(雖然我不知道如果我明白這是爲什麼重要/必要):

nodetool repair 

即使做所有這些步驟後,卡桑德拉/ JAVA罵我用:

Traceback (most recent call last): 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 2044, in <module> 
    main(*read_options(sys.argv[1:], os.environ)) 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 2030, in main 
    display_float_precision=options.float_precision) 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/cqlsh", line 480, in __init__ 
    cql_version=cqlver, transport=transport) 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/connection.py", line 143, in connect 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/connection.py", line 59, in __init__ 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/thrifteries.py", line 157, in establish_connection 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/cassandra/Cassandra.py", line 465, in login 
    File "/home/tscobb/Documents/BM/apache-cassandra-2.0.5/bin/../lib/cql-internal-only-1.4.1.zip/cql-1.4.1/cql/cassandra/Cassandra.py", line 486, in recv_login 
cql.cassandra.ttypes.AuthenticationException: AuthenticationException(why='org.apache.cassandra.exceptions.UnavailableException: Cannot achieve consistency level QUORUM') 

老實說,在這一點上,我不知道如何繼續。如果任何人有任何想法,將不勝感激。

我在Ubuntu vm中運行cassandra 2.0.5。不知道這是否有幫助。

而且,當我運行:

nodetool status 

下出現:

nodetool status 
Datacenter: datacenter1 
======================= 
Status=Up/Down 
|/ State=Normal/Leaving/Joining/Moving 
-- Address Load Tokens Owns Host ID        Rack 
UN 127.0.0.1 1.57 MB 256  100.0% 37ae1d4c-0df5-43d2-9593-4603ac68c34a rack1 
+1

集羣中有多少個節點? – Aaron

+0

我如何找出這些信息? –

+1

發佈'nodetool status'的輸出。 – Aaron

回答

8
'class' : 'SimpleStrategy', 'replication_factor' : 3 

因爲你只需要在集羣中的一個節點,設定的3複製因子會你的問題。這是一個article that describes replication in Cassandra。你應該快速閱讀。特別是一部分適用於這裏:

當複製因子超過節點的數量,寫入是 拒絕,但只要所期望的一致性 水平可滿足讀取供應。

Cannot achieve consistency level QUORUM 

卡桑德拉計算「仲裁」爲(replication_factor/2)+ 1,所以,如果你有3複製因素,那麼2個節點需要運行你的一致性水平得到滿足。

基本上,將您的複製因子降低到1,並且您應該沒問題。

+1

我對這個有點困惑,在我閱讀的任何地方,我需要在更改授權內容時將我的複製因子設置爲1以上,爲什麼我需要相反?我有點困惑。 –

+0

也對不起,如果這對你來說真的很明顯,但是如何在cassandra.yaml文件中指定複製因子?我所做的改變是將身份驗證器還原爲AllowAllAuthenticator,然後在cqlsh中更改它...我想從你的建議我的方法是有點傻 –

+1

將replication_factor設置爲1以外的原因是,如果持有system_auth密鑰空間的一個節點出現故障,您將無法進入其他節點。 – Aaron