背景
Clickhouse 20.3.18.10 升级到 21.3.4.25版本
目的:该三月份发布的版本支持了更多通用的开窗函数,后续会介绍
升级流程
数据备份
对于没有使用每个shard多副本的集群,并且数据表并非全部都是copy表的情况,我们在做升级的时候就需要考虑自己去做备份了,需要备份的数据有这么几种:
1、配置(建议所有集群情况均备份,因为数据量很小):升级之前建议备份clickhouse相关的一些配置文件,默认是在/etc/clickhouse目录下的所有文件(不同环境若有不同请自行确认,总之要备份好旧配置)
命令:
sudo cp -r /etc/clickhouse-server /etc/clickhouse-server-bk
sudo cp -r /etc/clickhouse-client /etc/clickhouse-client-bk
2、元数据(建议所有集群情况均备份,因为数据量很小):默认config.xml配置(具体看真实配置) /var/lib/clickhouse/metadata 下存储了元数据,可以很方便的使用物理copy的方式进行
命令:
cp -rf metadata metadata_bk
3、详细数据(视情况而定,数据量大与小的区别):默认config.xml配置(具体看真实配置) /var/lib/clickhouse/data 下存储了具体的真正数据,该目录的结构是database下是table, table下是更细粒度的partition, 若该数据并不大且使用物理copy的方式系统磁盘容量可以满足copy后的存储大小,那么建议采用物理copy(注意:在做物理copy前请systemctl stop clickhouse-server 防止数据的写入,因为在copy的过程写入数据可能会导致数据损坏)
4、若数据非常庞大,本地磁盘无法容纳备份后的数据,那么建议采用clickhouse-copier工具将本集群的数据copy到其他容灾集群做容灾备份;
经过测试:升级过程中数据目录Clickhuse都是向上兼容的,不会更改删除数据目录,不会报错。直接升级即可,心大的可不备份
升级步骤
根据配置,每个shard有多个replicas副本,那么每个shard的升级需要逐个replica进行,其中一个replica确保升级成功后,我们才能继续下一个replica的升级操作,就这样逐个的升级确保整个集群的升级成功。(这样做的前提是clickhouse集群所有的表均使用的是copy表),不停机情况下确保单节点单节点的停止升级,另外一个保证可用
1、停止实例
停掉某个replica实例上的clickhouse-server:
sudo /etc/init.d/clickhouse-server stop
systemctl stop clickhouse-server
2、将需要升级到RPM包都放到一个文件夹下
RPM包下载地址(官网版本较新):
https://repo.clickhouse.tech/rpm/stable/x86_64
执行命令(一般不会报错,直接升级成功)
yum upgrade *.rpm -y
3、验证是否安装成功
- 启动新版clickhouse-server:systemctl start clickhouse-server
- 查看是否启动成功:systemctl status clickhouse-server
- 查看clickhouse相关日志有无明显报错信息,clickhouse相关日志的位置我们需要查看config.xml文件的配置,这边可以看到升级版本还是指向的之前的历史配置文件(默认配置日志路径:/var/log/clickhouse-server/clickhouse-server.log)
- 运行clickhouse-client,进入交互终端后确认版本信息,执行:select version()
备注:如一开始连接失败,则执行systemctl restart clickhouse-server几次该命令即可
降级步骤
若升级过程中出现严重问题,无法规避,那我们需要做降级操作,降级所需的所有rpm包文件我们需要放到单独的(downgrade)文件夹,进入文件夹执行:
systemctl stop clickhouse-server
yum downgrade *.rpm -y
systemctl start clickhouse-server (若出现数据损坏无法启动的情况,需要查看日志分析具体原因,分析具体损坏的文件)
备注:如由于内网原因或者其他配置原因导致该降级过程无法实施,请参照以下做法(经过测试)
1、yum list installed ‘clickhouse*’ 查看安装的ClickhouseRPM版本
2、yum -y remove … 卸载当前升级的版本
3、sudo yum -y localinstall clickhouse-*.rpm 重新安装历史版本
4、将历史配置文件重新覆盖当前安装目录,由于历史data目录不会更改且元数据都向上兼容,直接配置指向数据目录即可
5、sudo /etc/init.d/clickhouse-server start 启动
6、clickhouse-client --port 9000 确认是否成功、数据是否缺失即可