Skip to main content
Version: v3&v6

快速开启数据备份

开启数据备份,首先需要部署一个存储服务用于存放备份的数据。这里使用 minio 作为备份数据存储服务。

如果使用与部署 ONES 服务不同的节点部署备份数据存储服务,这里推荐使用 Docker 部署 minio。

如果要使用相同的节点部署备份数据存储服务,这里使用相同的 k3s 集群部署 minio。注意:请不要在 k3s 节点上安装 Docker,有破坏 k3s 节点的风险。

部署 minio

根据是否在相同节点上部署备份数据存储服务,可以选择使用 Docker 或 k3s 部署。

注意:为了数据安全,请尽量在与部署 ONES 系统不同的节点上部署备份数据存储服务。

使用 Docker 部署 minio

异机器部署备份数据存储服务时使用 Docker 部署 minio。注意:不要在 k3s 节点上部署 Docker。

安装 Docker

CentOS下安装Docker参考文档

其他发行版参考官方文档: https://docs.docker.com/engine/install/

部署 minio

通过如下三个环境变量配置部署的必要参数,请根据部署的实际需求修改:

  • MINIO_USER: minio的访问用户,同时也是 S3 协议中的 accessKey
  • MINIO_PASSWORD: minio的访问密钥,同时也是 S3 协议中的 secretKey,注意至少需要8位
  • MINIO_DATA_PATH: minio在节点机上的数据存放路径

通过环境变量 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 来指定访问minio的账户名和密码。此账户密码可以用来登录minio管理后台和客户端访问对象存储。

确保宿主机上的端口 9000 和 9090 没有被占用,否则会部署失败。

# 根据部署实际需要调整
MINIO_USER=miniouser
MINIO_PASSWORD=QJndse89 # 注意密码至少需要8位
MINIO_DATA_PATH=/data/ones/minio/data

mkdir -p ${MINIO_DATA_PATH}
docker run -d --restart always \
--name minio \
-p 9000:9000 \
-p 9090:9090 \
-v ${MINIO_DATA_PATH}:/data \
-e "MINIO_ROOT_USER=${MINIO_USER}" \
-e "MINIO_ROOT_PASSWORD=${MINIO_PASSWORD}" \
docker.io/minio/minio:RELEASE.2024-06-26T01-06-18Z server /data --console-address ":9090"

# 容器运行后,检查管理后台可访问
curl http://localhost:9090
# 浏览器打开管理后台 http://[host-ip]:9090,并使用 MINIO_USER 和 MINIO_PASSWORD 对应的账户密码登录

使用 k3s 部署 minio

在 ONES 服务节点上部署备份数据存储服务时使用此方案。

使用相同的三个环境变量,配置部署的必要参数,详细说明见上面的 Docker 部署部分。

在节点机上执行如下:

# 根据部署实际需要调整
MINIO_USER=miniouser
MINIO_PASSWORD=QJndse89 # 注意密码至少需要8位
MINIO_DATA_PATH=/data/ones/minio/data

mkdir -p ${MINIO_DATA_PATH}
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Namespace
metadata:
name: ones-backup
labels:
name: ones-backup
---
apiVersion: v1
kind: Service
metadata:
name: minio-service
namespace: ones-backup
labels:
app: minio
spec:
ports:
- port: 9000
clusterIP: None
selector:
app: minio
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: minio
namespace: ones-backup
spec:
replicas: 1
serviceName: minio-service
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: docker.io/minio/minio:RELEASE.2024-06-26T01-06-18Z
command:
- /bin/bash
- -c
args:
- minio server /data --console-address :9090
env:
- name: MINIO_ROOT_USER
value: "${MINIO_USER}"
- name: MINIO_ROOT_PASSWORD
value: "${MINIO_PASSWORD}"
volumeMounts:
- mountPath: /data
name: data-backup-minio
volumes:
- name: data-backup-minio
hostPath:
path: ${MINIO_DATA_PATH}
type: DirectoryOrCreate
EOF

