5

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

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

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

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

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

这种方法有没有失败?

4

2 回答 2

3

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

不,他们不能。

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

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

这种方法有没有失败?

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

您遇到的另一个问题是 2.2.6 与 2.0.9 不“升级兼容”。来自此 DataStax 文档:需要中间升级的 Apache Cassandra 版本...

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。

于 2016-09-28T13:30:33.493 回答
1

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

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

于 2016-09-28T10:52:44.177 回答