1

我目前正计划升级到 2.0.7 cassandra 版本。我的基础版本是 2.0.3。到目前为止,我还没有进行升级,因此想绝对确定我在做什么。有人可以解释一下前面需要做什么。

  1. 执行 nodetool drain 以停止对特定节点的所有写入。
  2. 停止 cassandra 节点(我有一个 8 个节点,2 个数据中心网络拓扑。我正在关闭 DC1 中的一个节点)
  3. 在新的二进制 tarball 中相应地更改 cassandra.yaml。
  4. 对新节点进行必要的更改(使用 gossiping 属性文件 snitch。所以,为此进行更改)
  5. 启动新的 cassandra 二进制文件(2.0.7)

最让我印象深刻的问题

  1. 我必须将数据从 2.0.3 复制到 2.0.7 吗?2.即使是滚动升级,我认为以下步骤都可以(除了从一个版本移动到另一个版本)。我的假设是对的吗?
  2. 我将在正在运行的应用程序上执行此操作。我计划在执行此操作时运行应用程序,因为我在本地仲裁中有足够的副本来满足读取和写入。这个想法有什么缺点吗?我喜欢 cassandra 进行这种手术,但想知道有什么潜在的问题吗?
  3. 在执行此操作时,我将在我的运行机器中拥有现有的 2.0.3。如果 2.0.7 有问题,我会重新启动 2.0.3 版本对吗?只是想知道会不会和集群中的其他节点发生数据冲突?或者有一个快照来恢复数据是最好的选择?5.除此之外,我还有什么要注意的吗?
4

1 回答 1

1

我必须将数据从 2.0.3 复制到 2.0.7 吗?2.即使是滚动升级,我认为以下步骤都可以(除了从一个版本移动到另一个版本)。我的假设是对的吗?

如果您只是升级二进制文件,您可以保留所有数据,它会自动使用它。

我将在正在运行的应用程序上执行此操作。我计划在执行此操作时运行应用程序,因为我在本地仲裁中有足够的副本来满足读取和写入。这个想法有什么缺点吗?我喜欢 cassandra 进行这种手术,但想知道有什么潜在的问题吗?

正常的读写操作都很好。当您临时运行混合版本集群时,最好避免做任何涉及流式传输(修复)或拓扑更改(引导或停用节点)的事情。它们可能会起作用,但它们没有得到官方支持,而且您更有可能遇到问题。

在执行此操作时,我将在我的运行机器中拥有现有的 2.0.3。如果 2.0.7 有问题,我会重新启动 2.0.3 版本对吗?只是想知道会不会和集群中的其他节点发生数据冲突?或者有一个快照来恢复数据是最好的选择?

你想要一个快照来恢复。较新版本的 Cassandra 可能使用旧版本无法读取的新 SSTable 或 commitlog 格式。

于 2014-04-26T00:03:00.143 回答