只要sys_backup.conf中包含S3参数即支持S3备份

介绍

金仓数据库通过 sys_rman 工具将备份直接存储到支持S3协议的对象存储(如MinIO、华为云OBS、AWS S3等)。核心思路是修改备份配置文件 sys_backup.conf,将 _repo_type 设为 s3 并填入S3连接信息,最后执行初始化。

需求:将集群的物理备份存放到S3对象存储服务商。

数据节点1

192.168.40.200

Centos7.9 x86_64

OpenSSL 1.0.2k

V008R030C011PSI026

数据节点2

192.168.40.200

Centos7.9 x86_64

OpenSSL 1.0.2k

V008R030C011PSI026

s3存储

192.168.40.111

UOS Server 20 x86_64

OpenSSL 1.1.1k

V008R030C011PSI026

准备工作

云存储不建议独立的REPO节点。

部署MinIO搭建S3 兼容的云存储服务

测试环境采用MinIO单点架构,采用https方式访问

设置主机名

hostnamectl set-hostname s3.repo
exec bash

生成证书

mkdir -p /etc/minio/certs

cd /etc/minio/certs

openssl genrsa -out private.key 2048

openssl req -new -x509 -days 3650 \
-key private.key \
-out public.crt \
-subj "/CN=s3.repo" \
-addext "subjectAltName = DNS:s3.repo"

ls -l 

输出如下:

总用量 8
-rw------- 1 root root 1675  6月  5 15:51 private.key
-rw-r--r-- 1 root root 1135  6月  5 15:51 public.crt

创建kingbase用户并赋予权限

useradd kingbase
echo 'kingbase' | passwd --stdin kingbase

chown -R kingbase:kingbase /etc/minio/certs

输出如下:

[root@s3 certs]# ls -l /etc/minio/certs/
总用量 8
-rw------- 1 kingbase kingbase 1675  6月  5 15:51 private.key
-rw-r--r-- 1 kingbase kingbase 1135  6月  5 15:51 public.crt

安装MinIO

1.下载安装
# 下载 MinIO 二进制文件
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
mv minio /usr/local/bin/
2. 创建存储目录
mkdir -p /data/minio
3. 启动 MinIO 服务(可选)

在 MinIO 的启动命令或服务文件中,通过 --certs-dir 参数指定证书目录,如果不使用https方式访问,可以去掉--certs-dir 参数

export MINIO_ROOT_USER=minioadmin
export MINIO_ROOT_PASSWORD=minioadmin
minio server --certs-dir /etc/minio/certs /data/minio --console-address ":9001"
  • Web 管理界面:http:s//your_ip:9001
  • S3 API 地址:https://your_ip:9000

后台运行(使用 systemd,强烈建议)

在 MinIO 的启动命令或服务文件中,通过 --certs-dir 参数指定证书目录,如果不使用https方式访问,可以去掉--certs-dir 参数

vi /etc/systemd/system/minio.service
[Unit]
Description=MinIO
After=network.target

[Service]
ExecStart=/usr/local/bin/minio server --certs-dir /etc/minio/certs /data/minio --console-address ":9001"
Environment="MINIO_ROOT_USER=minioadmin"
Environment="MINIO_ROOT_PASSWORD=minioadmin"
Restart=always
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
systemctl daemon-reexec
systemctl enable minio
systemctl start minio
  • Web 管理界面:https://your_ip:9001
  • S3 API 地址:https://your_ip:9000

创建存放备份文件的桶和目录

确保 _repo_path 目录已创建且kingbase用户有读写权限,S3密钥有存储桶的读写权限。

确保数据库服务器能正常访问你填写的 _repo_s3_endpoint 地址。

--数据节点创建备份目录
mkdir -p /data/KBbackup
chown -R kingbase:kingbase  /data/KBbackup
chmod -R 775  /data/KBbackup

配置域名解析

数据节点和repo节点都要配置,用于域名解析

vi /etc/hosts
增加
192.168.40.111 s3.repo

查看集群状态

repmgr cluster show 输出如下:

[kingbase@localhost ~]$ repmgr cluster show
 ID | Name  | Role    | Status    | Upstream | Location | Priority | Timeline | LSN_Lag | Connection string
----+-------+---------+-----------+----------+----------+----------+----------+---------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 1  | node1 | primary | * running |          | default  | 100      | 1        |         | host=192.168.40.200 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000
 2  | node2 | standby |   running | node1    | default  | 100      | 1        | 0 bytes | host=192.168.40.201 user=esrep dbname=esrep port=54321 connect_timeout=10 keepalives=1 keepalives_idle=2 keepalives_interval=2 keepalives_count=3 tcp_user_timeout=9000

