ClickHouse监控及备份
ClickHouse监控及备份
1. ClickHouse 监控概述
ClickHouse 运行时会将一些自身的运行状态记录到众多系统表中(system.*)。所以对于 ClickHouse 自身的一些运行指标的监控数据,也主要来自这些系统表。
直接查询系统表有一些不足之处:
- 太过底层,不够直观,需要在此之上实现可视化;
- 系统表只记录了 ClickHouse 自己的运行指标,有时需要与外部系统的指标进行关联分析,例如 ZooKeeper、服务器 CPU、IO 等;
现在 Prometheus + Grafana 的组合比较流行,安装简单易上手,可以集成很多框架,包括服务器的负载,其中 Prometheus 负责收集各类系统的运行指标,Grafana 负责可视化展示。
ClickHouse 从 v20.1.2.4 开始,内置了对接 Prometheus 的功能,配置的方式也很简单,可以将其作为 Prometheus 的 Endpoint 服务,从而自动的将 metrics、events 和 asynchronous_metrics 三张系统表的数据发送给 Prometheus。
2. Prometheus&Grafana 安装
Prometheus 下载地址:Download | Prometheus
Grafana 下载地址:Download Grafana | Grafana Labs
2.1 Prometheus 安装
Prometheus 基于 Golang 编写,编译后的软件包,不依赖于任何第三方依赖。只需要下载对应平台的二进制包,解压并且添加基本的配置即可正常启动 Prometheus Server。
2.1.1 下载安装包
$ wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
2.1.2 解压安装包
# 解压
$ tar -zxvf prometheus-2.30.3.linux-amd64.tar.gz -C /opt/
# 重命名
$ mv /opt/prometheus-2.30.3.linux-amd64 /opt/prometheus
2.1.3 修改配置
$ vim /opt/prometheus/prometheus.yml
# 在 scrape_configs 下添加以下配置
- job_name: "ClickHouse"
static_configs:
- targets: ["localhost:9363"]
2.1.4 启动 Prometheus Server
$ nohup /opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml > /opt/prometheus/prometheus.log 2>&1 &
浏览器访问:http://localhost:9090
2.2 Grafana 安装
2.2.1 下载安装包
$ wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.2.linux-amd64.tar.gz
2.2.2 解压安装包
# 解压
$ tar -zxvf grafana-enterprise-8.2.2.linux-amd64.tar.gz -C /opt/
# 重命名
$ mv /opt/grafana-8.2.2 /opt/grafana
2.2.3 启动 Grafana Server
$ nohup /opt/grafana/bin/grafana-server web > /opt/grafana/grafana.log 2>&1 &
浏览器访问:http://localhost:3000
默认用户名密码:admin
3. ClickHouse 配置
3.1 修改配置文件
编辑/etc/clickhouse-server/config.xml
,打开以下配置:
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
3.2 重启 ClickHouse
$ sudo systemctl restart clickhouse-server
3.3 访问 Web
浏览器访问:http://localhost:9363
4. Grafana 集成 Prometheus
4.1 添加 Prometheus 数据源
Configuration -> Data Sources
4.2 添加监控
Grafana 社区找到相应的 Dashboard 模板,下载并导入该 JSON 文件。
Dashboard -> Import
5. 备份及恢复
官网:Data Backup | ClickHouse Documentation
5.1 手动实现备份及恢复
ClickHouse 允许使用 ALTER TABLE ... FREEZE PARTITION ...
查询以创建表分区的本地副本。 这是利用硬链接(hardlink)到 /var/lib/clickhouse/shadow/
文件夹中实现的,所以它通常不会因为旧数据而占用额外的磁盘空间。 创建的文件副本不由 ClickHouse 服务器处理,所以不需要任何额外的外部系统就有一个简单的备份。为了防止硬件问题,最好将它们远程复制到另一个位置,然后删除本地副本。
5.1.1 创建备份路径
# 创建目录
$ sudo mkdir -p /var/lib/clickhouse/shadow/
# 修改所属用户和组
$ sudo chown clickhouse:clickhouse shadow
5.1.2 执行备份操作
$ echo -n "alter table t_order_mt freeze" | clickhouse-client
5.1.3 将备份数据保存到其它路径
# 创建备份存储路径
$ sudo mkdir -p /var/lib/clickhouse/backup/
# 备份数据
$ sudo cp -r /var/lib/clickhouse/shadow /var/lib/clickhouse/backup/backup-name
# 删除 shadow
$ sudo rm -rf /var/lib/clickhouse/shadow/*
5.1.4 恢复数据
-
模拟删除备份过的表;
$ echo "drop table t_order_mt" | clickhouse-client
-
重新创建表;
CREATE TABLE t_order_mt ( id UInt32, sku_id String, total_amount Decimal(16, 2), create_time DateTime ) ENGINE = MergeTree PARTITION BY toYYYYMMDD(create_time) PRIMARY KEY (id) ORDER BY (id, sku_id);
-
将备份数据复制到 detached 目录;
$ sudo cp -rl /var/lib/clickhouse/backup/backup-name/1/store/4ad/4ad7b06b-813a-4c1a-8ad7-b06b813a9c1a/* /var/lib/clickhouse/data/default/t_order_mt/detached/ # 修改所属用户和组 $ sudo chown -R clickhouse:clickhouse /var/lib/clickhouse/data/default/t_order_mt/detached
ClickHouse 使用文件系统硬链接来实现即时备份,而不会导致 ClickHouse 服务停机(或锁定)。这些硬链接可以进一步用于有效的备份存储,在支持硬链接的文件系统(例如本地文件系统或 NFS)上,将 cp 与 -l 标志一起使用(或将 rsync 与 -hard-links 和 -numeric-ids 标志一起使用)以避免复制数据。
-
执行 attach;
$ echo "alter table t_order_mt attach partition 20211001" | clickhouse-client
-
查看数据;
SELECT * FROM default.t_order_mt;
5.2 通过 ClickHouse-backup 自动
5.2.1 下载并安装
# 下载
$ wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v1.2.0/clickhouse-backup_1.2.0_amd64.deb
# 安装
$ sudo apt install ./clickhouse-backup_1.2.0_amd64.deb
5.2.2 配置文件
$ cat /etc/clickhouse-backup/config.yml.example
general:
remote_storage: none
max_file_size: 107374182400
disable_progress_bar: true
backups_to_keep_local: 0
backups_to_keep_remote: 0
log_level: info
allow_empty_backups: false
download_concurrency: 1
upload_concurrency: 1
clickhouse:
username: default
password: ""
host: localhost
port: 9000
disk_mapping: {}
skip_tables:
- system.*
timeout: 5m
freeze_by_part: false
secure: false
skip_verify: false
sync_replicated_tables: false
log_sql_queries: false
config_dir: /etc/clickhouse-server/
restart_command: systemctl restart clickhouse-server
debug: false
s3:
access_key: ""
secret_key: ""
bucket: ""
endpoint: ""
region: us-east-1
acl: private
assume_role_arn: ""
force_path_style: false
path: ""
disable_ssl: false
compression_level: 1
compression_format: tar
sse: ""
disable_cert_verification: false
storage_class: STANDARD
concurrency: 1
part_size: 0
debug: false
gcs:
credentials_file: ""
credentials_json: ""
bucket: ""
path: ""
compression_level: 1
compression_format: tar
debug: false
endpoint: ""
cos:
url: ""
timeout: 2m
secret_id: ""
secret_key: ""
path: ""
compression_format: tar
compression_level: 1
api:
listen: localhost:7171
enable_metrics: true
enable_pprof: false
username: ""
password: ""
secure: false
certificate_file: ""
private_key_file: ""
create_integration_tables: false
ftp:
address: ""
timeout: 2m
username: ""
password: ""
tls: false
path: ""
compression_format: tar
compression_level: 1
concurrency: 1
debug: false
sftp:
address: ""
port: 22
username: ""
password: ""
key: ""
path: ""
compression_format: tar
compression_level: 1
concurrency: 1
azblob:
endpoint_suffix: core.windows.net
account_name: ""
account_key: ""
sas: ""
use_managed_identity: false
container: ""
path: ""
compression_level: 1
compression_format: tar
sse_key: ""
5.2.3 创建备份
# 可用命令
$ clickhouse-backup help
# 查看可备份表
$ clickhouse-backup tables
# 创建备份
$ sudo clickhouse-backup create
# 查看现有备份
$ sudo clickhouse-backup list
备份存储在/var/lib/clickhouse/backup/BACKUPNAME
目录。备份名称默认为时间戳,但是可以选择使用-name
参数指定备份名称。备份包含两个目录:一个metadata
目录,其中包含重新创建架构所需的 DDL SQL 语句;以及一个shadow
目录,其中包含作为ALTER TABLE ... FREEZE
操作的结果。
5.2.4 恢复数据
-
模拟删除备份过的表;
$ echo "drop table t_order_rmt" | clickhouse-client
-
恢复备份数据;
# 查看备份列表 $ sudo clickhouse-backup list # 恢复数据 $ sudo clickhouse-backup restore xxx
- –schema 参数:只还原表结构;
- –data 参数:只还原数据;
- –table 参数:备份(或还原)特定表,也可使用正则表达式;
5.2.5 其它说明
-
API 文档:AlexAkulov/clickhouse-backup;
-
注意事项:切勿更改文件夹
/var/lib/clickhouse/backup
的权限,可能会导致数据损坏; -
远程备份:
-
修改配置里 s3 相关的配置;
-
上传:
sudo clickhouse-backup upload xxx
; -
下载:
sudo clickhouse-backup download xxx
; -
保存周期:
- backups_to_keep_local,本地保存周期,单位天;
- backups_to_keep_remote,远程存储保存周期,单位天;
- 0 均表示不删除;
-
本文作者:Hit不死的小强
本文链接:https://www.cnblogs.com/xiaoQQya/p/16313684.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步