Skip to content

副本节点数据恢复

背景

集群模式, 使用的复制表。

故障,其中一个节点的存储盘坏掉。数据完全丢失。

恢复流程

  • 节点新建clickhouse服务
  • 从其他拷贝拷贝 databases 进行恢复databases , /var/lib/clickhouse/metadata/.
  • 从其他节点拷贝 tables 集进行恢复tables , /var/lib/clickhouse/metadata/.
  • 从其他节点拷贝 user 进行恢复 user , /var/lib/clickhouse/access/.
  • 恢复zk 数据

查看集群节点拓扑信息

SELECT shard_num, host_address,is_local FROM system.clusters;

  ┌─shard_num─┬─host_address─┬─is_local─┐
1. │         1 │ 10.0.1.174   │        0 │
2. │         1 │ 10.0.0.127   │        0 │
3. │         1 │ 10.0.2.29    │        0 │
4. │         2 │ 10.0.0.54    │        0 │
5. │         2 │ 10.0.2.55    │        0 │
6. │         2 │ 10.0.1.173   │        1 │
   └───────────┴──────────────┴──────────┘

确定和故障节点位置。利用同副本的其他节点的数据进行恢复。

查看数据具体分布情况。

select database,table,replica_is_active from system.replicas;

备份恢复数据

metadata 目录中存放的是表结构信息

access 目录中存放的是用户数据

将同分片的其他正常节点的 metadata , access 数据拷贝到需要恢复节点的对应目录中。

注意事项,metadata 有两类文件,databasename.sql 文件 和 databasename 目录。 databasename.sql 为创建database的语句。 databasename 目录 为创建表的语句。

并且 databasename 目录 为软连接,真实数据存放在 store 中。

4 lrwxrwxrwx 1 clickhouse clickhouse 67 Aug 17 12:05 clickstream_v2 -> /var/lib/clickhouse/store/8aa/8aa609f0-
4525-457c-8aa6-09f04525657c/
4 -rw-r----- 1 clickhouse clickhouse 78 Aug 17 12:05 clickstream_v2.sql
4 lrwxrwxrwx 1 clickhouse clickhouse 67 Aug 17 12:05 default -> /var/lib/clickhouse/store/76a/76a4bffa-4625-
46a3-b6a4-bffa4625b6a3/
4 -rw-r----- 1 clickhouse clickhouse 78 Aug 17 12:05 default.sql
4 lrwxrwxrwx 1 clickhouse clickhouse 67 Aug 17 12:05 system -> /var/lib/clickhouse/store/246/246ce236-ada4-42db-
a46c-e236ada4f2db/
4 -rw-r----- 1 clickhouse clickhouse 78 Aug 17 12:05 system.sql

拷贝数据需求分两步进行。第一步恢复 access 用户 和 metadata 中的 databasename.sql 。 测试验证 databasename.sql 和 databasename 中的表结构不能同时恢复。

先恢复database,再恢复 tables 。

mkdir /tmp/clickhouse  && cd /tmp/clickhouse

备份数据

数据
kubectl exec -n <namespaces> <pod> -- tar cvfh - /var/lib/clickhouse/metadata | tar xf - -C .
用户
kubectl exec -n <namespaces> <pod> -- tar cvfh - /var/lib/clickhouse/access | tar xf - -C .

恢复数据

数据库信息
tar cf - var/lib/clickhouse/metadata/*.sql | kubectl exec -i -n <namespaces> <pod> -- tar xkf - -C /
用户信息
tar cf - var/lib/clickhouse/access | kubectl exec -i -n <namespaces> <pod> -- tar xf - -C /
zk 数据 
kubectl exec -i -n <namespaces> <pod> -- touch /drycc/clickhouse/data/flags/force_restore_data

重启 clickhouse

表结构信息
tar cf - --exclude='*.sql' var/lib/clickhouse/metadata/ | kubectl exec -i -n <namespaces> <pod> -- tar xkvf - -C /

重启 clickhouse

注意事项

在恢复的时候忽略 default,system 这两个database . 因为在创建database 的时候需要 利用on cluster 创建分布式 database。多副本的业务 database 不在default.和system 中, 所以在恢复的时候不需要考虑,default,和system。避免带来不必要的麻烦。

验证

官网恢复手册

其它参考1

其它参考2

其他