如何使用 minio 完成OceanBase社区版的归档和备份
自OceanBase社区版4.2.1BP7版本起,OceanBase的归档与备份功能开始兼容AWS S3及S3协议的对象存储服务,因此,许多用户选择采用 MinIO 作为其备份存储介质。因为 MinIO 兼容AWS S3云存储服务接口,成为了一个轻便的服务选项。
本文将介绍如何部署 minio ,以及如何使用 minio 来做OceanBase的归档和备份。
关于 minio 的介绍,可参考官方文档:minio官方文档
minio 安装部署
minio 的部署有多种方式,本文介绍的是 Single-Node Single-Drive 的部署方式,其他部署方式,可参考官方文档,操作系统是 CentOS 7.9。
首先下载软件,并执行安装:
wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20240826153307.0.0-1.x86_64.rpm -O minio.rpmsudo dnf install minio.rpm
创建用户,并授权,这里为了方便测试,直接使用了 root 用户,并且手动创建了一个目录 /obdata/minio 用作存储路径,这步可跳过
groupadd -r minio-useruseradd -M -r -g minio-user minio-userchown minio-user:minio-user /mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4
创建配置文件,在/etc/default目录下,创建 minio 文件:
$vim /etc/default/minio# MINIO_ROOT_USER and MINIO_ROOT_PASSWORD sets the root account for the MinIO server.# This user has unrestricted permissions to perform S3 and administrative API operations on any resource in the deployment.# Omit to use the default values \'minioadmin:minioadmin\'.# MinIO recommends setting non-default values as a best practice, regardless of environment.MINIO_ROOT_USER=\"admin\"MINIO_ROOT_PASSWORD=\"xxxxxx\"# MINIO_VOLUMES sets the storage volumes or paths to use for the MinIO server.# The specified path uses MinIO expansion notation to denote a sequential series of drives between 1 and 4, inclusive.# All drives or paths included in the expanded drive list must exist *and* be empty or freshly formatted for MinIO to start successfully.MINIO_VOLUMES=\"/obdata/minio\"# MINIO_OPTS sets any additional commandline options to pass to the MinIO server.# For example, `--console-address :9001` sets the MinIO Console listen portMINIO_OPTS=\"--console-address :9002 --address :9001\"
- MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD: 分别代表minio服务的最高权限的账号和密码,可用于后续登陆页面和调用 API ;
- MINIO_VOLUMES:指定给 minio 服务使用的存储卷或者路径;
- MINIO_OPTS:启动 minio 的参数。这里修改了页面登录的端口为9002,以及 API 端口为9001。
在使用 rpm 安装之后,默认会创建一个 systemd 文件在 /usr/lib/systemd/system/minio.service,不过这里需要修改一些参数,因为使用root启动minio,所以User和Group都改成了root。
$vim /usr/lib/systemd/system/minio.service[Unit]Description=MinIODocumentation=https://docs.min.ioWants=network-online.targetAfter=network-online.targetAssertFileIsExecutable=/usr/local/bin/minio[Service]Type=notifyWorkingDirectory=/usr/localUser=rootGroup=root# ProtectProc=invisibleEnvironmentFile=-/etc/default/minioExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES# Let systemd restart this service alwaysRestart=always# Specifies the maximum file descriptor number that can be opened by this processLimitNOFILE=1048576# Turn-off memory accounting by systemd, which is buggy.MemoryAccounting=no# Specifies the maximum number of threads this process can createTasksMax=infinity# Disable timeout logic and wait until process is stoppedTimeoutSec=0SendSIGKILL=no[Install]WantedBy=multi-user.target# Built for ${project.name}-${project.version} (${project.name})
启动 minio,并查看状态
# 启动 miniosudo systemctl start minio.service# 查看 minio 状态sudo systemctl status minio.service# 查看 minio 日志journalctl -f -u minio.service# 设置开机自启动sudo systemctl enable minio.service
至此,minio的部署工作已经完成,接着,需要在页面上登陆 minio,然后创建 Buckets 和 Path,用户后续的归档和备份
创建Buckets
通过IP:Port访问 minio,使用上面 MINIO_ROOT_USER 和 MINIO_ROOT_PASSWORD 指定的账户名和密码,访问 minio 服务,在 Buckets 栏创建新的 Buckets。
Buckets 创建完成之后,点击进入 Buckets,再创建 Path,这里分别创建了obtest 和 obtestbak两个Path,分别用户归档和数据库的备份测试。
配置完成之后,接着就是进入到OceanBase数据库,开启归档和备份。
设置归档
归档和备份,可以使用sys租户,也可以登录到具体要设置的租户中执行相应的设置,本文都是进入sys租户,为 obtest 租户进行的配置。
首先设置归档并发度(可选)
ALTER SYSTEM SET log_archive_concurrency = 2 TENANT = obtest;
接着设置归档目的端
ALTER SYSTEM SET LOG_ARCHIVE_DEST=\'LOCATION=s3://obbak/obtest?host=11.161.xxx.xxx:9001&access_id=admin&access_key=xxxxxx\' TENANT = obtest;
开启归档任务
ALTER SYSTEM ARCHIVELOG TENANT = obtest;
查看归档状态
obclient [oceanbase]> SELECT TENANT_NAME, LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_TYPE = \'USER\'\\G;*************************** 1. row ***************************TENANT_NAME: obtest LOG_MODE: ARCHIVELOG*************************** 2. row ***************************
可以看到归档已经开启,并且在 minio 对应的路径下,已经创建出了归档的文件
设置备份
设置备份目的端
ALTER SYSTEM SET DATA_BACKUP_DEST=\'s3://obbak/obtestbak?host=11.161.xxx.xxx:9001&access_id=admin&access_key=xxxxxx\' TENANT = obtest;
设置租户的备份并发度(可选)
ALTER SYSTEM SET ha_low_thread_score = 2 TENANT = obtest;
发起全量备份
ALTER SYSTEM BACKUP TENANT = obtest;
查看备份结果
obclient [oceanbase]> SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY order by START_TIMESTAMP desc limit 1\\G;*************************** 1. row *************************** TENANT_ID: 1002 JOB_ID: 2915 INCARNATION: 1 BACKUP_SET_ID: 66INITIATOR_TENANT_ID: 1 INITIATOR_JOB_ID: 66 EXECUTOR_TENANT_ID: 1002 PLUS_ARCHIVELOG: OFF BACKUP_TYPE: FULL JOB_LEVEL: USER_TENANT ENCRYPTION_MODE: NONE PASSWD: START_TIMESTAMP: 2024-09-10 19:51:18.713433 END_TIMESTAMP: 2024-09-10 19:54:12.258598 STATUS: COMPLETED RESULT: 0 COMMENT: DESCRIPTION: PATH: s3://obbak/obtestbak?host=11.161.xxx.xxx:90011 row in set (0.010 sec)
另外,在 minio 对应的目录下,可以看到备份生成的文件
以上就是 OceanBase 在推出支持兼容 S3 协议的对象存储之后,用 minio 测试 OceanBase 归档和备份的整个过程,如果要在实际生产中使用,建议 minio 使用分布式模