暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase on K8S备份篇

晓磊聊DB 2024-11-14
95

一、备份版本要求

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.yaml
    kubectl 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/v1alpha1
        kind: OBTenantBackupPolicy
        metadata:
        name: obtenant-bp-s3
        namespace: oceanbase-test1
        spec:
        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 集群资源的名称,例如上图的obcluster
          tenantName(可选):数据库中的租户名,例如上图的dxltest
          tenantSecret(可选):包含名为 tenantName 的租户 root 用户密码的 Secret 资源名
          tenantCRName:OBTenant 租户资源名,若指定了该字段,则无需指定 tenantName 和 tenantSecret,例如上图的资源名oceanbase
          jobKeepWindow:备份任务资源保留时间窗口
          suspend:备份任务是否暂停,如果不配置,默认为 false
          dataClean:过期备份数据清理配置
          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-test1
            obtenantbackuppolicy.oceanbase.oceanbase.com/obtenant-bp-s3 created


            (4)查看备份情况

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


              /opt/ob-operator# kubectl get -A OBTenantBackupPolicy
              NAMESPACE NAME STATUS AGE TENANTNAME NEXTFULL NEXTINCREMENTAL FULLCRONTAB INCREMENTALCRONTAB
              oceanbase-test1 obtenant-bp-s3 PREPARED 14s 2 17 * * * 30 18 * * *
              /opt/ob-operator# kubectl get -A OBTenantBackups
              NAMESPACE NAME TYPE STATUS TENANTNAME STARTEDAT ENDEDAT
              oceanbase-test1 obtenant-bp-s3-archive-20241113170137 ARCHIVE RUNNING dxltest 2024-11-13 16:42:11.546764 2024-11-13 17:00:11.772978
              oceanbase-test1 obtenant-bp-s3-clean-20241113170137 CLEAN SUCCESSFUL dxltest 2024-11-13 16:58:49.563224 2024-11-13 16:58:51.000696
              oceanbase-test1 obtenant-bp-s3-full-20241113170148 FULL INITIALIZING dxltest
              /opt/ob-operator# kubectl get -A OBTenantBackupPolicy
              NAMESPACE NAME STATUS AGE TENANTNAME NEXTFULL NEXTINCREMENTAL FULLCRONTAB INCREMENTALCRONTAB
              oceanbase-test1 obtenant-bp-s3 RUNNING 58s 2024-11-13 17:01:49 2 17 * * * 30 18 * * *
              /opt/ob-operator# kubectl get -A OBTenantBackupPolicy
              NAMESPACE NAME STATUS AGE TENANTNAME NEXTFULL NEXTINCREMENTAL FULLCRONTAB INCREMENTALCRONTAB
              oceanbase-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 OBTenantBackupPolicy
                NAMESPACE NAME STATUS AGE TENANTNAME NEXTFULL NEXTINCREMENTAL FULLCRONTAB INCREMENTALCRONTAB
                oceanbase-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-test1
                Events:
                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-test1
                obtenantbackuppolicy.oceanbase.oceanbase.com "obtenant-bp-s3" deleted
                /opt/ob-operator# kubectl get OBTenantBackupPolicy -n oceanbase-test1
                No resources found in oceanbase-test1 namespace.
                /opt/ob-operator# kubectl apply -f ob-backup.yaml -n oceanbase-test1
                obtenantbackuppolicy.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


                文章转载自晓磊聊DB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论