如何将 Clickhouse 的 Zookeeper 迁移到新实例?



我在Kubernetes上托管ClickHouse (v20.4.3.16)在2个副本中,它使用Zookeeper (v3.5.5)在3个副本中(也托管在同一个Kubernetes集群上)。

我需要将ClickHouse使用的Zookeeper迁移到另一个安装,仍然是3个副本,但v3.6.2。

我想做的是:

  • 为了冻结Zookeeper节点,我停止了ClickHouse的所有实例。使用ZK -shell,我将旧ZK集群的/clickhouse中的所有znode镜像到新ZK集群中(这花了一些时间,但没有问题)
  • 我重新启动ClickHouse的所有实例,一次一个,现在附加到Zookeeper的新实例。
  • 两个ClickHouse实例都正确启动,没有任何错误,但每次我尝试(或有人尝试)添加行到插入表,ClickHouse日志如下:
2021.01.13 13:03:36.454415 [ 135 ] {885576c1-832e-4ac6-82d8-45fbf33b7790} <Warning> default.check_in_availability: Tried to add obsolete part 202101_0_0_0 covered by 202101_0_1159_290 (state Committed)

,新数据永远不插入。

我已经阅读了关于数据复制和重复数据删除的所有信息,但我确信我在插入中添加了新的数据,加上所有表都使用了时间字段(event_time或update_timestamp等),但它根本不起作用。

将ClickHouse连接回旧的Zookeeper,插入相同的数据时不会发生问题。

在更改Zookeeper端点之前需要做些什么吗?我错过了什么明显的东西吗?

使用zk-shell,我

不能使用此方法,因为它不复制用于部件块编号的自动增量值。

有更简单的方法。您可以通过添加新的ZK节点作为追随者来迁移ZK集群。

以下是ZK 3.4.9的计划(没有动态重新配置):1. 将3个新的ZK节点配置为6个节点的集群(3个旧节点+ 3个新节点),启动它们。此时不需要对3个旧的ZK节点进行更改。新服务器不会连接和下载快照,所以我必须首先在4个节点的集群中启动其中一个。2. 确保3个新ZK节点作为追随者连接到旧ZK集群(在3个新ZK节点上运行echo stat | nc localhost 2181)3.确认leader有5个同步的follower(在leader上运行echo mntr | nc localhost 2181,查找zk_synced_follower)7. 从3个新ZK节点上的zoo.cfg中删除3个旧ZK节点。8. 停止在CH中加载数据(这是为了减少CH丢失ZK时的错误)。4. 更改CH节点上的配置中的zookeeper部分(删除3个旧的ZK服务器,添加3个新的ZK服务器)5. 重新启动所有CH节点(CH必须重新启动才能连接到不同的ZK服务器)6. 确保没有从CH到3个旧ZK节点的连接(在3个旧节点上运行echo stat | nc localhost 2181,检查它们的Client节)。11. 关闭3个旧ZK节点9. 重新启动3个新的ZK节点。它们应该形成一个3个节点的集群。10. 当CH重新连接到ZK时,开始数据加载。Altinity KB

最新更新