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将源实例数据读出,然后写入目标实例。