ClickHouse集群运维实践

ClickHouse集群运维策略包括监控方案,包括metric采集、报警策略、图形化报表。业界常用的监控方案一般是基于prometheus + grafana生态。由clickhouse-exporter (node-exporter) + prometheus + grafana组成的监控方案。

此外,ClickHouse还有多种分布式集群方案,例如:MergeTree + Distributed方案,它利用了Distributed表的特性+MergeTree表的特性,分布式表不存储数据,数据来自本地表。还有MergeTree + Distributed+集群复制方案,它结合了分布式方案一的优势和问题,考虑数据的安全性,设置了副本。

1. ClickHouse监控方案

ClickHouse监控方案包括metric采集、报警策略、图形化报表。业界常用的监控方案一般是基于prometheus + grafana生态。由clickhouse-exporter (node-exporter) + prometheus + grafana组成的监控方案。

clickhouse-server中有4个系统表会记录进程内部的指标,分别是system.metrics,system.asynchronous_metrics, system.events,system.parts。clickhuse-exporter是一个用于采集clickhouse指标的开源组件,它会定时查询clickhouse-server中的系统表,转化成监控指标,并通过HTTP接口暴露给prometheus。node-exporter是一个用于采集硬件和操作系统相关指标的开源组件。prometheus定时抓取clickhouse-exporter暴露的指标,并判断报警条件是否被触发,是则推送到alert manager。DBA可通过grafana看板实时查看当前clickhouse集群的运行状态,也可通过alertmanager设置报警通知方式,如邮件、企业微信、电话等。

2. ClickHouse MergeTree + Distributed方案

ClickHouse MergeTree + Distributed方案利用了Distributed表的特性+MergeTree表的特性,分布式表不存储数据,数据来自本地表。将分布式表的数据分为多个shard,每台节点存储一部分的数据,用户查询的时候是从分布式表所在的节点聚合从各个节点的查询结果,然后返回用户。写入数据可以写入分布式表,当然这样的写入方式问题很多,一般是禁止写入分布式表的,那么选择写入本地表的化,需要将数据轮询或者其他方式,将数据分散写入各个节点。

这种方案优势在于架构简单,可以单机使用,可以分布式使用,关键在于表引擎的选择,并行的查询分布式表,性能非常棒。但是问题在于本地表+分布式表,分布式表如果某个节点当机就会丢失数据,用户查询服务就会报错,如果节点磁盘损坏,那么数据将大概率丢失,无法恢复,即使恢复也会付出极大的成本。对于查询节点的选择需要慎重的考虑,毕竟需要聚合所有查询节点的结果。

3. ClickHouse MergeTree + Distributed+集群复制方案

ClickHouse MergeTree + Distributed+集群复制方案结合了分布式方案一的优势和问题,考虑数据的安全性,设置了副本。数据安全性得到了解决,集合CLickHouse集群的复制,有了副本,多个shard各自拥有一部分的数据,每个shard有多个副本,数据一样。

这种方案优势在于数据安全性得到了解决,利用的是Distributed表的特性+MergeTree表的特性,分布式表不存储数据,数据来自本地表。并行的查询分布式表,性能非常棒。

4. ClickHouse其他分布式集群方案

除了上述两种方案,ClickHouse还有其他分布式集群方案。例如,可以使用ReplicatedMergeTree引擎,它基于MergeTree引擎,同时引入ZK,做了复制。也可以使用Distributed引擎,它是分布式引擎,本身不存储数据,可认为就是一张View,如果写入,会把请求丢到集群里的节点(有算法控制),如果查询,会帮你做查询转发再聚合返回。

5. ClickHouse Distributed引擎

ClickHouse Distributed引擎是分布式引擎,本身不存储数据,可认为就是一张View。如果写入,会把请求丢到集群里的节点(有算法控制),如果查询,会帮你做查询转发再聚合返回。这种方案可以实现数据的分布式存储和查询。

