跳到主要内容

备份数据

1 开启备份

# 进入操作容器,添加相关配置
ones-ai-k8s.sh

vi config/private.yaml

1.1 配置MinIO对象存储

6.33以下版本配置

minioRootUser: "miniouser"  # MinIO部署时的环境变量 MINIO_USER
minioRootPassword: "QJndse89" # MinIO部署时的环境变量 MINIO_PASSWORD
# k3s 本地部署外置MinIO,请直接使用minio-0.minio-service.ones-backup;异地部署docker,请使用服务器IP
minioClusterIP: "minio-0.minio-service.ones-backup"
minioServicePortExport: "9000" # 默认 9000

6.33及以上版本配置

# k3s 本地部署内置MinIO,请直接使用minio-0.minio-service.ones-backup;异地部署docker,请使用服务器IP
backupS3Endpoint: http://minio.ones-backup:9000
backupS3AccessKeyID: miniouser
backupS3SecretAccessKey: QJndse89
# 外置OSS备份,请填写OSS区域;其他场景默认即可
backupS3Region: us-east-1

1.2 配置审计日志备份

6.1.93及以下版本配置kafka备份

 kafkaBackupEnable: "true"  

6.1.94及以上版本配置clickhouse备份

clickhouseBackupEnable: 'true'
clickhouseBackupCleanEnable: "true"
clickhouseBackupCleanDaysMinAge: "60"

1.3 配置数据库备份

## 开启备份服务端和MySQL状态服务
internalComponentMysqlEnable: true # 部署内置mysql
mysqlXbackupEnable: true # 配置mysql-xbackup-server
mysqlStatusServerEnable: true # 必须开启
mysqlXbackupToken: "47bce5c7" # 随机生成的字符串作为token
## 开启备份代理,使用 htpasswd 生成代理服务的账户密码, 进入网页 https://tool.oschina.net/htpasswd
## 输入用户名和密码(请记下密码明文用于客户端配置),加密算法选择MD5,生成结果为 [用户名]:[密码密文]。 以 : 为分隔,分别取出用户名和密文,用于下面的配置:
xbackupNginxEnable: true # 开启备份代理
xbackupNginxBasicAuthUser: "12345" # 用户名
xbackupNginxBasicAuthPasswordSecret: "$apr1$xAF/EcYh$HOTn.2.CVTEAhhqHqRxOW1" # 密码密文
## 开启MySQL备份策略
mysqlXbackupInternalEnable: true # 开启MySQL备份策略集群内部署,注意组件机已有的情况下不要开启
mysqlXbackupNginxBasicAuthPassword: 12345 # 对应xbackupNginxBasicAuthPasswordSecret的密码明文
mysqlXbackupcleanBackupMinAge: "180d" # 清理几天前的备份, 默认清除180天(6个月)前备份, 表达式 m|d|w|M|y 含义: minute|day|week|month|year
mysqlXbackupServerInstance: master

1.4 配置附件备份

6.33以下版本配置

# 开启文件备份
mcBackupEnable: true # 开启mc备份
mcBackupToolsWatchDirs: "/data/plugin;/data/ones/files" # 指定要备份的目录;

如果客户提供OSS外置存储,附件迁移到OSS,则无需备份附件目录/data/ones/files、只需要备份插件目录/data/plugin

6.33及以上版本配置

backupS3PublicBucket: ones-public-files-backup
backupS3PrivateBucket: ones-private-files-backup
backupS3MySQLXbackupBucket: mysql-xbackup
backupS3ClickhouseBucket: clickhouse-backup
backupEnabledForObjectStorage: 'true'

1.5 配置生效和状态检查

make setup-ones 

make setup-ones-built-in-mysql

# 检测clickhouse或kafka的pod启动
kubectl get pod -A|grep -iE 'clickhouse-backup|kafka'

# 检查MySQL变更
kubectl -n ones get po | grep mysql
# 确认 mysql-cluster-mysql 和 mysql-operator 有更新,增加 mysql-status-server-deployment和mysql-xbackup-deployment

# 检查文件备份
kubectl get po -n ones -l app=mc-backup-tools # 确认pod起来

