简易教程:ClickHouse 的数据备份与恢复(一)

简介: 数据备份是IT运营中不可或缺的重要部分。在“大数据”部署(例如分析数据库)中,它们最具挑战性。本文将探讨备份ClickHouse所涉及的管道,并介绍用于自动化过程的Clickhouse备份工具。

数据备份是IT运营中不可或缺的重要部分。在“大数据”部署(例如分析数据库)中,它们最具挑战性。本文将探讨备份ClickHouse所涉及的管道,并介绍用于自动化过程的Clickhouse备份工具。

ClickHouse内置的机复制支持可提供高可用性和针对单个节点故障的弹性。但是,极少数的灾难情况可能需要从备份中恢复数据。其中包括数据损坏以及分片或群集中所有副本的故障。

任何ClickHouse备份方案的关键组成部分都是“冻结”表。与所有数据库一样,一致的备份取决于ClickHouse处于“静默”状态。ClickHouse不必完全停止数据库,而对“冻结”表进行备份或迁移提供了本机支持。这是无停机时间的操作。


四个简单步骤中的手动备份


ClickHouse通过其 ALTER TABLE…FREEZE 功能提供了对即时时间点备份的本地支持。

  1. 确认您的影子目录为空:ls /var/lib/clickhouse/shadow/
  2. 冻结ClickHouse 数据表:
    echo -n 'alter table events freeze' | clickhouse-client
  3. 如果发生灾难,请保存备份:
