Cassandra 版本从 2.0.9 升级到 2.2

Cassandra version upgrade from 2.0.9 to 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 是一个无主分布式数据存储。对于 Cassandra,没有 "backup" 数据中心这样的东西。如果您要添加另一个 DC 运行 2.2,您将选择加入混合版本集群设置,就像单独升级节点一样。我看到的唯一优势是,由于添加了节点,性能问题应该不太可能发生。但是,添加另一个 DC 会使您的集群设置更加复杂,并且可能会引入您还不知道的问题,但不会与 运行 不同版本有任何关系。你会如何 bootstrap 新的 DC?拆下旧DC效果会如何?与更新单个节点相比,这种方法对操作的影响要大得多..

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

Can two cassandra version(2.0 and 2.2) exist across a datacenter.

不,他们不能。

Is this process feasible enough or should we go for in place upgrade?

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

Is there a downfall in this approach?

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

您遇到的另一个问题是 2.2.6 与 2.0.9 不同 "upgrade compatible"。来自这个 DataStax 文档:Apache Cassandra versions requiring intermediate upgrades...

Apache Cassandra 2.2.x 限制

  • 从Cassandra 2.1版本升级或等于2.1.9直接升级到Cassandra 2.2.x.
  • 不支持从 Cassandra 2.0 和旧版本直接升级。

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