OceanBase on K8S备份篇

一、备份版本要求

OceanBase版本:4.2.5

ob-operator版本:2.3.0

备份介质:百度云对象存储 BOS(S3协议

备份说明:OceanBase很早就支持了NFS、阿里云OSS、腾讯云COS这些备份介质, V4.2.1 BP7 版本开始,还支持 AWS S3 以及兼容 S3 协议的对象存储,例如:百度对象存储 BOS、华为 OBS、Google GCS。最近在OB官方支持下,完成了OB的备份,其实还是有不少挑战的,跟OB版本、Operator版本和备份介质不同配置也不同。为了方便大家,我将操作流程整理发布。

本文目标:将部署在K8S中的OceanBase 4.2.5集群中某个租户的数据全量备份到百度云对象存储BOS。

二、准备工作

根据上面设定的条件,因operator部署版本过低(2.2.0)需要升级ob-operator到2.3.0才支持将OceanBase备份到兼容S3协议的对象存储中。

ob-operator升级操作如下:

wget https://raw.githubusercontent.com/oceanbase/ob-operator/2.3.0_release/deploy/operator.yamlkubectl apply -f operator-230.yaml -n oceanbase-system

三、备份操作流程

(1)创建可访问百度S3密钥

kubectl create secret generic access-s3 --from-literal accessId=xxxx --from-literal accessKey=xxxx --from-literal s3Region=xxx -n oceanbase-test1

PS:accessId(明文)、accessKey(明文)、s3Region(地区)这些信可以在百度云对象存储控制台获取

(2)编辑ob-backup.yaml

apiVersion: oceanbase.oceanbase.com/v1alpha1kind: OBTenantBackupPolicymetadata:  name: obtenant-bp-s3  namespace: oceanbase-test1spec:  obClusterName: obcluster  tenantCRName: oceanbase  jobKeepWindow: "1d"  dataClean:    recoveryWindow: "8d"  logArchive:    destination:      type: "S3"      path: "s3://backup-s3/oblog-backup?host=s3.xxxx.com"      ossAccessSecret: "access-s3"    switchPieceInterval: "1d"  dataBackup:    destination:      type: "S3"      path: "s3://backup-s3/obdata-backup?host=s3.xxxx.com"      ossAccessSecret: "access-s3"    fullCrontab: "2 17 * * 6"    incrementalCrontab: "30 18 * * *"

当前需要备份的租户信息

相关字段说明,参考:

obClusterName:同 namespace 下 OB 集群资源的名称,例如上图的obclustertenantName(可选):数据库中的租户名,例如上图的dxltesttenantSecret(可选):包含名为 tenantName 的租户 root 用户密码的 Secret 资源名tenantCRName:OBTenant 租户资源名,若指定了该字段,则无需指定 tenantName 和 tenantSecret,例如上图的资源名oceanbasejobKeepWindow:备份任务资源保留时间窗口suspend:备份任务是否暂停,如果不配置,默认为 falsedataClean:过期备份数据清理配置  recoveryWindow:数据恢复的时间窗口logArchive:日志归档配置  destination:备份目的地配置  switchPieceInterval:日志归档中 piece 的切换周期,取值范围为 [1d, 7d]。如果不设置,默认为 1d  binding:设置归档和业务的优先模式。目前支持 Optional 和 Mandatory 两种模式。如果不配置,默认为 Optional 模式  dataBackup:数据备份配置  destination:备份目的地配置  fullCrontab:全量备份的定时触发配置,采用 linux crontab 格式  incrementalCrontab:增量备份的定时触发配置,采用 linux crontab 格式  encryptionSecret: 数据备份加密配置的 Secret 资源名
destination:备份目的地配置 type:目的地类型,支持 NFS 和 OSS 两种 path:目的地的备份路径,如果是 OSS 类型,则需要以 oss:// 开头;如果是 NFS 类型,则是非 / 开头的相对路径。 ossAccessSecret:存放访问 OSS 凭证的 Secret 资源名,如果备份目的地类型为 OSS,该字段必须提供。

(3)应用backup,默认第一次就立刻执行备份

/opt/ob-operator# kubectl apply -f ob-backup.yaml -n oceanbase-test1obtenantbackuppolicy.oceanbase.oceanbase.com/obtenant-bp-s3 created

(4)查看备份情况

租户数据备份的关键资源为 OBTenantBackupPolicy 和 OBTenantBackup,分别表示备份策略和备份任务。通过备份策略,可以为 OceanBase 集群当中某个租户指定周期性的日志归档和数据备份配置。备份策略会通过创建备份任务的方式来执行具体的任务。

/opt/ob-operator# kubectl get -A OBTenantBackupPolicyNAMESPACE         NAME             STATUS     AGE   TENANTNAME   NEXTFULL   NEXTINCREMENTAL   FULLCRONTAB   INCREMENTALCRONTABoceanbase-test1   obtenant-bp-s3   PREPARED   14s                                             2 17 * * *    30 18 * * */opt/ob-operator# kubectl get -A OBTenantBackupsNAMESPACE         NAME                                    TYPE      STATUS         TENANTNAME   STARTEDAT                    ENDEDAToceanbase-test1   obtenant-bp-s3-archive-20241113170137   ARCHIVE   RUNNING        dxltest      2024-11-13 16:42:11.546764   2024-11-13 17:00:11.772978oceanbase-test1   obtenant-bp-s3-clean-20241113170137     CLEAN     SUCCESSFUL     dxltest      2024-11-13 16:58:49.563224   2024-11-13 16:58:51.000696oceanbase-test1   obtenant-bp-s3-full-20241113170148      FULL      INITIALIZING   dxltest/opt/ob-operator# kubectl get -A OBTenantBackupPolicyNAMESPACE         NAME             STATUS    AGE   TENANTNAME   NEXTFULL              NEXTINCREMENTAL   FULLCRONTAB   INCREMENTALCRONTABoceanbase-test1   obtenant-bp-s3   RUNNING   58s                2024-11-13 17:01:49                     2 17 * * *    30 18 * * */opt/ob-operator# kubectl get -A OBTenantBackupPolicyNAMESPACE         NAME             STATUS    AGE    TENANTNAME   NEXTFULL              NEXTINCREMENTAL   FULLCRONTAB   INCREMENTALCRONTABoceanbase-test1   obtenant-bp-s3   RUNNING   115s                2024-11-13 17:01:49                     2 17 * * *    30 18 * * *

PS:有时会faild失败,需要delete备份策略重新执行。官方解释:归档任务已经在执行中了,刚才状态变成 FAILED 的原因是启动归档之后立即查询归档进度表,其中有个 String 字段返回了 NULL。

/opt/ob-operator# kubectl get -A OBTenantBackupPolicyNAMESPACE         NAME             STATUS   AGE   TENANTNAME   NEXTFULL   NEXTINCREMENTAL   FULLCRONTAB               INCREMENTALCRONTABoceanbase-test1   obtenant-bp-s3   FAILED   13m                                             47 16 * * 1,2,3,4,5,6,0   47 16 * * */opt/ob-operator# kubectl describe OBTenantBackupPolicy obtenant-bp-s3 -n oceanbase-test1Events:  Type     Reason       Age    From                             Message  ----     ------       ----   ----                             -------  Normal                6m50s  obtenantbackuppolicy-controller  Init status  Warning  Task failed  5m53s  obtenantbackuppolicy-controller  Query list failed, sql SELECT dest_id, round_id, dest_no, status, start_scn, start_scn_display, checkpoint_scn, checkpoint_scn_display, compatible, base_piece_id, used_piece_id, piece_switch_interval, input_bytes, input_bytes_display, output_bytes, output_bytes_display, compression_ratio, deleted_input_bytes, deleted_input_bytes_display, deleted_output_bytes, deleted_output_bytes_display, comment, path FROM DBA_OB_ARCHIVELOG_SUMMARY ORDER BY round_id DESC LIMIT 1, param []: sql: Scan error on column index 7, name "checkpoint_scn_display": converting NULL to string is unsupported/opt/ob-operator# kubectl delete OBTenantBackupPolicy obtenant-bp-s3  -n oceanbase-test1obtenantbackuppolicy.oceanbase.oceanbase.com "obtenant-bp-s3" deleted/opt/ob-operator# kubectl get OBTenantBackupPolicy  -n oceanbase-test1No resources found in oceanbase-test1 namespace./opt/ob-operator# kubectl apply -f ob-backup.yaml -n oceanbase-test1obtenantbackuppolicy.oceanbase.oceanbase.com/obtenant-bp-s3 create

(5)执行后就可以在页面查看了(对于页面上实现操作OB备份到普通S3存储,需要等到ob-dashboard 0.4.0发版)

四、总结

通过OceanBase DashBoard中租户的备份业务发现已经完成了一次全量备份。至此完成了OceanBase on K8S在百度云对象存储S3介质的数据备份。

参考:

https://oceanbase.github.io/ob-operator/zh-Hans/docs/manual/ob-operator-user-guide/high-availability/tenant-backup-of-ob-operator


请使用浏览器的分享功能分享到微信等