效果检查:

# 等待服务启动
kubectl -n ones-backup get po -l 'app=minio' -w

# 开启临时转发以访问 minio 控制台,注意这里只是临时测试用,要提供长期外部访问请使用 NodePort Service
kubectl port-forward pod/minio-0 9000 9090 -n ones-backup --address=0.0.0.0

# 另开一个终端,或者在能访问节点的浏览器上访问
curl http://localhost:9090

离线环境下对 minio 镜像的处理

如果在离线的节点无法直接从公共镜像仓拉取 minio,可使用手动导入镜像的方法:

# 在允许网络访问的节点上拉取并打包镜像
docker pull docker.io/minio/minio:RELEASE.2024-06-26T01-06-18Z
docker save docker.io/minio/minio:RELEASE.2024-06-26T01-06-18Z -o minio-image.tar

# 将 minio-image.tar 复制到要部署的节点上

# 对于 Docker 部署
docker load -i minio-image.tar
docker images | grep minio

# 对于 k3s 部署
ctr i import minio-image.tar
ctr i ls | grep minio

快速开启备份

这里直接开启默认配置的数据备份,默认的备份有:

  • Kafka备份:默认早上7点和晚上7点执行增量备份
  • MySQL备份:默认凌晨3点20分执行全量备份,每小时的30分(例如6:30, 7:30等)执行一次增量备份
  • 文件备份:默认凌晨2点执行全量备份

其他可选备份,以及通过备份恢复数据,详见下面的分节介绍。

  1. 编辑配置文件
# 进入操作容器
ones-ai-k8s.sh
vi config/private.yaml

注意需要根据部署环境调整的配置:

  • minioRootUser - 上面部署minio时所配置的账户密码,即部署时环境变量 MINIO_USER 的值
  • minioRootPassword - 上面部署minio时所配置的账户密码,即部署时环境变量 MINIO_PASSWORD 的值
  • minioClusterIP - 上面部署minio的访问地址
    • 对于 Docker 部署,请使用部署 Docker 的节点IP
    • 对于 k3s 部署,请直接使用 minio-0.minio-service.ones-backup
# minio对象存储访问配置
minioRootUser: "miniouser" # minio部署时的环境变量 MINIO_USER
minioRootPassword: "QJndse89" # minio部署时的环境变量 MINIO_PASSWORD
minioClusterIP: "10.0.0.203" # minio部署机器IP, 对于 k3s 部署,请直接使用 minio-0.minio-service.ones-backup
minioServicePortExport: "9000" # 默认 9000

# 开启kafka备份
kafkaBackupEnable: "true"

# 开启MySQL备份
internalComponentMysqlEnable: true # 部署内置mysql
mysqlXbackupEnable: true # 配置mysql-xbackup-server
mysqlStatusServerEnable: true # 必须开启
mysqlXbackupToken: "47bce5c7" # 随机生成的字符串作为token
xbackupNginxEnable: true # 开启备份代理
xbackupNginxBasicAuthUser: "12345" # 用户名
xbackupNginxBasicAuthPasswordSecret: "$apr1$xAF/EcYh$HOTn.2.CVTEAhhqHqRxOW1" # 密码密文
mysqlXbackupInternalEnable: true # 开启MySQL备份策略集群内部署,注意组件机已有的情况下不要开启
mysqlXbackupNginxBasicAuthPassword: 12345 # 对应xbackupNginxBasicAuthPasswordSecret的密码明文

# 开启文件备份
mcBackupEnable: true # 开启mc备份
mcBackupToolsWatchDirs: "/data/plugin;/data/ones/files" # 指定要备份的目录
  1. 生效配置, 检查效果
make setup-ones 
make setup-ones-built-in-mysql

# 检查kafka-backup的pod启动
kubectl -n ones get po | grep kafka-backup

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

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

到这里,数据备份已经开启。