添加上述配置后, 即启动了后台备份任务,可定期检查备份是否正常;首次配置完成后,请参考下文进行手工备份,验证备份能否成功。

2 手工备份操作

2.1 备份审计日志

6.1.93及以下版本备份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点自动执行增量备份

6.1.94及以上版本备份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`,则说明备份成功。可到MinIO管理后台确认存储桶kafka-xbackup中的备份文件

2.2 备份业务数据MySQL

3.14.49及以上版本备份操作

ones-ai-k8s.sh

# 手动全量备份
make mysql-base-backup NAMESPACE=ones

# 手动增量备份
make mysql-inc-backup NAMESPACE=ones

# 查看日志
make logs-mysql-xbackup NAMESPACE=ones

# 查看最后100条日志
make logs-mysql-xbackup NAMESPACE=ones TAIL=100

# 检查是否有备份进度
make checkprocess-mysql-xbackup-policy NAMESPACE=ones

# mysql过期备份删除
# 默认删除30天之前的备份
make delete-mysql-backup NAMESPACE=ones

# 删除7天之前的备份
make delete-mysql-backup NAMESPACE=ones BEFORE=7d

3.14.49以下版本备份操作

bkpod=$(kubectl -n ones get po -l app=mysql-xbackup -o jsonpath='{.items[0].metadata.name}')  # 这里取pod名,直接复制即可
# 查看日志,由于日志输出到/dev/stdout,手动执行的日志仅会输出到执行的终端上
kubectl -n ones logs -f ${bkpod}

# 注意:目前手动执行备份会导致自动定期备份任务失效,此问题有待后续修复,临时处理方案见 https://opsdoc.ones.cn/docs/faq/k3s/mysql-backup-cron-failed
# 手动全量备份 命令前台运行,终端输出日志,有需要可以改为后台执行
kubectl -n ones exec -it ${bkpod} -- mysql-xbackup-policy -m --detail --instance=0

# 手动增量备份
kubectl -n ones exec -it ${bkpod} -- mysql-xbackup-policy -m -i --detail --instance=0

# 检查是否有备份在执行
kubectl -n ones exec -it ${bkpod} -- mysql-xbackup-policy checkProcess

# mysql过期备份删除
BEFORE=30d
kubectl -n ones exec -it ${bkpod} -- mysql-xbackup-policy clean --min-age=${BEFORE} --detail

2.3 备份附件

备份文件数据,包括业务附件、wiki页面、海报/图片等。

ones-ai-k8s.sh
make mc-backup-tools NAMESPACE=ones

3 备份文件检查

3.1 确认备份路径

K3S 部署的MinIO

# 宿主机上执行
kubectl describe pod -n ones-backup minio-0 |grep Path:

# 输入如下提示,该目录即为备份路径
# Path: /data/ones/minio/data

docker 部署的MinIO

# 宿主机上执行
docker inspect minio |grep -A 10 -B 2 '"Mounts"' |grep Source

# 输入如下提示,该目录即为备份路径
# "Source": "/data/ones/minio/data",

3.2 检查审计日志备份文件

6.1.93及以下版本检查kafka备份

# 进入3.1查询到的路径
cd /data/ones/minio/data

# 检查该目录下是否有最近1天的备份文件
ls -altr kafka-xbackup/*

6.1.94及以上版本检查clickhouse备份

# 进入3.1查询到的路径
cd /data/ones/minio/data

# 检查该目录下是否有最近1天的备份文件
ls -altr clickhouse-backup/*/*

3.3 检查业务数据MySQL备份文件

# 进入3.1查询到的路径
cd /data/ones/minio/data

# 检查该目录下是否有最近1小时的增量备份文件
ls -altr mysql-xbackup/

3.3 检查文件备份

6.33以下版本配置

# 进入3.1查询到的路径
cd /data/ones/minio/data

# 由于附件是每天增量备份到一个全量文件夹中,所以采用文件大小的方式来判断
du -sh mc-xbackup/*

6.33及以上版本配置

# 进入3.1查询到的路径
cd /data/ones/minio/data

# 由于附件是每天增量备份到一个全量文件夹中,所以采用文件大小的方式来判断
du -sh ones-private-files-backup/*
du -sh ones-public-files-backup/*