2016-09-28 149 views
5

我们计划升级目前运行在2.0.9到2.2.6的群集。根据文档和一些博客,人们升级cassandra inplace即从环中删除一个节点,将其升级并重新添加回去。我们怀疑遵循这种方法,因为事情可能会出错(这是一个拥有大量QPS的高事务数据库)。Cassandra版本从2.0.9升级到2.2

因此,我们打算为要升级cassandra版本(2.2)的集群添加一个新的数据中心。所以安装应该有两个数据中心一个旧(2.0.9)和其他新(2.2.6)

这个数据中心只是一个备份。当数据中心变得稳定时,我们将改变客户端与该数据中心的连接,如果它运行良好,那么我们将与该数据中心一起关闭旧数据中心,否则我们可以退回到旧数据中心并调试出错的地方。

这个过程是否可行,或者我们应该到位升级?

跨数据中心可以存在两个cassandra版本(2.0和2.2)。

这种方法是否存在垮台?

回答

3

可以2个卡桑德拉版本(2.0和2.2)跨数据中心存在。

不,他们不能。

这个过程是否可行,或者我们应该到位升级?

您需要执行就地升级。这是因为Cassandra无法跨版本传输。执行就地升级允许新版本从旧版本读取SSTables。

是否有这种方法的垮台?

正如我所提到的,您将无法将数据从现有节点传输到新的2.2 DC。所以引导,重建和修复都是不可能的。

你有的另一个问题是,2.2.6与2.0.9不是“升级兼容”。从这个DataStax文档:Apache Cassandra versions requiring intermediate upgrades ...

阿帕奇卡桑德拉2.2.x的限制

  • 从卡桑德拉2.1版本升级后或等于2.1.9直接卡桑德拉2.2.x中
  • 不支持从Cassandra 2.0及更早版本直接升级。

你会第一必须升级整个群集到Cassandra 2.1。一旦升级到2.1完成,然后您可以将您的节点升级到2.2.6。

+0

Hi @Aaron, 谢谢。它非常奇怪为什么两个cassandra版本不能跨数据中心存在,但可以存在于同一个数据中心(Cluster)中。这有什么特别的理由吗?如果cassandra无法在不同版本的数据中心之间传输数据..我可以先在新数据中心中拥有相同版本,然后在引导,重建和修复后,我在新数据中心升级版本,升级后更改客户端连接?这是可行的吗? ......即使在这种方法中,我也知道两个数据中心有两个不同的版本。这会工作吗? 谢谢。 – johri21

+1

@ johri21是的。 *该*应该起作用。 – Aaron

1

Cassandra是一个无主分布式数据存储。对于卡桑德拉来说,没有像“备份”数据中心那样的东西。如果您要添加另一个运行2.2的DC,则可以选择混合版本的集群设置,就像单独升级节点一样。我看到的唯一优势是性能问题应该由于添加节点而不太可能。但是,添加另一个DC会使您的群集设置更加复杂,并可能会引入一些您还不知道的问题,但与运行不同版本无关。你如何引导新的DC?如何降低旧的DC效果表现?对运行的影响将是这种方法相比,更新各个节点更大..

如果你真的不想做滚动升级,我建议做设置第二DC作为一个单独的集群,导入备份并做一些(加载)测试。如果您满意,还可以更改代码以写入两个群集,并最终切换到新群集。如果您不想花费太多精力,只需进行滚动升级。

+0

嗨Stefan, 第一个前奏我有一个运行2.0.9 cassandra版本的4节点群集。现在我打算用2.2 cassandra版本设置不同的DC。这应该从旧DC(2.0.9)开始引导。我知道这需要一段时间(引导)。优点是从我的应用程序读取和写入将从2.0.9服务,这是完美的工作,所有这一切,而读取和写入将同步到新的DC(异步)。 然后在一个贫困时期(流量很低时),我只需将联系点改为我的新DC(2.2)。一切正常后,我会关闭旧的DC。 – johri21