本文介绍如何在云数据库 ClickHouse 社区兼容版控制台一键升级集群内核大版本。
背景知识
为提升服务体验,需及时将旧版本集群升级至最新版本。云数据库 ClickHouse 社区兼容版提供控制台一键升级功能。由于集群的架构不同,所以其升级原理也不同,具体原理如下:
旧架构集群:系统自动创建新版本的新集群,将原集群数据迁移至新集群,通过迁移完成升级。
新架构集群:直接通过克隆升级内核版本实现原实例版本更新。
请根据集群版本选择升级操作,确保平稳过渡。
准备工作:确认集群架构
在进行迁移前,您需根据控制台操作确认集群的架构,便于选择合适的验证方法和操作步骤。具体操作如下:
在实例列表单击目标集群ID,进入集群信息页面。
在集群属性区域,单击版本右侧的大版本升级。
在大版本升级弹框中,查看第三个设置时间的配置项。
版本升级执行时间:新架构。
停写时间:旧架构。
新架构的集群升级,请参见新架构集群升级。
旧架构的集群升级,请参见旧架构集群升级。
新架构集群升级
前提条件
集群状态为运行中。
注意事项
一键升级内核大版本流程启动后,无法取消。
一键升级内核大版本后不支持版本回退,如果您需要在版本升级后,仍然具有能回退到原来版本的能力,可尝试通过克隆的方式进行升级,具体操作,请参见通过克隆升级内核大版本。
一键升级内核大版本始终只有一个集群,且升级后无法回退到原版本。
为确保升级过程顺利进行,建议您在进行升级前停止业务侧的写入操作。因为在升级过程中,集群会主动停止写入,但若业务未提前停止写入,则可能导致同步等待时间过长,甚至无法在短时间内完成同步,从而影响升级的时效性。
为了降低迁移对您业务的影响,强烈建议您在升级前,进行以下内容的验证。
兼容性以及性能验证:写入和查询的功能、语法、性能的差异验证。
升级时长验证:版本升级过程会多次重启实例,部分实例由于库表数量、分区(Parts)数量过多等因素单次启动过程需要较长时间。
如果集群数据大量存在冷存存储,并且使用的是克隆验证,由于克隆不会克隆冷存数据,所以一键升级所需的时间相较于克隆验证所需的时间更长。
如何验证,请参见验证版本兼容性。
集群影响
版本升级期间集群会进行多次重启,不可读也不可写,建议在业务低峰期进行操作。
验证版本兼容性
由于一键升级内核大版本始终只有一个集群,且升级后无法回退到原版本,强烈建议您先进行升级测试,确认新版本集群完全兼容原版本集群的功能以及升级时长后再进行升级。验证步骤如下:
开启了冷热分层的集群,克隆仅包含热数据(即新集群无法查询到冷数据)。
进入目标实例集群信息页面,点击左侧导航栏中的备份恢复,实例备份完成后,点击恢复实例。
选择从实时副本克隆,目标内核版本为升级目标版本。
创建克隆集群。
进行兼容性验证。
验证业务查询的新版本兼容性,请参见SQL兼容性验证。
回归业务功能。
操作步骤
使用阿里云账号登录云数据库ClickHouse控制台。
在页面左上角,选择目标集群所在的地域。
在左侧导航栏,单击社区版实例列表。
找到目标集群,单击集群ID,进入集群信息页面。
在集群属性区域,单击版本右侧的大版本升级。
根据页面提示,配置如下参数,点击确定按钮。
配置项
说明
示例
配置项
说明
示例
将实例内核版本升级至
目标集群版本,版本升级后无法回退。
当前仅支持的版本有23.8。
23.8(LTS版本)
版本升级执行时间
升级集群版本的执行时间。
选择指定时间升级和可维护时间段升级后,集群的状态会由运行中变为版本升级中,在指定时间或者运维窗口到来前,集群可正常对外提供读写服务,但是不能执行升降配、扩缩容、迁移等运维操作。
指定时间:选择未来某一指定时间段做大版本升级,默认时间为当前集群的下一次运维窗口时间。
可维护时间段升级:默认选取当前集群的运维窗口时间。
立即升级:立即执行升级操作。
2024-05-29 14:46
是否执行实例克隆验证
勾选已执行实例克隆验证或跳过实例克隆验证(不推荐)
已执行实例克隆验证
旧架构集群升级
前提条件
集群状态为运行中。
注意事项
一键升级内核大版本始终只有一个集群,且升级后无法回退到原版本。
一键升级内核大版本后不支持版本回退,如果您需要在版本升级后,仍然具有能回退到原来版本的能力,可尝试通过迁移的方式进行升级,具体操作,请参见迁移升级。
集群升级时,集群库表需要注意的内容如下:
MergeTree类型引擎表,升级时,会将原有历史数据迁移写入新的集群中并自动完成重分布。
非MergeTree类型(如外表,Log表等),升级时,仅进行表结构迁移,不进行数据迁移。
物化视图,在集群升级时,仅进行结构迁移,不进行数据迁移。
Kafka/RabbitMQ引擎表在集群升级时,不支持迁移,升级前需删除此类表。
升级后内部节点IP会发生变化,如果依赖节点IP数据写入和访问,需重新获取集群的VPC网段IP,具体操作,请参见获取集群的VPC网段IP。
为了降低迁移对您业务的影响,强烈建议您在升级前,进行以下内容的验证。
兼容性以及性能验证:写入和查询的功能、语法、性能的差异验证。
升级时长验证:版本升级过程会多次重启实例,部分实例由于库表数量、分区(Parts)数量过多等因素单次启动过程需要较长时间。
如何验证,请参见验证版本兼容性。
集群影响
社区兼容版集群在升级过程中,除迁移剩余的最后的10分钟不可写外,全程可读可写。如何查看迁移剩余的时间,请参见查看升级进度。
验证版本兼容性
由于一键升级内核大版本始终只有一个集群,且升级后无法回退到原版本,强烈建议您先进行升级测试,确认新版本集群完全兼容原版本集群的功能以及升级时长后再进行升级。验证步骤如下:
购买新集群进行迁移验证。请参见通过迁移升级内核大版本。
在新集群中,进行SQL兼容性验证。如何验证,可参见SQL兼容性验证。
回归业务功能进行验证。
升级集群
使用阿里云账号登录云数据库ClickHouse控制台。
在页面左上角,选择目标集群所在的地域。
在左侧导航栏,单击社区版实例列表。
找到目标集群,单击集群ID,进入集群信息页面。
在集群属性区域,单击版本右侧的大版本升级。
根据页面提示,配置如下参数,点击确定按钮。
配置项
说明
示例
配置项
说明
示例
将实例内核版本升级至
目标集群版本,版本升级后无法回退。
当前仅支持的版本有23.8。
23.8(LTS版本)
停写时间
为了确保升级后数据与升级前的数据保持一致,在升级的最后10分钟内,集群会进行主动停止写入操作。停写时间的设置规则如下:
为了保证升级的成功率,建议您停写时间至少设置30分钟。
升级必须在5天内结束,因此,集群停写时间的结束日期必须小于或等于
当前日期+5天
。为了降低停写对您业务的影响,建议您设置的停写时间范围处于您的业务低峰期。
2025-03-20 10:08
-2025-03-25 10:08
是否执行实例迁移验证
勾选已执行实例迁移验证或跳过实例迁移验证(不推荐)
已执行实例迁移验证
后续操作。
查看升级进度
使用阿里云账号登录云数据库ClickHouse控制台。
在页面左上角,选择目标集群所在的地域。
在左侧导航栏,单击社区版实例列表。
找到目标集群,单击集群ID,进入集群信息页面。
在集群状态区域,单击状态右侧的查看版本升级进度。
在弹出的修改停写窗口对话框中,查看升级进度。例如MergeTree表结构迁移的进度、数据迁移的进度、数据迁移预计的剩余时间、以及其他结构迁移进度。
修改升级停写时间
当您发现时间已超过您设定的停写时间,而集群状态仍显示为版本升级中时,这表明在升级过程中,集群数据迁移尚未完成。您需要调整停写时间,以确保集群升级的顺利完成。
使用阿里云账号登录云数据库ClickHouse控制台。
在页面左上角,选择目标集群所在的地域。
在左侧导航栏,单击社区版实例列表。
找到目标集群,单击集群ID,进入集群信息页面。
在集群状态区域,单击状态右侧的查看版本升级进度。
在弹出的修改停写窗口对话框中,修改停写时间后,单击确认。
停写时间设置规则,与升级集群中的停写时间的设置一致。
取消升级
当您发现升级已对您的业务造成影响,期望快速停止升级操作时,您可以通过取消升级来终止该操作。
使用阿里云账号登录云数据库ClickHouse控制台。
在页面左上角,选择目标集群所在的地域。
在左侧导航栏,单击社区版实例列表。
找到目标集群,单击集群ID,进入集群信息页面。
在集群状态区域,单击状态右侧的查看版本升级进度。
在弹出的修改停写窗口对话框中,单击取消升级。
单击取消升级后,升级任务不会立即终止,大约5分钟后才会真正停止。
常见问题
Q:升级内核大版本时,报存在不支持的Kafka表定义
的错该怎么办?
A:在售版本的Kafka表不支持用DEFAULT
定义字段默认值,从而导致内核包启动失败。解决步骤如下:
使用
select create_table_query from system.tables where engine = 'Kafka'
找到所有的Kafka表。备份找到的表的DDL语句。
删除找到的表。
重新建表。
建表时不要使用
DEFAULT
定义字段默认值。
Q:升级内核大版本时,报存在不支持的MaterializedMySQL表定义
的错该怎么办?
A:在售版本与源集群版本的MaterializeMySQL引擎的配置参数不兼容。解决步骤如下:
使用
select name from system.databases where engine = 'MaterializeMySQL'
找到是MaterializeMySQL引擎的数据库。备份找到的数据库的DDL语句。
删除找到的数据库。
升级内核版本。
调整备份的数据库的DDL以适用目标版本,重新创建MaterializeMySQL引擎的数据库。
Q:升级内核大版本时,报存在除20.3不支持的表定义Nullable(Array(*))/SecondaryIndex(存在KEY定义)
的错该怎么办?
A:如果您的集群版本为20.3版本,可能使用了阿里云自研的部分功能。例如以下功能:
定义表字段为Nullable(Array(*))类型。
使用KEY关键字定义的二级索引。
由于这些功能并没有合并回开源ClickHouse,所以实例版本20.8之后并不包含这些功能。建议您在升级之前调整相关的表。可进行以下操作:
验证源集群版本与目标版本的兼容性。
由于20.3和在售版本跨度较大,建议您在实施升级之前充分验证,以避免升级对业务造成影响。
删除
Nullable(Array(*))
修饰的字段,重新添加字段;删除使用KEY关键字定义的二级索引,在升级完成后重新为表添加跳数索引。
两种索引实现原理有差异可能会造成性能差异。
相关文档
- 本页导读 (1)
- 背景知识
- 准备工作:确认集群架构
- 新架构集群升级
- 前提条件
- 注意事项
- 集群影响
- 验证版本兼容性
- 操作步骤
- 旧架构集群升级
- 前提条件
- 注意事项
- 集群影响
- 验证版本兼容性
- 升级集群
- 查看升级进度
- 修改升级停写时间
- 取消升级
- 常见问题
- 相关文档