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 恢复数据

  1. 模拟删除备份过的表;

    $ echo "drop table t_order_mt" | clickhouse-client
    
  2. 重新创建表;

    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);
    
  3. 将备份数据复制到 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 标志一起使用)以避免复制数据。

  4. 执行 attach;

    $ echo "alter table t_order_mt attach partition 20211001" | clickhouse-client
    
  5. 查看数据;

    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 恢复数据

  1. 模拟删除备份过的表;

    $ echo "drop table t_order_rmt" | clickhouse-client
    
  2. 恢复备份数据;

    # 查看备份列表
    $ sudo clickhouse-backup list
    
    # 恢复数据
    $ sudo clickhouse-backup restore xxx
    
    • –schema 参数:只还原表结构;
    • –data 参数:只还原数据;
    • –table 参数:备份(或还原)特定表,也可使用正则表达式;

5.2.5 其它说明

  1. API 文档:AlexAkulov/clickhouse-backup

  2. 注意事项:切勿更改文件夹/var/lib/clickhouse/backup的权限,可能会导致数据损坏;

  3. 远程备份:

    • 修改配置里 s3 相关的配置;

    • 上传:sudo clickhouse-backup upload xxx

    • 下载:sudo clickhouse-backup download xxx;

    • 保存周期:

      • backups_to_keep_local,本地保存周期,单位天;
      • backups_to_keep_remote,远程存储保存周期,单位天;
      • 0 均表示不删除;
posted @ 2022-05-26 15:36  Hit不死的小强  阅读(493)  评论(0编辑  收藏  举报