作爲生產問題的一部分,我們希望將生產1.0.9集羣升級到1.2.1/2。Cassandra 1.0.9集羣的滾動升級到1.2.1
雖然在我們的開發環境中測試升級,我發現了以下情況例外,而這樣做使用CLI一個簡單的列表操作升級的集羣節點之一的:(只是一個節點出3升級)
[[email protected]] list testCF;
Using default limit of 100
Using default column limit of 100
null
TimedOutException()
at org.apache.cassandra.thrift.Cassandra$get_range_slices_result.read(Cassandra.java:12932)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_get_range_slices(Cassandra.java:734)
at org.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:718)
at org.apache.cassandra.cli.CliClient.executeList(CliClient.java:1485)
at org.apache.cassandra.cli.CliClient.executeCLIStatement(CliClient.java:272)
at org.apache.cassandra.cli.CliMain.processStatementInteractive(CliMain.java:210)
at org.apache.cassandra.cli.CliMain.main(CliMain.java:337)
我得到運行非升級的節點上同一列表的操作(1.0.9)相同的異常:
[[email protected]] list testCF;
Using default limit of 100
null
TimedOutException()
at org.apache.cassandra.thrift.Cassandra$get_range_slices_result.read(Cassandra.java:12830)
at org.apache.cassandra.thrift.Cassandra$Client.recv_get_range_slices(Cassandra.java:762)
at org.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:734)
at org.apache.cassandra.cli.CliClient.executeList(CliClient.java:1390)
at org.apache.cassandra.cli.CliClient.executeCLIStatement(CliClient.java:269)
at org.apache.cassandra.cli.CliMain.processStatementInteractive(CliMain.java:220)
at org.apache.cassandra.cli.CliMain.main(CliMain.java:348)
當嘗試另一個1.0.9節點我沒有得到任何錯誤,在同一列表的操作,我假設此節點擁有唯一的副本:
[[email protected]] list testCF;
Using default limit of 100
-------------------
RowKey: 0a
=> (column=0a, value=0a, timestamp=1362642828623000)
1 Row Returned.
Elapsed time: 11 msec(s).
我正在使用的testCF只有一個鍵和值,超時異常 是一致的。 我使用的複製因子爲1,但所有三個節點似乎都已啓動,並且 已同步。
它似乎是最簡單的升級版本,可以從1.0.3開始,從 1.2.1/2開始,它仍然無法使用範圍(?)掃描。 從cql客戶端使用select *查詢時發生同樣的錯誤。 我沒有做任何特殊的測試,所以我猜這個問題應該發生在 任何從1.0.9升級,這將是很容易重現。
nodetool環顯示所有節點都在運行(所有節點上運行):
-bash-4.1$ nodetool -h localhost ring
Datacenter: US
==========
Replicas: 1
Address Rack Status State Load Owns Token
113427455640312821154458202477256070485
33.33.33.2 RAC1 Up Normal 39.31 KB 33.33% 0
33.33.33.3 RAC1 Up Normal 63.39 KB 33.33% 567137278201564105772291
33.33.33.4 RAC1 Up Normal 63.39 KB 33.33% 113427455640312821154458202477256070485
一旦我完成所有節點上的升級,集羣恢復到正常的。
這是爲什麼? 它不應該那樣?對?根據我的理解,Cassandra應該能夠支持像這樣的滾動升級,對吧? 如果有人遇到這個問題,或者認爲他知道問題可能是什麼, 請指教, 或。
你在cassandra日誌中遇到錯誤嗎?通常,一致的超時異常意味着存在異常。日誌通常位於/var/log/cassandra/system.log中。 – Richard 2013-03-12 15:45:38