Skip to content

YenchangChan/ch2s3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

功能介绍

ch2s3, 从字面意义上理解,就是将clickhouse的数据备份到S3对象存储上的意思。它同时提供了数据恢复的功能。

通过该工具,可以非常便捷地批量将表按照分区备份到S3,并且所有数据都是可恢复的。

ch2s3利用clickhousebackup命令进行备份,在备份时会进行二次压缩,尽可能减小带宽压力和存储空间成本。对于有多副本的clickhouse集群,每个分片仅备份一个副本,不会重复存储数据。

该备份工具主要针对clickhouse集群,且表引擎为MergeTree的表,默认按照toYYYYMMDD格式的按天分区备份。如果有不同的分区方式,可自行指定分区。

之所以采用这种方式来备份,主要是为了将S3与clickhouse彻底解耦,如果将S3作为clickhouse的一块磁盘,如果S3出问题,很可能造成clickhouse集群无法正常工作。而ch2s3即使失败,也仅仅是备份失败,可以通过补数的方式重新备份,而不影响clickhouse集群的工作状态。

ch2s3会通过报表的形式输出每次备份的结果,包含一共备份了多少张表,成功了多少,失败了多少,每张表的条数,大小,耗时,以及总的大小和耗时。如果备份失败,也会罗列出失败原因,便于排障。

命令行参数

  • -p
    • 指定partition,可以指定单个,也可以指定多个,当同时指定多个时,以逗号进行分隔
    • 如果不指定,默认以今天作为partition
  • -ttl
    • 通过ttl的方式指定备份日期,比如可以指定7天前,3个月前,1年前的方式来动态备份
    • 注意通过指定ttl的方式备份时,注意清理备份后的原表数据(配置文件中clean设置为true),否则存在重复备份的风险
  • --restore
    • 是否恢复表, 如果指定了--restore, 代表这是一个恢复命令,它会将数据从S3恢复到原始表中。
    • 恢复表有几个前提:
      • S3上有原始数据, 且是通过ch2s3工具进行备份的
      • clickhouse集群有对应的表
      • 表内需要恢复的数据已被提前删除,否则恢复仍然可以成功,但是数据会重复
    • 如果指定了--restore选项,那么分区只能通过-p来指定,无法通过-ttl指定,因为原表数据已经不存在,我们已经无法通过查表的方式获取到具体的分区

配置文件

配置说明

配置文件放在conf目录下,配置文件名称为backup.json。包含以下内容:

  • clickhouse
配置项 默认值 是否必填 说明
cluster Y 集群名
hosts Y 二层数组,外层为shard,内层为replica
port 9000 Y clickhouse端口
user default Y clickhouse连接用户
password Y clickhouse连接密码
sshUser Y ssh连接用户
sshPassword Y ssh连接密码
sshPort 22 Y ssh连接端口
clean true N 备份成功后是否删除掉本地数据
database default Y 需要备份的数据库
tables Y 需要备份的表,数组形式,可以是多个表
readTimeout 21600 N client 连接超时时间, 默认6h
  • s3
配置项 默认值 是否必填 说明
endpoint Y S3端点地址,需要带bucket名
region Y S3区域
cleanIfFail false N 备份失败是否删除S3数据
accessKey Y 访问秘钥
secretKey Y 秘钥
compress_method lz4 N 压缩算法,支持lz4, lz4hc, zstd,deflate_qpl
compress_level 3 N 压缩等级
retry_times 0 N 备份失败重试次数,默认不重试
cleanIfFail false N 备份失败是否删除S3数据
checksum true N 是否开启校验和
use_path_style true N S3 SDK 默认使用 virtual-hosted style 方式。但某些对象存储系统可能没开启或没支持virtual-hosted style 方式的访问,此时我们可以添加 use_path_style 参数来强制使用 path style 方式。比如 minio默认情况下只允许path style访问方式,所以在访问minio时要设置为true

配置示例

{
    "clickhouse": {
        "cluster":"abc",
        "hosts":[
            ["192.168.101.93", "192.168.101.94"],
            ["192.168.101.96", "192.168.101.97"]
        ],
        "port": 19000,
        "username":"default",
        "password":"123456",
        "sshUser": "root",
        "sshPassword": "123456",
        "sshPort": 22,
		"clean": false,
        "database":"default",
        "tables":[
            "test_ck_dataq_r77",
            "test_ck_dataq_r76",
			"test_ck_dataq_r75",
			"test_ck_dataq_r74"
        ]
    },
    "s3":{
        "endpoint":"http://192.168.101.94:49000/backup",
        "accessKey":"VdmPbwvMlH8ryeqW",
        "secretKey":"8z16tUktXpvcjjy5M4MqXvCks5MMHb63",
        "region":"",
        "compression":"zstd",
        "checksum": false,
        "cleanIfFail": true
    },
    "loglevel": "debug"
}

如何使用

备份

  • 指定分区
./ch2s3 -p "20230731"
  • 指定TTL
./ch2s3 -ttl "5 DAY"  #备份5天前的数据
./ch2s3 -ttl "2 WEEK" #备份2周前的数据
./ch2s3 -ttl "3 MONTH" #备份3个月前的数据
./ch2s3 -ttl "1 YEAR" #备份1年前的数据 

恢复

  • 恢复一个分区
./ch2s3 -p "20230731" --restore
  • 恢复多个分区
./ch2s3 -p "19700101,20230101,20230731" --restore

报表

报表默认输出在reporter目录,示例如下:

Backup Date: 20230731

+--------------------------------+---------------+---------------+---------------+---------------+
|            table               |     rows      |  size(local)  |   elapsed     |    status     |
+--------------------------------+---------------+---------------+---------------+---------------+
|       default.test_ck_dataq_r77|       25442407|      48.93 GiB|         41 sec|        SUCCESS|
|       default.test_ck_dataq_r76|       20490054|      40.00 GiB|         24 sec|        SUCCESS|
|       default.test_ck_dataq_r75|       24731492|      48.16 GiB|         35 sec|        SUCCESS|
|       default.test_ck_dataq_r74|       16349252|      31.45 GiB|         26 sec|        SUCCESS|
+--------------------------------+---------------+---------------+---------------+---------------+

Total Tables: 4,  Success Tables: 4,  Failed Tables: 0,  Total Bytes: 168.53 GiB,  Elapsed: 126 sec

性能

开启checksum校验和的情况下,备份速度约300M/s,关闭checksum校验和,约660M/s。以上数据仅供参考,具体备份速度与硬件配置,网络质量均有关。

最佳实践

定时任务

可以通过crontab拉起定时任务的方式实现每日备份,比如需要备份1年前的数据,只需要配置好配置文件后,通过crontab拉起下面的脚本即可:

0 2 * * * /usr/local/ch2s3/bin/ch2s3 -ttl "1 YEAR" > /var/log/ch2s3.log

以上表示每天晚上2点整执行ch2s3备份,每次备份一年前的数据。

失败补数

假设20230731备份失败,那么可以通过手动执行下面命令重新备份该分区数据:

/usr/local/bin/ch2s3 -p "20230731"

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published