数据备份&恢复详细说明
1 前置说明
(1)本文适用于当前主机运行异常,定时备份文件在本地、配置无变化的场景,也就是"原地恢复"。
(2)如果是用于测试演练、原服务 器故障、服务器迁移等"异机恢复"的场景,请先在异机上安装同版本的ONES服务(复制config/private.yaml配置文件),正常部署minio、开启备份,然后将旧机器minio整个备份文件夹拷贝到新服务器minio指定目录下,然后参考本文和数据恢复&Docker迁移补充说明操作。如有疑问,请联系ONES工程师。
(3)由于审计日志备份机制变化, 6.1.93版本及以下请参考“2.1 审计日志之Kafka备份”; 6.1.94版本及以上,请参考“2.2 审计日志之ClickHouse备份”。
(4)可在宿主机上用root用户执行kubectl命令;必须先执行ones-ai-k8s.sh命令进入容器,才能执行make 操作,才能查看config/private.yaml、default/config.yaml等配置文件。
2 审计日志备份
2.1 审计日志之Kafka备份(6.1.93版本及以下)
2.1.1 备份kafka
# 宿主机上root用户执行,检查kafka-backup的pod启动
kubectl -n ones get po | grep kafka-backup
# 手动触发备份
ones-ai-k8s.sh
make kafka-base-backup NAMESPACE=ones
# 到minio管理后台确认存储桶kafka-xbackup中的备份文件
# 自动定时备份,参考如下默认配置参数,每天7点/19点自动执行增量备份
2.1.2 默认配置
kafkaBackupImage: "img.ones.pro/release/kafka-backup:release-v0.0.9"
kafkaBackupReplicas: 1
kafkaBackupIgnoredTopic: "^__consumer_offsets" # kafka需要忽略备份的topic的正则表达式, 多个正则表达式用'|'逗号分开, 例如 "^test$|^__" 忽略 前缀__和名为test的topic
kafkaBackupIncRule: "0 0 7,19 * * *" # kafka 增量备份 定时规则 早上7点和晚上7点
kafkaBackupResotreCompress: "ones-binlog:zstd" # 指定topic的消息压缩类型, 默认使用Lz4,可选项None,Snappy,Lz4,Zstd,Gzip。 多个topic逗号','隔开
kafkaBackupProduceBatchSize: "1MB" # 还原数据时,批生产阈值(注意不能大于kafka批处理阈值)
kafkaBackupCPULimit: "2000m"
kafkaBackupMemoryLimit: "1024Mi"
2.1.3 kafka数据恢复
# 1. 清理旧数据
# 1.1. 宿主机上root用户执行,停业务,清理kafka数据
kubectl scale deploy -n ones audit-log-sync-deployment binlog-event-sync-deployment ones-canal-deployment ones-bi-sync-canal-deployment --replicas=0
# 确认服务已停止
kubectl get pod -n ones|grep -E 'bin|audit|canal'
# 1.2. 停中间件
kubectl scale sts -n ones zookeeper-ha kafka-ha --replicas=0
# 确认服务已停止
kubectl get pod -n ones|grep -E 'zookeeper|kafka-ha'
# 1.3 清理localstorage(仅限于单机版)
onesNameSpace=ones
dat=$(date +'%Y%m%d-%H%M%S')
# localstorageStorageBasePath=/data/ones/ones-local-storage
# 确认宿主机存储的路径
path=$(ones-ai-k8s.sh make get_value KEY=localstorageStorageBasePath | grep -e "^/")
localstorageStorageBasePath=$(echo -n "$path" | tr -d '\n\r')
echo "localstorageStorageBasePath is : $localstorageStorageBasePath"
ls -l ${localstorageStorageBasePath}/kafka/${onesNameSpace}/*/
# ❗️注意请谨慎删除数据,这里使用mv代替删除
mkdir -p /tmp/data-kafka-ha_$dat /tmp/data-zookeeper-ha_$dat/
mv ${localstorageStorageBasePath}/kafka/${onesNameSpace}/data-kafka-ha-0/* /tmp/data-kafka-ha_$dat/
mv ${localstorageStorageBasePath}/kafka/${onesNameSpace}/data-zookeeper-ha-0/* /tmp/data-zookeeper-ha_$dat/
# 确认删除
ls -l ${localstorageStorageBasePath}/kafka/${onesNameSpace}/*/
# 2. 启动服务
ones-ai-k8s.sh
make setup-ones
# 2.1 启动空数据的中间件
kubectl scale sts -n ones zookeeper-ha kafka-ha --replicas=1 # 副本数根据集群规模调整
# 确认中间件启动
kubectl get pod -n ones|grep -E 'zookeeper-ha|kafka-ha'
# 2.2 起业务
kubectl scale deploy -n ones binlog-event-sync-deployment audit-log-sync-deployment ones-canal-deployment ones-bi-sync-canal-deployment --replicas=1
# 确认业务已启动
kubectl get pod -n ones|grep -E 'bin|audit|canal'
# 3. 恢复数据
make kafka-restore NAMESPACE=ones DATA_PATH=20230807-111039.264
2.2 审计日志之ClickHouse备份(6.1.94版本及以上)
2.2.1 备份ClickHouse
ones-ai-k8s.sh
make backup-clickhouse-now
# 如果执行报错The specified bucket does not exist. 则进入clickhouse-backup-deployment-***容器内,先执行如下命令
# rclone mkdir s3:clickhouse-backup --config=/etc/clickhouse-backup/rclone.conf
# 如果报错上述命令报错 didn't find section in config file,则执行下述命令
# rclone mkdir s3-dest:clickhouse-backup --config=/etc/clickhouse-backup/rclone.conf
如果在日志内容中看到BACKUP_CREATED,则说明备份成功。
2.2.2 默认配置
(1) 备份的时间
每周六23点做一次全量备份,每天分别在13点和20点各做一次增量备份。如果要修改备份时间,可以修改 clickhouseBackupCronSpec、clickhouseFullBackupDay和clickhouseFullBackupTime 的值。
clickhouseBackupCronSpec: "0 0 13,20,23 * * *"
clickhouseFullBackupDay: "6" # 全量备份的日期,0-6,0为周日, 6为周六
clickhouseFullBackupTime: "23" # 全量备份的时间, 0-23