cd /var/lib/clickhouse/
sudo mkdir backup
sudo cp -r shadow/ backup/my-backup-name
  1. 最后,为下次清理备份源:
    sudo rm -rf /var/lib/clickhouse/shadow/*

ClickHouse使用文件系统硬链接来实现即时备份,而不会导致ClickHouse服务停机(或锁定)。这些硬链接可以进一步用于有效的备份存储。在支持硬链接的文件系统(例如本地文件系统或NFS)上,将cp与-l标志一起使用(或将rsync与–hard-links和–numeric-ids标志一起使用)以避免复制数据。

当使用硬链接时,磁盘上的存储效率更高。因为它们依赖于硬链接,所以即使避免了重复使用磁盘空间,每个备份实际上都是“完整”备份。

测试您的备份

正确地说,如果未测试还原过程,则备份毫无价值。执行常规的测试还原,以确保您的数据在需要时就在那里。

以下是手动恢复的步骤:

  1. 删除测试表,或找到其他服务器进行测试。
  2. 创建测试表以进行恢复:
    cat events.sql | clickhouse-client
  3. 将您的备份复制到表的“ detached”目录中:

cd /var/lib/clickhouse

sudo cp -rl backup/my-backup-name/* data/default/events/detached/

  1. 附上分离的零件:
    echo 'alter table events attach partition 202006' | clickhouse-client
  2. 确认您的数据已还原:
    echo 'select count() from events' | clickhouse-client


使用以下方式自动化备份过程 clickhouse-backup


Alex Akulov创建的clickhouse-backup工具有助于自动化上述手动步骤:https : //github.com/AlexAkulov/clickhouse-backup。我们喜欢clickhouse-backup,并实现了一些新功能,在此首次进行介绍。

要开始使用,您需要安装clickhouse-backup。完整说明位于ReadMe.md文件中。这是从tarball安装的示例。还提供了RPM,Debian软件包和Docker映像。

wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.3/clickhouse-backup.tar.gz
tar -xf clickhouse-backup.tar.gz 
cd clickhouse-backup/ 
sudo cp clickhouse-backup /usr/local/bin 
clickhouse-backup -v

此博客文章中介绍的API功能和新的存储选项(例如'remote_storage')尚未在正式版本中提供。您需要从源代码构建或运行最新的docker映像。这是后者的一个例子。

docker run --rm -it --network host 
  -v "/var/lib/clickhouse:/var/lib/clickhouse" 
  -e CLICKHOUSE_PASSWORD="password" 
  -e S3_BUCKET="clickhouse-backup" 
  -e S3_ACCESS_KEY="access_key" 
  -e S3_SECRET_KEY="secret" 
  alexakulov/clickhouse-backup:master --help


对于本文的其余部分,我们假定您具有一个具有新功能的内部版本。在命令行上使用Clickhouse-backup时,需要配置文件。这是一个最小的示例。

$ cat /etc/clickhouse-backup/config.yml
general:
  remote_storage: none

您将需要为非默认的ClickHouse安装或身份验证添加其他配置选项。可以通过运行来创建完整的配置示例clickhouse-backup default-config。这是您使用的一个很好的起点,它显示了所有可用的设置。

配置完成后,clickhouse-backup将提供各种用于管理备份的子命令。

$ clickhouse-backup help
NAME:
clickhouse-backup - Tool for easy backup of ClickHouse with cloud support
...
COMMANDS:
   tables          Print list of tables
   create          Create new backup
   upload          Upload backup to remote storage
   list            Print list of backups
   download        Download backup from remote storage
   restore         Create schema and restore data from backup
   delete          Delete specific backup
   default-config  Print default config
   freeze          Freeze tables
   clean           Remove data in 'shadow' folder
   server          Run API server
   help, h         Shows a list of commands or help for one command

就像上面的手动备份示例一样,您将需要以Clickhouse用户身份使用sudo或运行clickhouse-backup

该配置文件允许忽略某些数据库或表。该tables子命令将向您显示要备份的表:

$ clickhouse-backup tables
default.events
system.metric_log   (ignored)
system.query_log    (ignored)
system.query_thread_log (ignored)
system.trace_log    (ignored)

创建备份非常简单:

$ sudo clickhouse-backup create
2020/07/06 20:13:02 Create backup '2020-07-06T20-13-02'
2020/07/06 20:13:02 Freeze `default`.`events`
2020/07/06 20:13:02 Skip `system`.`metric_log`
2020/07/06 20:13:02 Skip `system`.`query_log`
2020/07/06 20:13:02 Skip `system`.`query_thread_log`
2020/07/06 20:13:02 Skip `system`.`trace_log`
2020/07/06 20:13:02 Copy metadata
2020/07/06 20:13:02   Done.
2020/07/06 20:13:02 Move shadow
2020/07/06 20:13:02   Done.


如您在上面的示例中看到的,备份在同一秒内完成。

您可以查看现有的本地备份:

$ sudo clickhouse-backup list
Local backups:
- '2020-07-06T20-13-02' (created at 06-07-2020 20:13:02)


注意,出于性能原因,本地备份不计算“大小”。

clickhouse-backup如上所述,在内部尽可能使用硬链接。备份存储在中/var/lib/clickhouse/backup/BACKUPNAME。备份名称默认为时间戳,但是您可以选择使用–name标志指定备份名称。备份包含两个目录:一个“元数据”目录,其中包含重新创建架构所需的DDL SQL语句;以及一个“影子”目录,其中包含作为ALTER TABLE ... FREEZE操作结果的数据。

从备份还原也很容易。例如:

$ echo 'drop table events' | clickhouse-client
$ sudo clickhouse-backup restore 2020-07-06T20-13-02
2020/07/06 20:14:46 Create table `default`.`events`
2020/07/06 20:14:46 Prepare data for restoring `default`.`events`
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_1_1_4'
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_2_2_2'
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_3_3_3'
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_4_4_3'
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_5_5_2'
2020/07/06 20:14:46 ALTER TABLE `default`.`events` ATTACH PART '202006_6_6_1'


restore 子命令自动模式和数据恢复。如果只想还原架构,请使用可选--schema标志。或者,如果只想还原数据(假设架构已存在),则可以使用该--data标志。后一种情况在还原到已经具有现有数据的服务器时特别有用。

另一个有用的功能是支持使用大多数命令(例如创建和还原)指定表模式。该--table参数允许您备份(或还原)特定表。你也可以使用一个正则表达式,例如,针对特定的数据库:--table=dbname.*


远程备份目标

当然,您可以将备份同步到远程目标,将其保存到S3之类的对象存储中,或使用现有的备份解决方案对其进行存档。本地存储通常不足以满足数据持久性要求。

clickhouse-backup工具支持从远程对象存储(例如S3,GCS或IBM COS)上载和下载备份。最小的AWS S3配置如下所示:

s3:
  access_key: <YOUR AWS ACCESS KEY>
  secret_key: <YOUR AWS SECRET KEY>
  bucket: <YOUR BUCKET NAME>
  region: us-east-1
  path: "/some/path/in/bucket"

配置clickhouse-backup完凭据和目标存储段后,即可完成其余工作:

$ clickhouse-backup upload 2020-07-06T20-13-02
2020/07/07 15:22:32 Upload backup '2020-07-06T20-13-02'
2020/07/07 15:22:49   Done.
The remote backup can be downloaded to local storage before restoration:
$ sudo clickhouse-backup download 2020-07-06T20-13-02
2020/07/07 15:27:16   Done.

clickhouse-backup配置文件支持backups_to_keep_localbackups_to_keep_remote 设置-调整它们以满足数据保留要求。例如,set backups_to_keep_local: 7并且backups_to_keep_remote: 31保留了一周的夜间备份的本地和一个月的远程控制。将两者都设置为0可禁用备份修剪。

--diff-fromupload子命令也有一个选项。此功能将文件与以前的本地备份进行比较,仅上载新的/更改的文件。必须保留先前的备份,以便从新备份中进行还原。

数据传输时间和成本是远程存储的关键方面。将大表还原到新服务器需要多长时间?这将在很大程度上取决于网络和存储带宽。测试各种恢复方案以充分了解故障中可以实现的恢复时间至关重要。如果您使用公共云,则成本管理将非常重要。


使用Clickhouse-backup API

最后,clickhouse-backup可以作为提供REST API的服务运行。这是一个新功能。该API反映了命令行命令和选项,并且可能是与现有调度或CI / CD系统集成的更方便的方法。

$ sudo clickhouse-backup server &
$ curl localhost:7171/backup/list
{"Type":"local","Name":"2020-07-06T20-13-02","Size":0,"Date": "2020-07-06T20:13:02.328066165Z"}

可以在以下位置找到API端点的文档:https : //github.com/AlexAkulov/clickhouse-backup#api

clickhouse-backup在生产中使用

重要的是要注意的已知限制clickhouse-backup,在此处记录了这些限制:https : //github.com/AlexAkulov/clickhouse-backup#limitations

此外,文档还包含以下重要警告:

切勿在中更改文件权限/var/lib/clickhouse/backup。此路径包含硬链接。磁盘上相同数据的所有硬链接上的权限始终相同。这意味着,如果您更改备份路径中硬链接上的权限/所有者/属性,与ClickHouse一起使用的文件的权限也将更改。这可能会导致数据损坏。



相关文章
|
IDE Shell 开发工具
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
【沁恒WCH CH32V307V-R1在RT-Thread Studio上环境配置教程】
693 0
|
消息中间件 存储 大数据
简易教程:ClickHouse 的数据备份与恢复(二)
数据备份是IT运营中不可或缺的重要部分。在“大数据”部署(例如分析数据库)中,它们最具挑战性。本文将探讨备份ClickHouse所涉及的管道,并介绍用于自动化过程的Clickhouse备份工具。
1188 0
|
数据可视化 编译器 Shell
【沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程】
【沁恒WCH CH32V307V-R1在MounRiver Studio上环境配置教程】
856 0
|
Ubuntu Linux 网络架构
史上最全面的Buffalo WHR-G300N CH v2 刷OpenWrt教程
Buffalo WHR-G300N CH v2 刷OpenWrt、有两种办法、一种是Windows下刷、一种是在linux下使用tftp刷、Buffalo WHR-G300N-CH v2的openwrt固件在这个地址下载: http://downloads.
4947 0
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
2天前
|
SQL Unix OLAP
ClickHouse安装教程:开启你的列式数据库之旅
ClickHouse 是一个高性能的列式数据库管理系统,适用于在线分析处理(OLAP)。本文介绍了 ClickHouse 的基本使用步骤,包括下载二进制文件、安装应用、启动服务器和客户端、创建表、插入数据以及查询新表。还提到了图形客户端 DBeaver 的使用,使操作更加直观。通过这些步骤,用户可以快速上手并利用 ClickHouse 的强大性能进行数据分析。
14 4
|
2月前
|
存储 分布式计算 数据库
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
阿里云国际版设置数据库云分析工作负载的 ClickHouse 版
|
3月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
2月前
|
存储 关系型数据库 MySQL
四种数据库对比MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
四种数据库对比 MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景
|
6月前
|
DataWorks API 调度
DataWorks产品使用合集之在调度配置配置了节点的上游节点输出,没办法自动生成这个flow的依赖,该怎么操作
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
下一篇
DataWorks