恢复 ONES
1 前置说明
(1)本文适用于当前主机运行异常,但是配置无变化、备份文件也没有更改位置的场景,也就是"原地恢复"。
(2)如果是用于测试演练、原服务器故障、服务器迁移等"异机恢复"的场景,请先在异机上安装同版本的ONES服务(复制config/private.yaml配置文件),正常部署MinIO、开启备份,然后将旧MinIO整个备份文件夹拷贝到新MinIO指定目录下,再参考本文和数据恢复补充说明操作。如有疑问,请联系ONES工程师。
2 审计日志恢复
6.1.93及以下版本恢复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
6.1.94及以上版本恢复Clickhouse
下述3种方式请按需选择1个即可
(1) 恢复最新备份
ones-ai-k8s.sh
make clickhouse-restore
默认用最近一次的备份进行恢复。
(2) 恢复指定备份
如果自动恢复失败,可以手动指定备份文件进行恢复。
ones-ai-k8s.sh
make clickhouse-restore BACKUP=http://<S3 endpoint>/clickhouse-backup/2025/01/02/incr_2025010206_base_audit_log_audit_log_20250102.zip
(3) 手动恢复指定备份
如果 ClickHouse 发生了重启或者想从另外的对象存储进行恢复,可以去对应的存储拿到备份包的地址进行恢复。此方法也适用于服务器环境的迁移,比如 Docker 迁移到 K3s 等。
# 先进入clickhouse-backup-deployment-***容器内
rclone lsl s3:clickhouse-backup --config=/etc/clickhouse-backup/rclone.conf | sort -k2,2r
928 2025-01-16 14:00:00.188000000 2025/01/16/incr_2025011614_base_audit_log_audit_log_2025011613.zip
5929 2025-01-16 13:00:00.208000000 2025/01/16/base_audit_log_audit_log_2025011613.zip
# 选择最新的文件作为恢复文件,进入到 ClickHouse 执行如下 SQL
RESTORE TABLE audit_log.audit_log FROM S3('http://endpoint/clickhouse-backup/2024/12/31/incr_2024123108_base_audit_log_audit_log_20241231.zip', '<AccessKey>', '<Secret>');
3 恢复业务数据MySQL
3.1 关闭备份客户端
编辑 config/private.yaml ,注释掉如下配置:
ones-ai-k8s.sh
vi config/private.yaml
# mysqlXbackupInternalEnable: true
# 下发配置
ones-ai-k8s.sh
make setup-ones
kubectl -n ones get po | grep mysql-xbackup
# 检查mysql-xbackup这个pod是否关闭
exit