自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.rpm
sudo dnf install minio.rpm
创建用户,并授权,这里为了方便测试,直接使用了 root 用户,并且手动创建了一个目录 /obdata/minio 用作存储路径,这步可跳过
groupadd -r minio-user
useradd -M -r -g minio-user minio-user
chown 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 port
MINIO_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=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/usr/local/bin/minio
[Service]
Type=notify
WorkingDirectory=/usr/local
User=root
Group=root
# ProtectProc=invisible
EnvironmentFile=-/etc/default/minio
ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
# Let systemd restart this service always
Restart=always
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=1048576
# Turn-off memory accounting by systemd, which is buggy.
MemoryAccounting=no
# Specifies the maximum number of threads this process can create
TasksMax=infinity
# Disable timeout logic and wait until process is stopped
TimeoutSec=0
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
# Built for ${project.name}-${project.version} (${project.name})
启动 minio,并查看状态
# 启动 minio
sudo 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: 66
INITIATOR_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:9001
1 row in set (0.010 sec)
另外,在 minio 对应的目录下,可以看到备份生成的文件
以上就是 OceanBase 在推出支持兼容 S3 协议的对象存储之后,用 minio 测试 OceanBase 归档和备份的整个过程,如果要在实际生产中使用,建议 minio 使用分布式模