备份数据
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/*