背景和观察:
我有一个在生产环境中运行的 3 节点集群(版本 3.11)。对于迁移,我首先尝试使用 cassandra 4.1.2 版本创建 1 个新节点,并将这些节点添加到现有集群中。要添加这些节点,我必须运行-Dcassandra.skip_schema_check=true
命令,否则新节点在启动时会失败。当我能够在现有集群中添加这些节点后,我发现数据没有从版本 3 流到版本 4 节点的新节点。这里的想法是,一旦数据复制到版本 4 节点,我们就可以一一关闭版本 3 节点,这将是一个平滑的迁移。
这里从 3.x 迁移到 4.x 的文档建议迁移应该逐个节点完成,我应该首先删除一个节点,然后在该节点上设置 cassandra 4,然后使用相同的数据文件运行 cassandra 4然后对所有节点执行相同的操作。
问题:
我的问题是,如果我继续采用 datastax 文档中提到的方法,那么有一天版本 4 和版本 3 将共存,而我的读/写负载仍将进入集群。在此期间,2 个不同版本节点之间不会发生数据传输,因此前往版本 4 节点的写入请求将不会复制到版本 3 节点,反之亦然。这将导致数据不一致,直到所有节点都迁移并开始相互通信。我们假设数据最终会保持一致,但如果在此过程中出现任何问题,我们将无法解决生产中不一致的数据。那么我可以采取哪些步骤来确保不存在数据不一致,并且如果出现问题,有一些更简单的方法来纠正数据。我还想了解为什么 cassandra 不支持上述第一种方法,因为从迁移的角度来看,这对于开发人员来说似乎是一种更简单的方法。