6. 集群扩容和缩容操作

ClickHouse集群扩容和缩容操作可以通过控制台进行。扩容可以通过水平扩容增加集群节点,提高集群的计算和存储能力。缩容可以通过水平缩容减少集群节点,降低集群的计算能力。此外,ClickHouse还支持数据重分布功能,提供了白屏化的方式,支持Part或Resharding的模式对数据进行集群均衡。

6.1 ClickHouse水平扩容和水平缩容

ClickHouse水平缩容可以通过控制台进行。水平缩容可以减少集群节点,降低集群的计算能力。下面是实现方法和步骤:

1. 登录云数据库ClickHouse控制台。
2. 在页面左上角,选择集群所在地域。
3. 在集群列表页面,选择默认实例列表。
4. 在目标集群ID的操作列,单击变更配置>水平缩容。
5. 在弹出的缩容检测窗口,查看检测状态。检测成功后,根据您的业务需求减少节点数量。
6. 完成支付后,等待缩容完成。

6.2 ClickHouse数据重分布功能

ClickHouse数据重分布功能提供了白屏化的方式,支持Part或Resharding的模式对数据进行集群均衡。下面是实现方法和步骤:

1. 登录云数据库ClickHouse控制台。
2. 在集群列表中选择对应的集群,在集群详情页面单击数据重分布页面。
3. 单击新建任务创建新的数据重分布任务,需填写任务名称、选择表所在的v_cluster,选择迁移模式(Part、Resharding)、选择迁移的分布式表,单击确定提交。
4. 创建完数据重分布任务后,可以对任务进行启动、编辑、删除。
5. 单击启动,可以开始数据重分布任务。

7. 集群监控和故障排查

ClickHouse集群监控可以通过控制台查看集群监控信息。业界常用的监控方案一般是基于prometheus + grafana生态。由clickhouse-exporter (node-exporter) + prometheus + grafana组成的监控方案。DBA可通过grafana看板实时查看当前clickhouse集群的运行状态,也可通过alertmanager设置报警通知方式,如邮件、企业微信、电话等。

故障排查可以通过查看日志和监控信息来进行。如果出现故障,可以根据日志和监控信息来定位问题,然后进行相应的处理。

8. ClickHouse备份策略

ClickHouse有多种备份策略。一种是通过`ALTER TABLE…FREEZE`功能提供了对即时时间点备份的本地支持。另一种是使用第三方工具,如`clickhouse-backup`,它有助于自动化备份过程。

为了有效地减少可能的人为错误,您应该提前仔细的准备备份和数据还原的策略。不同公司有不同的可用资源和业务需求,因此不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。适用于1GB数据的方案可能并不适用于几十PB数据的情况。有多种具备各自优缺点的可能方法,将在下面对其进行讨论。最好使用几种方法而不是仅仅使用一种方法来弥补它们的各种缺点。

8.1 执行备份操作

执行备份操作的方法取决于您选择的备份策略。例如,如果您选择使用`ALTER TABLE…FREEZE`功能进行备份,那么您可以在ClickHouse客户端中执行`ALTER TABLE table_name FREEZE`命令来创建表的本地副本。如果您选择使用第三方工具,如`clickhouse-backup`,则需要按照工具的文档进行操作。

8.2 数据恢复方法

数据恢复方法取决于您选择的备份策略。例如,如果您使用`ALTER TABLE…FREEZE`功能进行备份,那么可以使用`ALTER TABLE ... ATTACH PARTITION ...`从备份中恢复数据。如果您使用第三方工具,如`clickhouse-backup`,则需要按照工具的文档进行操作。

9. 软件升级和迁移

9.1 ClickHouse版本升级注意事项

在升级ClickHouse版本之前,有几点需要注意:

1. 确保磁盘空间足够。在进行数据备份之前,先确认原始数据大小和磁盘剩余空间大小,如果不够,需要扩容。
2. 升级到每个版本时,必须等初始化完成后才能进行stop等别的操作。一般升级到某个版本后,需要等3-5分钟才能初始化完成(可能与数据量有关系,数据量小可能比较短),确认是否初始化完成,可以进入容器目录/var/log/clickhouse-server,tail -f clickhouse-server.log。
3. 准备好数据回退方案。如果升级失败,需要回退到老版本,则停止掉新容器,重启老容器即可。

9.2 升级步骤和方法

升级ClickHouse版本的步骤和方法取决于当前的安装方式。例如,如果从deb包安装ClickHouse,可以在服务器上执行以下命令来升级版本:

$ sudo apt-get update
$ sudo apt-get install clickhouse-client clickhouse-server
$ sudo service clickhouse-server restart

如果使用除推荐的deb包之外的其他方式安装ClickHouse,请使用适当的更新方法。注意,ClickHouse不支持分布式更新。该操作应在每个单独的服务器上连续执行。不要同时更新群集上的所有服务器,否则群集将在一段时间内不可用。

9.3 数据迁移策略和操作

ClickHouse数据迁移策略和操作取决于你的具体需求。例如,如果你需要在集群间进行数据迁移,可以使用云数据库ClickHouse提供的数据迁移功能,它支持全量迁移和增量迁移。非MergeTree类型的表(例如,外表、Log表等)仅支持迁移表结构。因此当源集群存在非MergeTree类型的表时,若使用数据迁移功能,目标集群中非MergeTree类型的表只有表结构没有具体的业务数据。

如果无法进行网络连通操作,建议在源实例将数据导出为文件,然后通过clickhouse-client将文件导入到目标实例云数据库ClickHouse。如果无法进行网络连通操作,但是已经有了Spark、Flink等基础设施,也可以尝试编写Spark、Flink job将源实例数据读出,然后写入目标实例。

 

### ClickHouse 备份方法 对于 ClickHouse 数据库而言,备份操作可以通过多种方式进行。一种常见的做法是利用文件系统的快照功能来创建数据副本[^1]。这种方法适用于大多数存储系统,并能有效减少停机时间。 另一种方式则是通过 SQL 命令导出表结构与数据到外部介质上保存。这通常涉及到 `CREATE TABLE ... AS SELECT` 或者使用命令行工具如 clickhouse-client 来执行相应的查询语句并重定向输出至目标位置[^2]。 为了确保备份过程的安全性和可靠性,在实际应用中建议采用如下最佳实践: - 定期验证备份的有效性; - 将备份存放在异地以防本地灾难发生; - 使用压缩算法减小所需空间开销; ```sql -- 导出指定日期范围内的订单记录作为备份 SELECT * FROM orders WHERE order_date >= '2023-01-01' AND order_date < '2024-01-01' INTO OUTFILE '/path/to/backup/orders_2023.csv' FORMAT CSV; ``` ### 集群迁移策略 当面临 ClickHouse 集群规模扩展需求时,可以考虑实施有计划的数据迁移方案。此过程中应特别注意保持服务连续性以及最小化对现有业务的影响。 针对大规模分布式环境下的对象存储系统扩容问题已有研究提出了受控迁移机制 MAPX,该技术能够帮助实现平滑过渡而不影响正常读写性能。 自动化运维管理同样扮演着重要角色。面对成千上百台服务器组成的复杂架构,借助专门设计的软件平台来进行部署、升级等一系列任务显得尤为必要[^3]。这些工具不仅提高了工作效率还降低了人为错误的风险。 在具体执行层面,推荐遵循以下原则: - 提前规划好新旧节点之间的网络连接配置; - 测试迁移脚本以确认其稳定运行; - 实施分阶段逐步转移而非一次性完成全部工作负载; ```bash # 示例:向新的ClickHouse实例同步部分分区数据 clickhouse-client --query="ALTER TABLE my_table MOVE PARTITION '202301' TO DISK 'new_disk'" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值