从2.0.9升级到2.2的Cassandra版本升级

5
我们计划将当前运行2.0.9版本的集群升级到2.2.6。根据文档和一些博客,人们会在原地升级cassandra,即从环中删除一个节点进行升级,然后再将其添加回来。我们对此方法持怀疑态度,因为事情可能会出错(这是一个高交易数据库,每秒查询次数很多)。
因此,我们计划向集群中添加一个新的数据中心,该数据中心应该具有升级的cassandra版本(2.2)。因此,设置将具有两个数据中心:一个旧的(2.0.9)和另一个新的(2.2.6)。
这个数据中心只是一个备份。当数据中心变得稳定时,我们将把客户端连接更改为这个数据中心,如果它表现良好,那么我们将使用这个数据中心并关闭旧数据中心,否则我们可以返回旧数据中心并调试出了什么问题。
这种过程足够可行吗?还是应该采用原地升级?
两个cassandra版本(2.0和2.2)是否可以存在于一个数据中心中?
这种方法有什么缺点吗?
2个回答

3

两个不同版本的Cassandra(2.0和2.2)能否同时存在于一个数据中心?

不行。

这种方法可行吗,还是我们应该进行就地升级?

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

这种方法有什么缺陷吗?

正如我所提到的,您将无法将现有节点上的数据流式传输到新的2.2 DC。因此,引导、重建和修复都不可能实现。

您还面临另一个问题,即2.2.6与2.0.9不“升级兼容”。根据DataStax文档:Apache Cassandra versions requiring intermediate upgrades...

Apache Cassandra 2.2.x restrictions

  • 直接从Cassandra 2.1版本(2.1.9及更高版本)升级到Cassandra 2.2.x。
  • 不支持从Cassandra 2.0及更早版本直接升级。

您需要将整个集群升级到Cassandra 2.1。完成2.1升级后,然后才能将您的节点升级到2.2.6。


嗨@Aaron,谢谢。为什么两个不同版本的Cassandra不能存在于同一个数据中心但可以存在于同一个集群中,这很奇怪。这是有特别的原因吗?如果Cassandra不能在不同版本的数据中心之间流式传输数据..我可以先在新数据中心安装相同的版本,然后进行引导、重建和修复,之后再升级新数据中心的版本并更改客户端连接吗?这样可行吗?...我知道即使采用这种方法,两个数据中心也处于两个不同的版本。这会起作用吗?谢谢。 - johri21

1
Cassandra是一种无主分布式数据存储。对于Cassandra来说,没有所谓的“备份”数据中心。如果您要添加运行2.2的另一个DC,则选择混合版本集群设置,就像逐个升级节点一样。我看到的唯一优点是,由于增加了节点,性能问题应该不太可能发生。但是,添加另一个DC将使您的集群设置更加复杂,并可能引入您尚未了解的问题,但与运行不同版本无关。您如何引导新的DC?关闭旧的DC会影响性能吗?与更新单个节点相比,这种方法的操作影响会更大。
如果您真的不想进行滚动升级,我建议将第二个DC设置为单独的集群,导入备份并进行一些(负载)测试。还要更改代码以写入两个集群,并最终切换到新集群(如果您满意)。如果您不想花费太多精力,只需进行滚动升级即可。

你好 Stefan,首先,我有一个运行2.0.9版本的4节点集群。现在我计划使用2.2版本的Cassandra设置不同的DC。这将从旧的DC(2.0.9)引导。我知道这需要一些时间(引导)。优点是我的应用程序的读写将由完美运行的2.0.9提供,并且在此期间,读写将与新的DC(异步)同步。然后,在低流量期间,我将只需更改联系点到我的新DC(2.2)。一切正常后,我将关闭旧的DC。 - johri21

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