将Cassandra 1.0.9集群升级到1.2.1的滚动升级

3
作为我们生产问题的一部分,我们想要升级我们的生产1.0.9集群到1.2.1/2。在我们的开发环境中进行升级测试时,在升级的一个集群节点上使用cli执行简单的列表操作时,我遇到了以下异常情况:(只有3个节点中的一个被升级)
[default@testKS] 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)上运行相同的列表操作时,遇到了相同的异常:

[default@testKS] 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节点上尝试相同的列表操作时,我没有收到任何错误提示,我认为这个节点是唯一的副本:

[default@testKS] 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.9升级到1.2.1/2最简单的升级方式,但仍无法使用范围扫描。当使用CQL客户端的select *查询时,也会出现相同的错误。我没有进行任何特殊测试,所以我猜想这个问题应该会在从1.0.9升级到其他版本时出现,并且很容易重现。
nodetool ring显示所有节点都处于运行状态(在所有节点上运行)。
-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% 56713727820156410577229101238628035242
33.33.33.4 RAC1 Up Normal 63.39 KB 33.33% 113427455640312821154458202477256070485

当我完成所有节点的升级后,群集恢复正常。

为什么会这样? 不应该是这样的,对吧? 按照我的理解,Cassandra应该能够支持这样的滚动升级,对吧? 如果有人遇到了这个问题,或者认为自己知道问题所在, 请给予建议, 谢谢。


你在cassandra日志中是否遇到错误?通常,持续的超时异常意味着存在异常情况。通常,日志位于/var/log/cassandra/system.log。 - Richard
1个回答

0

滚动升级是可行的,我经常这样做。您应该避免跳过2个主要版本1.0-1.2。我知道它被归类为点发布,但很多东西都改变了。

您应该进行滚动升级到1.1.X,然后在所有节点上运行upgradesstables,然后在所有节点上运行repair。

然后滚动升级到1.2.X,然后在所有节点上运行upgradesstables,然后在所有节点上运行repair。

因此,支持滚动更新,但您应该以合理的方式进行操作以降低风险。您的3个节点集群不应该花费太长时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接