ClickHouse从入门到精通-监控与备份¶
1 ClickHouse 监控概述¶
ClickHouse
运行时会将一些个自身的运行状态记录到众多系统表中( system.*
)。所以我们对于 CH
自身的一些运行指标的监控数据,也主要来自这些系统表。
但是直接查询这些系统表会有一些不足之处:
-
这种方式太过底层,不够直观,我们还需要在此之上实现可视化展示;
-
系统表只记录了
CH
自己的运行指标,有些时候我们需要外部系统的指标进行关联分析,例如ZooKeeper
、服务器CPU
、IO
等等。
现在 Prometheus + Grafana
的组合比较流行,安装简单易上手,可以集成很多框架,包括服务器的负载,其中 Prometheus
负责收集各类系统的运行指标; Grafana
负责可视化的部分。
ClickHouse
从 v20.1.2.4
开始,内置了对接 Prometheus
的功能,配置的方式也很简单,可以将其作为 Prometheus
的 Endpoint
服务,从而自动的将 metrics
、 events
和 asynchronous_metrics
三张系统的表的数据发送给 Prometheus
。
2 Prometheus&Grafana 的安装¶
Prometheus
下载地址:https://prometheus.io/download/
Grafana
下载地址:https://grafana.com/grafana/download
2.1 安装 Prometheus¶
Prometheus
基于 Golang
编写,编译后的软件包,不依赖于任何的第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server
。
2.1.1 上传安装包¶
上传 prometheus-2.26.0.linux-amd64.tar.gz
到虚拟机的 /opt/software
目录
2.1.2 解压安装包¶
-
解压到
/opt/module
目录下Bash 1
[atguigu@hadoop1 software]$ tar -zxvf prometheus-2.26.0.linux-amd64.tar.gz -C /opt/module
-
修改目录名
Bash 1 2
[atguigu@hadoop1 ~] cd /opt/module [atguigu@hadoop1 module] mv prometheus-2.26.0.linux-amd64 prometheus-2.26.0
2.1.3 修改配置文件 prometheus.yml¶
Bash | |
---|---|
1 |
|
在 scrape_configs
配置项下添加配置:
Bash | |
---|---|
1 2 3 4 5 6 7 8 9 |
|
配置说明:
-
global
配置块:控制Prometheus
服务器的全局配置-
scrape_interval
:配置拉取数据的时间间隔,默认为1
分钟。 -
evaluation_interval
:规则验证(生成alert
)的时间间隔,默认为1
分钟。
-
-
rule_files
配置块:规则配置文件 -
scrape_configs
配置块:配置采集目标相关,prometheus
监视的目标。Prometheus
自身的运行信息可以通过HTTP
访问,所以Prometheus
可以监控自己的运行数据。-
job_name
:监控作业的名称 -
static_configs
:表示静态目标配置,就是固定从某个target
拉取数据 -
targets
:指定监的目标,其实就是从哪儿拉取数据。
-
Prometheus
会从http://hadoop1:9090/metrics上拉取数据。 Prometheus
是可以在运行时自动加载配置的。启动时需要添加: --web.enable-lifecycle
2.1.4 启动 Prometheus Server¶
Bash | |
---|---|
1 |
|
-
浏览器输入:
-
点击
Status
,选中Targets
:
prometheus
是 up
状态,表示安装启动成功。
2.2 Grafana 安装¶
2.2.1 上传并解压¶
-
将
grafana-7.5.2.linux-amd64.tar.gz
上传至/opt/software/
目录下,解压:Bash 1
[atguigu@hadoop1 software]$ tar -zxvf grafana-7.5.2.linux-amd64.tar.gz -C /opt/module/
-
更改名字
Bash 1
[atguigu@hadoop1 module]$ mv grafana-7.5.2.linux-amd64 grafana-7.5.2
2.2.2 启动 Grafana¶
Bash | |
---|---|
1 |
|
打开 web
:http://hadoop1:3000,默认用户名和密码: admin
3 ClickHouse 配置¶
3.1 修改配置文件¶
编辑 /etc/clickhouse-server/config.xml
,打开如下配置:
Bash | |
---|---|
1 2 3 4 5 6 7 8 |
|
如果有多个 CH
节点,分发配置。
3.2 重启 ClickHouse¶
Bash | |
---|---|
1 |
|
Float64 - double
建议尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,如时间用毫秒为单位表示,因为浮点型进行计算时可能引起四舍五入的误差。
使用场景:一般数据值比较小,不涉及大量的统计计算,精度要求不高的时候。比如保存商品的重量。
3.3 访问 Web 查看¶
浏览器打开:http://hadoop1:9363/metrics
看到信息说明 ClickHouse
开启 Metrics
服务成功。
4 Grafana 集成 Prometheus¶
4.1 添加数据源 Prometheus¶
-
点击配置,点击
Data Sources
: -
点击添加按钮:
-
找到
Prometheus
,点击Select
-
配置
Prometheus Server
地址: -
点击下方的
Save&Test
: -
出现绿色的提示框,表示与
Prometheus
正常联通: -
点击
Back
返回即可,可以看到Data Sources
页面,出现了添加的Prometheus
:
4.2 添加监控¶
手动一个个添加 Dashboard
比较繁琐, Grafana
社区鼓励用户分享 Dashboard
,通过https://grafana.com/dashboards网站,可以找到大量可直接使用的 Dashboard
模板。
Grafana
中所有的 Dashboard
通过 JSON
进行共享,下载并且导入这些 JSON
文件,就可以直接使用这些已经定义好的 Dashboard
。
-
点击左侧
+
号,选择import
: -
上传
JSON
文件:
5 备份及恢复¶
官网:https://clickhouse.tech/docs/en/operations/backup/
5.1 手动实现备份及恢复¶
ClickHouse
允许使用 ALTER TABLE ... FREEZE PARTITION ...
查询以创建表分区的本地副本。这是利用硬链接( hardlink
)到 /var/lib/clickhouse/shadow/
文件夹中实现的,所以它通常不会因为旧数据而占用额外的磁盘空间。创建的文件副本不由 ClickHouse
服务器处理,所以不需要任何额外的外部系统就有一个简单的备份。防止硬件问题,最好将它们远程复制到另一个位置,然后删除本地副本。
5.1.1 创建备份路径¶
创建用于存放备份数据的目录 shadow
Bash | |
---|---|
1 |
|
如果目录存在,先清空目录下的数据
5.1.2 执行备份命令¶
Bash | |
---|---|
1 |
|
5.1.3 将备份数据保存到其他路径¶
Bash | |
---|---|
1 2 3 4 5 6 |
|
5.1.4 恢复数据¶
-
模拟删除备份过的表
Bash 1
echo ' drop table t_order_mt ' | clickhouse-client
-
重新创建表
Bash 1
cat events.sql | clickhouse-client
-
将备份复制到
detached
目录Bash 1
sudo cp -rl backup/my-backup-name/1/store/cb1/cb176503-cd88-4ea8-8b17-6503cd888ea8/* data/default/t_order_mt/detached/
ClickHouse
使用文件系统硬链接来实现即时备份,而不会导致ClickHouse
服务停机(或锁定)。这些硬链接可以进一步用于有效的备份存储。在支持硬链接的文件系统(例如本地文件系统或NFS
)上,将cp
与-l
标志一起使用(或将rsync
与-hard-links
和-numeric-ids
标志一起使用)以避免复制数据。注意:仅拷贝分区目录,注意目录所属的用户要是
clickhouse
-
执行
attach
Bash 1
echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client
-
查看数据
Bash 1
echo 'select count() from t_order_mt' | clickhouse-client
5.2 使用 clickhouse-backup¶
上面的过程,我们可以使用 Clickhouse
的备份工具 clickhouse-backup
帮我们自动化实现。
工具地址:https://github.com/AlexAkulov/clickhouse-backup/
5.2.1 上传并安装¶
将 clickhouse-backup-1.0.0-1.x86_64.rpm
上传至 /opt/software/
目录下,安装:
Bash | |
---|---|
1 |
|
5.2.2 配置文件¶
Bash | |
---|---|
1 |
|
5.2.3 创建备份¶
-
查看可用命令
Bash 1
[atguigu@hadoop1 ~]$ clickhouse-backup help
-
显示要备份的表
Bash 1
[atguigu@hadoop1 ~]$ clickhouse-backup tables
-
创建备份
Bash 1
[atguigu@hadoop1 ~]$ sudo clickhouse-backup create
-
查看现有的本地备份
Bash 1
[atguigu@hadoop1 ~]$ sudo clickhouse-backup list
备份存储在中
/var/lib/clickhouse/backup/BACKUPNAME
。备份名称默认为时间戳,但是可以选择使用-name
标志指定备份名称。备份包含两个目录:一个metadata
目录,其中包含重新创建架构所需的DDL SQL
语句;以及一个shadow
目录,其中包含作为ALTER TABLE ... FREEZE
操作结果的数据。
5.2.4 从备份恢复数据¶
-
模拟删除备份过的表
Bash 1
echo 'drop table t_order_rmt' | clickhouse-client
-
从备份还原
Bash 1
sudo clickhouse-backup restore 2021-07-25T23-14-50
--schema
参数:只还原表结构。--data
参数:只还原数据。--table
参数:备份(或还原)特定表。也可以使用一个正则表达式,例如,针对特定的数据库:--table=dbname.*
。
5.2.5 其他说明¶
-
API
文档:https : //github.com/AlexAkulov/clickhouse-backup#api
-
注意事项:切勿更改文件夹
/var/lib/clickhouse/backup
的权限,可能会导致数据损坏。 -
远程备份
-
较新版本才支持,需要设置
config
里的s3
相关配置 -
上传到远程存储:
sudo clickhouse-backup upload xxxx
-
从远程存储下载:
sudo clickhouse-backup download xxxx
-
保存周期:
backups_to_keep_local
,本地保存周期,单位天backups_to_keep_remote
,远程存储保存周期,单位天 `0 均表示不删除
-