Clickhouse集群版本升级方案及降级方案(实操)

clickhouse
作者:dulucy
发布时间:2025-09-19 00:41:06
Clickhouse集群版本升级方案及降级方案(实操)

升级背景

运行中的clickhouse版本为23.3.2.37,在对接新的业务过程中,发现新版本的可刷新物化视图等功能,因此在团队讨论后,基于功能需要决定进行版本升级,升级到25.3.3.42。

系统架构

操作系统:redhat 6.5 集群节点:6个 备份节点:2个 keeper节点:4个

准备工作

1. 下载升级版本的安装包

lts:packages.clickhouse.com/tgz/lts/ stable:packages.clickhouse.com/tgz/stable/ 我们选择的是LTS版本的安装包 找到以下文件,并下载 image.png

2. 将安装包上传提前到每台服务器

3. 备份配置文件

提前将每台服务器上的/etc/clickhouse-server的配置文件进行备份,防止升级过程出现意外(虽然不会被覆盖)。我们采取的svn进行版本管理,这个在安装升级包后,进行配置文件的修改对比非常方便。

4.提前修改好每台服务器上的配置文件

因为我们的个性配置都是在另外的metrika.xml文件,在config.xml文件进行引入。因此可以只需要修改对比一份新的config.xml文件,然后覆盖其他的即可。 实际测试环境安装时,修改配置文件是一件麻烦事,因此建议生产环境升级,提前修改好,可以省去甚多时间

升级过程

  • 是否需要停止全部的clickhosue服务,再进行安装升级呢?
    答案是不需要的。根据和同事的沟通了解,升级是可以再停止全部数据写入后,直接安装升级包后,在不重启服务的情况下,clickhouse数据库仍旧使用旧版本提供数据查询。重启服务,重启过程中,clickhouse会停止服务,重启后使用旧的配置继续运行,影响时间为重启的时间。
    测试降级版本必须先停止服务,再安装(需要先卸载新版本,再安装旧版本,不然安装失败,是否必须停止好像也不确定了。)


1.暂停所有的数据写入

升级前,需要将所有的写入都停止,避免升级过程中、服务重启中导致数据写入失败,或者其他异常

2.安装升级文件

进入安装包文件,执行下面的升级命令

rpm -Uvh clickhouse-common-static-25.3.3.42.x86_64.rpm  clickhouse-server-25.3.3.42.x86_64.rpm clickhouse-client-25.3.3.42.x86_64.rpm

3.重启服务

//重启服务
systemctl restart clickhouse-server.service 
//查看服务状态
systemctl status clickhouse-server.service

4.逐台修改配置文件

将修改后的配置文件上传到clickhouse-server对应位置(上传后,自动使用新的配置文件运行)

5、配置文件赋权

可能出现文件权限问题导致报错

cd /etc/clickhouse-server/
chown clickhouse:clickhouse /etc/clickhouse-server/metrika.xml
 cd /etc
chown -R clickhouse:clickhouse clickhouse-*

6.查看日志

cd /var/log/clickhouse-server/

tail -200f clickhouse-server.err.log

升级后测试方案

1.测试各节点连接是否正常

2.测试每台数据库的连接、数据查询、更新、删除等

升级后进行测试,主要是看版本号是否升级了、增删改查是否正常、可刷新物化视图等功能,因此执行下面的命令(根据自己的测试需求编写)

select version();

create table tmp.test on cluster dd
(`id` Int64,`plant` String,`msg` Nullable(String))ENGINE = ReplicatedMergeTree()
PARTITION BY plant
ORDER BY (id)
COMMENT '升级测试表';

INSERT INTO  tmp.test  (id, plant,msg) VALUES(1, '111','qqqq');
INSERT INTO  tmp.test  (id, plant,msg) VALUES(2, '222','qqqq');
INSERT INTO  tmp.test  (id, plant,msg) VALUES(3, '333','qqqq');


select * from  tmp.test;
delete from  tmp.test  where  id  =1 ;
ALTER TABLE  tmp.test  UPDATE msg= 'ddd' where id=3;


--投影
ALTER TABLE  tmp.test  ADD PROJECTION prj_test 
(
SELECT * ORDER BY (id )
);

create table tmp.test_view2 
(
`id` Int64,`plant` String,`msg` Nullable( String ) )ENGINE = MergeTree()
PARTITION BY plant
ORDER BY (id)
COMMENT '升级测试表';

CREATE MATERIALIZED VIEW tmp.test1_mv
REFRESH EVERY 1 MINUTE to tmp.test_view2
AS SELECT  id,msg  FROM tmp.test;
select * from  tmp.test_view2;

drop table  tmp.test  on cluster dsp;

3.检查应用程序的接口调用是否正常


以上测试没问题了,就可以恢复数据写入

回退降级方案

回退条件:

1、升级过程中出现无法解决问题

2、测试过程中出现影响使用的问题

回退操作(我是先停止服务,再安装的,或许可以不停止服务执行,请自己测试)

1、卸载已经安装的程序文件(验证过无法直接安装旧版,会提示有更新的版本)

2、安装当前版本( 23.3.2.37)的程序文件,并上传备份的配置文件

// 列出安装的
rpm -qa |grep clickhouse    
//删除已安装的
 rpm -e clickhouse-server clickhouse-client clickhouse-common-static  

 cd ck23.3
 //安装旧版
  rpm -Uvh clickhouse-client-23.3.1.2823.x86_64.rpm clickhouse-common-static-23.3.1.2823.x86_64.rpm clickhouse-server-23.3.1.2823.x86_64.rpm

3、重启clickhouse服务,检查日志

systemctl daemon-reload
systemctl restart clickhouse-server.service 
systemctl status clickhouse-server.service

4、检查增删改查操作是否正常

5、检查应用接口调用是否正常

6、恢复数据写入