clickhouse升级问题 您所在的位置:网站首页 简书系统升级中 clickhouse升级问题

clickhouse升级问题

2024-05-05 06:09| 来源: 网络整理| 查看: 265

最近需要将clickhouse服务器从20.4.5.36版本升级到22.10.2.11版本,在升级的过程中遇到一些问题,特意写篇文章和大家交流下

1.升级步骤

1.停止clickhouse容器 先将使用的clickhouse所有容器停止,因为容器在运行会不停造数据,没法做到无损迁移 docker stop clickhouse-server 2.备份原来数据 如果原来挂载的数据目录是/home/admin/data/clickhouse,可以新建目录/home/admin/data/clickhouse2022,将clickhouse所有数据拷贝到clickhouse2022。 cp -r /home/admin/data/clickhouse/* /home/admin/data/clickhouse2022 原因:升级有风险,所以数据备份是必要的,因为升级是不可逆的,没法进行降级,分成两个目录,当升级失败时,至少老数据是不受影响的。 3.先升级到中间版本 直接升级到新版本会出现报错,启动不了,按照官方的建议是升级到一个中间版本(中间版本和最终版本相差不要超过1年),经过调研,21.11.2.2版本比较合适,所以先升级到此版本

docker run --restart=always \ --name clickhouse-server-2021 \ -v /home/admin/data/clickhouse2022:/var/lib/clickhouse \ -d \ --ulimit nofile=262144:262144 \ -p 8123:8123 \ clickhouse/clickhouse-server:21.11.2.2

升级成功后,等待初始化完成后(怎么判断是否初始化完成见注意事项),停止和删除容器

docker stop clickhouse-server-2021 docker rm clickhouse-server-2021

4.升级到新版本

docker run --restart=always \ --name clickhouse-server-2022 \ -v /home/admin/data/clickhouse2022:/var/lib/clickhouse \ -d \ --ulimit nofile=262144:262144 \ -p 8123:8123 \ clickhouse/clickhouse-server:22.10.2.11

注意:初始化过程中千万不要对容器进行停止,重启等操作,会破坏初始化流程,导致数据被破坏。 5.配置文件修改 进入clickhouse容器,根据具体业务修改config.xml和users.xml的配置值,也可以把其挂载出来修改,修改后重启容器

6.清理老数据(慎重,可以等一段时间观察再决定是否清理) 如果升级成功,数据无问题,可以将老的clickhouse删除,对应的/home/admin/data/clickhouse可以删除 docker rm clickhouse-server rm -rf /home/admin/data/clickhouse

2.升级注意事项 1.数据备份前确认下磁盘空间是否足够

先确认原始数据大小和磁盘剩余空间大小,如果不够,需要扩容

2.升级到每个版本时,必须等初始化完成后才能进行stop等别的操作

一般升级到某个版本后,需要等3-5分钟才能初始化完成(可能与数据量有关系,数据量小可能比较短),确认是否初始化完成,可以进入容器目录/var/log/clickhouse-server,tail -f clickhouse-server.log

image

如果每隔1-2秒打印这样的数据,说明初始化已经完成,才可以停止容器进行接下来的升级。

3.数据回退方案

1.如果升级失败,需要回退到老版本,则停止掉新容器,重启老容器即可;

2.如果升级了一段时间后,发现重大问题需要回退,则需要将增量数据(或者全量数据覆盖)从LTS版本迁移到老版本,然后使用老的ck;还可以采用双写策略,新库和老库都同时写入,如果新库遇到问题,随时切换到老库,不需要做数据迁移,但是数据需要写两份,线上部署两个clickhouse服务,当业务不复杂代码改动不太大时可以考虑此方案

3.升级中的报错

1.system目录有问题

当直接从老版本通过挂载目录的方式直接升级到新版本时,会偶现该问题(当ck数据量较大时会出现),说明system库没有初始化成功,当通过中间版本过度升级,不会遇到该问题

2.url校验报错导致启动失败

2023.01.09 09:23:11.175168 [ 1 ] {} Application: Caught exception while loading metadata: Code: 36. DB::Exception: Bad hdfs url: s3a://alibaba-store/alibaba-store/table_cache/demo/h3f35eaaa4d004d348772bf9/part-00000-5b7579c2-9e54-448c-aaac-62857e64ace5-c000.snappy.parquet. It should have structure 'hdfs://:/': Cannot attach table alibaba.h3f35eaaa4d004d348772bf9_0 from metadata file /var/lib/clickhouse/metadata/alibaba/h3f35eaaa4d004d348772bf9_0.sql from query ATTACH TABLE alibaba.h3f35eaaa4d004d348772bf9_0 (Order_Id Nullable(String), Member_Id Nullable(Int64), Itemnum Nullable(Int64), Createtime Nullable(DateTime), Cost_Item Nullable(Float64), Total_Amount Nullable(Float64), Pmt_Amount Nullable(Float64), Shipping_Area Nullable(String)) ENGINE = HDFS('s3a://alibaba-store/alibaba-store/table_cache/demo/h3f35eaaa4d004d348772bf9/part-00000-5b7579c2-9e54-448c-aaac-62857e64ace5-c000.snappy.parquet', 'Parquet'): while loading database alibaba from path /var/lib/clickhouse/metadata/alibaba. (BAD_ARGUMENTS), Stack trace (when copying this message, always include the lines below):

这个是因为创建表结构时设置的url错误,打开这个sql文件

ATTACH TABLE h3f35eaaa4d004d348772bf9_0 ( `Order_Id` Nullable(String), `Member_Id` Nullable(Int64), `Itemnum` Nullable(Int64), `Createtime` Nullable(DateTime), `Cost_Item` Nullable(Float64), `Total_Amount` Nullable(Float64), `Pmt_Amount` Nullable(Float64), `Shipping_Area` Nullable(String) ) ENGINE = HDFS('s3a://alibaba-store/alibaba-store/table_cache/demo/h3f35eaaa4d004d348772bf9/part-00000-5b7579c2-9e54-448c-aaac-62857e64ace5-c000.snappy.parquet', 'Parquet');

将这个ENGINE配置的url修改为: HDFS('hdfs://alibaba-store/alibaba-store/table_cache/demo/h3f35eaaa4d004d348772bf9/part-00000-5b7579c2-9e54-448c-aaac-62857e64ace5-c000.snappy.parquet', 'Parquet'); 或者 S3('s3a://alibaba-store/alibaba-store/table_cache/demo/h3f35eaaa4d004d348772bf9/part-00000-5b7579c2-9e54-448c-aaac-62857e64ace5-c000.snappy.parquet', 'Parquet');

将报错的sql修改成后重启容器

原因:新版本增加了url格式校验,老版本是没有这个校验的,所以对于错误的url,校验失败后会阻塞启动

参考文章: 1.升级参考 https://clickhouse.com/docs/en/operations/update/ 2.报错参考 https://github.com/ClickHouse/ClickHouse/issues/45090



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有