配置免密登录

sys_rman 备份过程中,repo 节点会调用 数据库节点上的 sys_rman ,需要做免密,建议用加密密码文件 .encpwd(用于服务器进程,客户端也可读取),不要用客户端密码文件 .kbpass(名文存储密码,不安全)

sys_encpwd -H \* -U system -D \* -P 54321 -W kingbase

配置备份

配置sys_backup.conf文件

安装目录下的 share/sys_backup.conf

根据实际项目需求和数据库实际容量合理设置备份策略和频次。

  • 推荐配置下大致预估的额外空间:3倍于预测数据库实例最大占用空间。
  • 通用策略推荐的全量备份周期:默认7天可更改。
  • 通用策略推荐的增量备份周期:默认1天可更改。
  • 通用策略推荐的保留份数:默认5份全量备份可更改。
  • 指定本地配置文件目录:/data/KBbackup/db_dxj/kbbr_repo 默认/home/kingbase/kbbr_repo 可更改。
cd /home/kingbase/dbhome/kingbase/share
cp sys_backup.conf sys_backup.confbak
vi sys_backup.conf
修改以下参数,备份策略参数按需修改 
_target_db_style="cluster" 
_one_db_ip="192.168.40.200"  #数据库所在服务器IP 主节点
_repo_ip="192.168.40.200"  #若DB与REPO合一,填相同IP
_stanza_name="kingbase"
_os_user_name="kingbase"
_repo_path="/data/KBbackup/db_dxj/kbbr_repo"  #具备创建、读写权限
_repo_type=s3
_repo_s3_bucket=kesbackup
_repo_s3_endpoint=https://192.168.40.111:9000   #S3 API 地址
_repo_s3_region=dxj
_repo_s3_key=minioadmin  #访问密钥ID(Access Key) 可以理解为用户id
_repo_s3_key_secret=minioadmin  #私有访问密钥(Secret Key) 可以理解为用户密码

执行初始化

在DB节点内部,执行开启定时命令,数据库需正常运行。初始化是一次性的,成功后不要重复执行。

  • 所有的数据节点上都会创建/data/KBbackup/db_dxj/kbbr_repo目录,该目录下存放sys_rman.conf文件
  • S3存储路径:存储桶名字+/data/KBbackup/db_dxj/kbbr_repo目录
/home/kingbase/dbhome/kingbase/bin/sys_backup.sh init

初始化完成后,建议手动执行一次全量备份验证配置是否正确

--全量备份
/home/kingbase/dbhome/kingbase/bin/sys_rman --config=/data/KBbackup/db_dxj/kbbr_repo/sys_rman.conf --stanza=kingbase --type=full backup

--增量备份
 /home/kingbase/dbhome/kingbase/bin/sys_rman
--config=/data/KBbackup/db_dxj/kbbr_repo/sys_rman.conf  --stanza=kingbase
--type=incr backup

启动自动备份

在DB节点内部,执行开启定时命令,自动备份任务默认通过crontab实现

# 开启自动备份(会根据配置文件中的周期自动调度)
/home/kingbase/dbhome/kingbase/bin/sys_backup.sh start

如需关闭定时任务,可执行如下命令:

 /home/kingbase/project/bin/sys_backup.sh stop

S3存储中查看备份文件

访问:https://192.168.40.111:9001/

S3存储路径:存储桶名字+/data/KBbackup/db_dxj/kbbr_repo目录

注意事项

  • 当数据备份至S3云存储时,建议使用DB节点作为逻辑REPO节点,这样可以减少网络传输跨越主机的次数,提高IO传输效率。
  • 文件覆盖init命令会基于配置生成新的sys_rman.conf,会覆盖已有配置,请提前备份。
  • 备份性能:全量备份对I/O负载较大,建议在业务低峰期进行;可根据网络情况,在配置文件中调整band-width参数进行限速。
  • 恢复准备:从S3恢复时,需要网络连通、密钥有效,还原前务必确保目标数据目录为空。
  • 存储成本:对象存储通常按API调用和存储量计费,请合理设置_repo_retention_full_count以控制备份集数量,避免产生不必要的费用。

参考链接:KingbaseES 集群 使用 sys_rman 备份归档到 对象存储 S3 - 墨天轮

最佳实践 | KingbaseES

更多推荐