为提升云数据库ClickHouse集群高可用性,您可以将集群的单可用区升级为多可用区,或者将云数据库 ClickHouse 社区兼容版集群单副本升级为双副本。本文为您介绍升级的操作步骤。
云数据库 ClickHouse 社区兼容版支持通过升级为多可用区部署操作实现单可用区切换,比如从上海可用区N切换到上海可用区M,不强制变更为多可用区。
前提条件
集群状态为运行中。
集群没有未完成支付的续费订单。
说明您可以登录云数据库ClickHouse控制台,在页面右上角,选择费用 > 费用与成本,在左侧导航栏,选择订购订单>我的订单,完成订单支付或作废该订单。
使用限制
云数据库 ClickHouse 企业版集群:
不支持美国(硅谷)和美国(弗吉尼亚)地域。
不支持切换主可用区。
多可用区集群迁移可用区时,不支持仅变更专有网络交换机。
注意事项
云数据库 ClickHouse 社区兼容版集群:
MergeTree类型引擎表在集群升级为多可用区部署后,会将原有历史数据迁移写入新的集群中并自动完成重分布。
支持迁移的内容:
库、数据字典、物化视图。
表结构:除了Kafka和RabbitMQ引擎表以外的所有表结构。
数据:增量迁移MergeTree族表的数据。
不支持迁移的内容:
Kafka和RabbitMQ引擎表的表以及数据。
重要配置变更时会迁移数据到新建实例,并最终切流到新建实例。为保证Kafka和RabbitMQ数据不分流,请先清理源集群的Kafka和RabbitMQ引擎表,待变更完成后再重新创建。
非MergeTree类型表(例如外表、Log表等)的数据。
重要以上不支持的内容,在升级过程中,您需根据操作步骤,手动处理。
升级为多可用区部署过程中,禁止DDL操作。如不遵循,升级最后,可能会出现数据校验不通过的现象,进而导致升级失败。
升级为多可用区部署过程中,集群CPU和内存使用率会升高,预计单节点占用资源小于5核20GB。
升级为多可用区部署后,内部节点IP会发生变化,如果依赖节点IP数据写入和访问,需重新获取集群的VPC网段IP。
变更集群配置后,会持续一段时间高频merge操作,这会导致IO使用率上升,从而引起业务请求的延迟增加。建议您提前规划以应对业务请求延迟的潜在影响。具体merge操作时间的计算方法,请参见计算迁移结束后的merge时间。
云数据库 ClickHouse 企业版集群:可能会出现秒级闪断或者秒级只读的情况。
费用
变更集群配置后,费用将会发生变化,具体费用请以控制台为准。更多信息,请参见变更配置计费说明。
操作步骤
社区兼容版
步骤一:记录并清理 Kafka/RabbitMQ 引擎表
Kafka/RabbitMQ 引擎表无法通过控制台变配功能直接迁移。变配前,您必须记录这些表的 DDL 语句并将其从集群中删除,以避免干扰变配任务。
登录集群并执行以下语句查询所有 Kafka 和 RabbitMQ 引擎表及其下游依赖。
/* create_table_query:表定义语句 dependencies_database:依赖该表的数据库 dependencies_table:依赖该表的表名 通过 dependencies_database 和 dependencies_table 可以确定依赖 Kafka/RabbitMQ 表的物化视图 */ SELECT * FROM system.tables WHERE engine IN ('RabbitMQ', 'Kafka');查看物化视图定义,检查其目标表是否为隐式表。
/* 查看物化视图定义。 如果物化视图的目标表为隐式表,需特别注意: 删除物化视图时会同时删除隐式表,导致数据丢失。 示例:如果 CREATE MATERIALIZED VIEW [db.]table_name [TO[db.]name] 未指定 TO 子句, 系统会自动创建隐式表,格式可能为 '.inner_id.<TABLE_UUID>' 或 '.inner.<TABLE>' */ SELECT * FROM system.tables WHERE database='<DATABASE>' AND name = '<MATERIALIZED_VIEW_NAME>';如果物化视图创建时未使用 TO 子句,系统会自动生成以
.inner或.inner_id为前缀的隐式目标表。变配时这些隐式表会迁移到新集群节点,但由于内部命名机制,直接重建原物化视图可能导致命名冲突。因此,您必须先将隐式目标表重命名为常规表名。-- 将隐式目标表重命名为常规表名(在所有节点上执行) RENAME TABLE <database>.`.inner_id.<uuid>` TO <database>.<new_target_table_name> ON CLUSTER default;删除物化视图和 Kafka/RabbitMQ 引擎表。
重要必须先删除引用 Kafka/RabbitMQ 表的物化视图,然后再删除 Kafka/RabbitMQ 引擎表。否则变配操作会失败。
-- 先删除物化视图 DROP TABLE <database>.<materialized_view_name> ON CLUSTER default; -- 再删除 Kafka/RabbitMQ 引擎表 DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;
请务必保存所有记录的 DDL 语句。后续需要在升级后的集群上重建这些表。如果执行了 RENAME 操作,重建物化视图时请使用 TO 子句指向重命名后的目标表。更多信息,请参见 CREATE MATERIALIZED VIEW。
步骤二:备份非MergeTree类型表的业务数据
登录集群,通过以下语句,查看需要迁移数据的非MergeTree类型的表。
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') ))备份数据。
您需将以上非MergeTree类型的业务数据进行备份。具体操作,请参见备份数据至OSS。
步骤三:控制台升级操作
登录云数据库ClickHouse控制台,在页面左上角,选择集群所在地域,然后在集群列表页面,单击社区版实例列表页签。
在目标集群所在行的操作列,单击变更配置。
在变更配置弹窗中,选择升级为多可用区部署,单击确定。
在弹出的升级为多可用区部署检测窗口,查看检测状态。
检测成功:单击下一步。
检测失败:根据页面提示进行相应修改,修改完成后单击重试检测。检测成功后,单击下一步。
在升级为多可用区部署的过程中,检测失败的原因主要有以下几种。
缺失唯一的分布式表:表示本地表没有创建分布式表,需要再创建一个对应的分布式表。
对应的分布式表不唯一:表示本地表有不止一个分布式表,请删除多余的分布式表,仅保留一个即可。
Kafka/RabbitMQ引擎表不支持:表示存在Kafka/RabbitMQ引擎表,请删除。
多副本实例存在非Replicated的
*MergeTree表:表示数据在多副本之间不一致,扩缩容在迁移数据期间会出现异常。分布式表和本地表的列不一致:表示需要您修改分布式表和本地表的列一致,否则扩缩容在迁移数据期间会出现异常。
该表在部分节点缺失:您需要在不同分片创建同名的表。针对物化视图inner表,建议重命名inner表,然后重建物化视图,指向重命名后的inner表。具体操作,请参见物化视图inner表在不同分片不一致。
在变配页面,根据您的业务需求,配置部署方案、可用区、专有网交换机以及停写时间。
说明升级为多可用区部署会发生数据迁移,为了保证迁移的成功率,停写时间有以下要求:
建议将停写时间至少设置为30分钟。
升级必须在配置变更创建后的5天内结束,因此,结束停写时间的日期必须小于或等于
当前日期+5。为了降低迁移对您业务的影响,建议您设置的停写时间范围处于您的业务低峰时段。
如果集群中包含 Kafka/RabbitMQ 引擎表:当变更任务进入数据迁移阶段(表结构迁移完成后),请执行步骤四,在集群上重建 Kafka/RabbitMQ 引擎表,使增量数据恢复流动并同步到新节点。
在配置的停写窗口到来之前,请执行步骤五,删除集群上的 Kafka/RabbitMQ 引擎表及其下游物化视图,以防止停写期间消息堆积导致数据不一致。
单击立即购买,并根据页面提示完成支付。
升级为多可用区部署预计等待30分钟以上,等待时长和数据量相关。具体任务以控制台显示的集群状态为准,当集群状态由水平变配中转变为运行中时,表示升级完成。
步骤四:数据迁移阶段重建 Kafka/RabbitMQ 引擎表
当变配任务进入数据迁移阶段(表结构迁移完成后),使用之前保存的 DDL 语句重建 Kafka/RabbitMQ 引擎表及其下游物化视图。重建后,增量数据恢复流动并自动同步到新集群节点。
如果您在步骤一中对隐式目标表执行了 RENAME 操作,请在重建物化视图时使用 TO 子句指向重命名后的目标表。关于 TO 子句的更多信息,请参见 CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (using TO clause pointing to the renamed target table)
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;步骤五:停写前删除 Kafka/RabbitMQ 引擎表
在配置的停写窗口到来之前,删除集群上的 Kafka/RabbitMQ 引擎表及其下游物化视图,以停止增量数据写入并确保最终数据同步的一致性。
-- Delete materialized views first
DROP TABLE <database>.<materialized_view_name> ON CLUSTER default;
-- Then delete Kafka/RabbitMQ engine tables
DROP TABLE <database>.<kafka_or_rabbitmq_table_name> ON CLUSTER default;步骤六:变配完成后重建 Kafka/RabbitMQ 引擎表
变配任务完成后,使用之前保存的 DDL 语句在已完成变配的集群上重建 Kafka/RabbitMQ 引擎表及其下游物化视图,以恢复增量数据消费管道。
如果您在步骤一中对隐式目标表执行了 RENAME 操作,请在重建物化视图时使用 TO 子句指向重命名后的目标表。关于 TO 子句的更多信息,请参见 CREATE MATERIALIZED VIEW.
-- Rebuild Kafka/RabbitMQ engine tables
CREATE TABLE <database>.<kafka_or_rabbitmq_table_name> (...)
ENGINE = Kafka/RabbitMQ
SETTINGS ...;
-- Rebuild materialized view (using TO clause pointing to the renamed target table)
CREATE MATERIALIZED VIEW <database>.<materialized_view_name> TO <database>.<new_target_table_name>
AS SELECT ... FROM <database>.<kafka_or_rabbitmq_table_name>;步骤七:迁移非MergeTree类型表的业务数据
登录集群,通过OSS迁移步骤二:备份非MergeTree类型表的业务数据备份的数据。具体操作,请参见从OSS导入数据。
企业版
登录云数据库ClickHouse控制台,在页面左上角,选择集群所在地域,然后在集群列表页面,单击企业版实例列表页签。
单击目标集群的实例ID,进入集群详情页。
单击左侧导航栏的集群信息,在集群属性区域下,单击部署模式后方的升级到多可用区部署。
在升级到多可用区部署弹窗中,配置可用区和升级时间,然后单击确定。
升级为多可用区部署预计等待20分钟以上,等待时长和数据量相关。具体任务执行状态以控制台显示的集群状态为准,当集群状态由变配中转变为运行中时,表示升级完成。