Cassandra版本从2.0.9升级到2.2



我们计划将目前运行在2.0.9上的集群升级到2.2.6。根据文档和一些博客,人们就地升级cassandra,即从环中删除一个节点,升级它,然后重新添加它。我们对采用这种方法持怀疑态度,因为事情可能会出错(这是一个具有大量QPS的高事务数据库)。

所以我们计划在集群中添加一个新的数据中心,该数据中心应该已经升级了cassandra版本(2.2)。因此设置应该有两个数据中心,一个旧的(2.0.9)和另一个新的(2.2.6)

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

这个过程是否足够可行,还是我们应该就地升级?

一个数据中心可以存在两个cassandra版本(2.0和2.2)吗?

这种方法有缺点吗?

一个数据中心可以存在两个cassandra版本(2.0和2.2)吗?

不,他们不能。

这个过程是否足够可行,还是我们应该就地升级?

您将需要执行就地升级。这是因为Cassandra不能跨版本流式传输。执行就地升级允许新版本从旧版本读取sstable。

这种方法有缺点吗?

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

你遇到的另一个问题是,2.2.6与2.0.9不"升级兼容"。从这个DataStax文档:Apache Cassandra版本需要中间升级…

Apache Cassandra 2.2。

  • 从Cassandra 2.1版本以上或等于2.1.9的版本直接升级到Cassandra 2.2.x。
  • 不支持从Cassandra 2.0及更早版本直接升级。

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

Cassandra是一个无主分布式数据存储。对于卡桑德拉来说,没有所谓的"备份"数据中心。如果要添加另一个运行2.2的DC,则需要选择混合版本集群设置,就像单独升级节点一样。我看到的唯一优点是,由于添加节点而导致的性能问题应该不太可能出现。但是,添加另一个DC将使您的集群设置更加复杂,并且可能引入您还不知道的问题,但与运行不同的版本没有任何关系。你会如何引导新的DC?如何拿下旧的直流电效果表现?与更新单个节点相比,这种方法对操作的影响要大得多。

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

最新更新