clickhouse升级问题

最近需要将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 ] {} <Error> 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://<host_name>:<port>/<path>': 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

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容