自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=notifyWorkingDirectory=/usr/localUser=root
Group=root
# ProtectProc=invisibleEnvironmentFile=-/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=0SendSIGKILL=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: obtestLOG_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: 1002JOB_ID: 2915INCARNATION: 1BACKUP_SET_ID: 66
INITIATOR_TENANT_ID: 1INITIATOR_JOB_ID: 66EXECUTOR_TENANT_ID: 1002PLUS_ARCHIVELOG: OFFBACKUP_TYPE: FULLJOB_LEVEL: USER_TENANTENCRYPTION_MODE: NONEPASSWD:START_TIMESTAMP: 2024-09-10 19:51:18.713433END_TIMESTAMP: 2024-09-10 19:54:12.258598STATUS: COMPLETEDRESULT: 0COMMENT:DESCRIPTION:PATH: s3://obbak/obtestbak?host=11.161.xxx.xxx:9001
1 row in set (0.010 sec)
另外,在 minio 對應的目錄下,可以看到備份生成的文件
以上就是 OceanBase 在推出支持兼容 S3 協議的對象存儲之后,用 minio 測試 OceanBase 歸檔和備份的整個過程,如果要在實際生產中使用,建議 minio 使用分布式模