4.12. OADP 和 3scale


4.12.1. 使用 OADP 备份和恢复 3scale

使用红帽 3scale API 管理(APIM),您可以为内部或外部用户管理 API。在构建的性能、客户控制和未来增长的基础架构平台上共享、安全、分发、控制和货币化您的 API。您可以在内部、云端、托管服务或根据您的要求任意组合部署 3scale 组件。

注意

在本例中,非服务影响方法用于备份和恢复 3scale on-cluster 存储,使用 OpenShift API 进行数据保护(OADP) Operator。另外,请确保在备份时在同一集群中恢复 3scale。如果要在不同的集群中恢复 3scale,请确保两个集群都使用相同的自定义域。

先决条件

4.12.1.1. 创建数据保护应用程序

您可以为 3scale 创建数据保护应用程序(DPA)自定义资源(CR)。有关 DPA 的更多信息,请参阅"安装数据保护应用程序"。

流程

  1. 使用以下配置创建 YAML 文件:

    dpa.yaml 文件示例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: dpa_sample
      namespace: openshift-adp
    spec:
      configuration:
        velero:
          defaultPlugins:
            - openshift
            - aws
            - csi
          resourceTimeout: 10m
        nodeAgent:
          enable: true
          uploaderType: kopia
      backupLocations:
        - name: default
          velero:
            provider: aws
            default: true
            objectStorage:
              bucket: <bucket_name> 1
              prefix: <prefix> 2
            config:
              region: <region> 3
              profile: "default"
              s3ForcePathStyle: "true"
              s3Url: <s3_url> 4
            credential:
              key: cloud
              name: cloud-credentials

    1
    指定存储桶作为备份存储位置。如果存储桶不是 Velero 备份的专用存储桶,您必须指定一个前缀。
    2
    如果存储桶用于多个目的,请为 Velero 备份指定一个前缀,如 velero。
    3
    指定备份存储位置的区域。
    4
    指定您用于存储备份的对象存储的 URL。
  2. 运行以下命令来创建 DPA CR:

    $ oc create -f dpa.yaml

后续步骤

  • 备份 3scale Operator。

4.12.1.2. 备份 3scale Operator

您可以备份 Operator 资源,以及 Secret 和 APIManager 自定义资源(CR)。如需更多信息,请参阅"创建备份 CR"。

先决条件

  • 您创建了数据保护应用程序(DPA)。

流程

  1. 使用以下配置创建 YAML 文件,备份 Operator 资源,如 operatorgroup命名空间订阅

    backup.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: operator-install-backup
      namespace: openshift-adp
    spec:
      csiSnapshotTimeout: 10m0s
      defaultVolumesToFsBackup: false
      includedNamespaces:
      - threescale   1
      includedResources:
      - operatorgroups
      - subscriptions
      - namespaces
      itemOperationTimeout: 1h0m0s
      snapshotMoveData: false
      ttl: 720h0m0s

    1
    安装 3scale Operator 的命名空间。
    注意

    您还可以备份和恢复 ReplicationControllerDeploymentPod 对象,以确保所有手动设置环境都已备份和恢复。这不会影响恢复流。

  2. 运行以下命令来创建备份 CR:

    $ oc create -f backup.yaml
  3. 通过使用以下配置创建 YAML 文件来备份 Secret CR:

    backup-secret.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: operator-resources-secrets
      namespace: openshift-adp
    spec:
      csiSnapshotTimeout: 10m0s
      defaultVolumesToFsBackup: false
      includedNamespaces:
      - threescale
      includedResources:
      - secrets
      itemOperationTimeout: 1h0m0s
      labelSelector:
        matchLabels:
          app: 3scale-api-management
      snapshotMoveData: false
      snapshotVolumes: false
      ttl: 720h0m0s

  4. 运行以下命令来创建 Secret CR:

    $ oc create -f backup-secret.yaml
  5. 通过创建带有以下配置的 YAML 文件来备份 APIManager CR:

    backup-apimanager.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: operator-resources-apim
      namespace: openshift-adp
    spec:
      csiSnapshotTimeout: 10m0s
      defaultVolumesToFsBackup: false
      includedNamespaces:
      - threescale
      includedResources:
      - apimanagers
      itemOperationTimeout: 1h0m0s
      snapshotMoveData: false
      snapshotVolumes: false
      storageLocation: ts-dpa-1
      ttl: 720h0m0s
      volumeSnapshotLocations:
      - ts-dpa-1

  6. 运行以下命令来创建 APIManager CR:

    $ oc create -f backup-apimanager.yaml

后续步骤

  • 备份 mysql 数据库。

其他资源

4.12.1.3. 备份 mysql 数据库

您可以通过创建并附加持久性卷声明(PVC)来备份 mysql 数据库,以便在指定路径中包含转储的数据。

先决条件

  • 您已备份了 3scale operator。

流程

  1. 使用以下配置创建 YAML 文件来添加额外 PVC:

    ts_pvc.yaml 文件示例

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: example-claim
      namespace: threescale
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
      storageClassName: gp3-csi
      volumeMode: Filesystem

  2. 运行以下命令来创建额外 PVC:

    $ oc create -f ts_pvc.yml
  3. 通过编辑系统数据库部署以使用 mysql 转储,将 PVC 附加到系统数据库 pod:

    $ oc edit deployment system-mysql -n threescale
      volumeMounts:
        - name: example-claim
          mountPath: /var/lib/mysqldump/data
        - name: mysql-storage
          mountPath: /var/lib/mysql/data
        - name: mysql-extra-conf
          mountPath: /etc/my-extra.d
        - name: mysql-main-conf
          mountPath: /etc/my-extra
        ...
          serviceAccount: amp
      volumes:
            - name: example-claim
              persistentVolumeClaim:
                claimName: example-claim 1
        ...
    1
    包含转储数据的 PVC。
  4. 使用以下配置创建 YAML 文件以备份 mysql 数据库:

    mysql.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: mysql-backup
      namespace: openshift-adp
    spec:
      csiSnapshotTimeout: 10m0s
      defaultVolumesToFsBackup: true
      hooks:
        resources:
        - name: dumpdb
          pre:
          - exec:
              command:
              - /bin/sh
              - -c
              - mysqldump -u $MYSQL_USER --password=$MYSQL_PASSWORD system --no-tablespaces
                > /var/lib/mysqldump/data/dump.sql 1
              container: system-mysql
              onError: Fail
              timeout: 5m
      includedNamespaces: 2
      - threescale
      includedResources:
      - deployment
      - pods
      - replicationControllers
      - persistentvolumeclaims
      - persistentvolumes
      itemOperationTimeout: 1h0m0s
      labelSelector:
        matchLabels:
          app: 3scale-api-management
          threescale_component_element: mysql
      snapshotMoveData: false
      ttl: 720h0m0s

    1
    备份数据的目录。
    2
    要备份的资源。
  5. 运行以下命令备份 mysql 数据库:

    $ oc create -f mysql.yaml

验证

  • 运行以下命令验证 mysql 备份是否已完成:

    $ oc get backups.velero.io mysql-backup

    输出示例

    NAME                  STATUS      CREATED   NAMESPACE    POD                    VOLUME          UPLOADER TYPE   STORAGE LOCATION   AGE
    mysql-backup-4g7qn   Completed   30s       threescale   system-mysql-2-9pr44   example-claim   kopia           ts-dpa-1           30s
    mysql-backup-smh85   Completed   23s       threescale   system-mysql-2-9pr44   mysql-storage   kopia           ts-dpa-1           30s

后续步骤

  • 备份后端 Redis 数据库。

4.12.1.4. 备份后端 Redis 数据库

您可以通过添加所需的注解并使用 includedResources 参数列出哪些资源来备份 Redis 数据库。

先决条件

  • 备份 3scale Operator。
  • 您备份了 mysql 数据库。
  • 在执行备份前,Red Hat Redis 队列已排空。

流程

  1. 运行以下命令,编辑 backend-redis 部署上的注解:

    $ oc edit deployment backend-redis -n threescale
  2. 添加以下注解:

    annotations:
    post.hook.backup.velero.io/command: >-
             ["/bin/bash", "-c", "redis-cli CONFIG SET auto-aof-rewrite-percentage
             100"]
           pre.hook.backup.velero.io/command: >-
             ["/bin/bash", "-c", "redis-cli CONFIG SET auto-aof-rewrite-percentage
             0"]
  3. 使用以下配置创建 YAML 文件以备份 Redis 数据库:

    redis-backup.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: redis-backup
      namespace: openshift-adp
    spec:
      csiSnapshotTimeout: 10m0s
      defaultVolumesToFsBackup: true
      includedNamespaces:
      - threescale
      includedResources:
      - deployment
      - pods
      - replicationcontrollers
      - persistentvolumes
      - persistentvolumeclaims
      itemOperationTimeout: 1h0m0s
      labelSelector:
        matchLabels:
          app: 3scale-api-management
          threescale_component: backend
          threescale_component_element: redis
      snapshotMoveData: false
      snapshotVolumes: false
      ttl: 720h0m0s

  4. 运行以下命令备份 Redis 数据库:

    $ oc get backups.velero.io redis-backup -o yaml

验证

  • 运行以下命令验证 Redis 备份是否已完成:

    $ oc get backups.velero.io

后续步骤

  • 恢复 Secret 和 APIManager CR。

4.12.1.5. 恢复 secret 和 APIManager

您可以按照以下流程恢复 Secret 和 APIManager。

先决条件

  • 备份 3scale Operator。
  • 您备份了 mysql 和 Redis 数据库。
  • 您可以在备份的同一集群中恢复数据库。

    如果位于不同的集群中,请在目标集群上启用了 nodeAgent 来安装和配置 OADP,因为它位于源集群上。

流程

  1. 运行以下命令,删除 3scale Operator 自定义资源定义(CRD)和 threescale 命名空间:

    $ oc delete project threescale

    输出示例

    "threescale" project deleted successfully

  2. 使用以下配置创建 YAML 文件,以恢复 3scale Operator:

    restore.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: operator-installation-restore
      namespace: openshift-adp
    spec:
      backupName: operator-install-backup
      excludedResources:
      - nodes
      - events
      - events.events.k8s.io
      - backups.velero.io
      - restores.velero.io
      - resticrepositories.velero.io
      - csinodes.storage.k8s.io
      - volumeattachments.storage.k8s.io
      - backuprepositories.velero.io
      itemOperationTimeout: 4h0m0s

  3. 运行以下命令来恢复 3scale Operator:

    $ oc create -f restore.yaml
  4. 运行以下命令手动创建 s3-credentials Secret 对象:

    $ oc apply -f - <<EOF
    ---
    apiVersion: v1
    kind: Secret
    metadata:
          name: s3-credentials
          namespace: threescale
    stringData:
      AWS_ACCESS_KEY_ID: <ID_123456> 1
      AWS_SECRET_ACCESS_KEY: <ID_98765544> 2
      AWS_BUCKET: <mybucket.example.com> 3
      AWS_REGION: <us-east-1> 4
    type: Opaque
    EOF
    1
    将 <ID_123456> 替换为您的 AWS 凭证 ID。
    2
    将 <ID_98765544> 替换为您的 AWS 凭证 KEY。
    3
    将 <mybucket.example.com> 替换为您的目标存储桶名称。
    4
    将 <us-east-1> 替换为存储桶的 AWS 区域。
  5. 运行以下命令缩减 3scale Operator:

    $ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale
  6. 使用以下配置创建 YAML 文件以恢复 Secret:

    restore-secret.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: operator-resources-secrets
      namespace: openshift-adp
    spec:
      backupName: operator-resources-secrets
      excludedResources:
      - nodes
      - events
      - events.events.k8s.io
      - backups.velero.io
      - restores.velero.io
      - resticrepositories.velero.io
      - csinodes.storage.k8s.io
      - volumeattachments.storage.k8s.io
      - backuprepositories.velero.io
      itemOperationTimeout: 4h0m0s

  7. 运行以下命令来恢复 Secret:

    $ oc create -f restore-secrets.yaml
  8. 使用以下配置创建 YAML 文件以恢复 APIManager:

    restore-apimanager.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: operator-resources-apim
      namespace: openshift-adp
    spec:
      backupName: operator-resources-apim
      excludedResources: 1
      - nodes
      - events
      - events.events.k8s.io
      - backups.velero.io
      - restores.velero.io
      - resticrepositories.velero.io
      - csinodes.storage.k8s.io
      - volumeattachments.storage.k8s.io
      - backuprepositories.velero.io
      itemOperationTimeout: 4h0m0s

    1
    您不想恢复的资源。
  9. 运行以下命令来恢复 APIManager:

    $ oc create -f restore-apimanager.yaml
  10. 运行以下命令来扩展 3scale Operator:

    $ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale

后续步骤

  • 恢复 mysql 数据库。

4.12.1.6. 恢复 mysql 数据库

恢复 mysql 数据库重新创建以下资源:

  • PodReplicationControllerDeployment 对象。
  • 其他持久性卷(PV)和关联的持久性卷声明(PVC)。
  • mysql 转储,example-claim PVC 包含它。
警告

不要删除与数据库关联的默认 PV 和 PVC。如果这样做,您的备份会被删除。

先决条件

  • 已恢复 Secret 和 APIManager 自定义资源(CR)。

流程

  1. 运行以下命令缩减 3scale Operator:

    $ oc scale deployment threescale-operator-controller-manager-v2 --replicas=0 -n threescale

    输出示例:

    deployment.apps/threescale-operator-controller-manager-v2 scaled

  2. 创建以下脚本以缩减 3scale Operator:

    $ vi ./scaledowndeployment.sh

    输出示例:

    for deployment in apicast-production apicast-staging backend-cron backend-listener backend-redis backend-worker system-app system-memcache system-mysql system-redis system-searchd system-sidekiq zync zync-database zync-que; do
        oc scale deployment/$deployment --replicas=0 -n threescale
    done

  3. 运行以下命令缩减所有部署 3scale 组件:

    $ ./scaledowndeployment.sh

    输出示例:

    deployment.apps.openshift.io/apicast-production scaled
    deployment.apps.openshift.io/apicast-staging scaled
    deployment.apps.openshift.io/backend-cron scaled
    deployment.apps.openshift.io/backend-listener scaled
    deployment.apps.openshift.io/backend-redis scaled
    deployment.apps.openshift.io/backend-worker scaled
    deployment.apps.openshift.io/system-app scaled
    deployment.apps.openshift.io/system-memcache scaled
    deployment.apps.openshift.io/system-mysql scaled
    deployment.apps.openshift.io/system-redis scaled
    deployment.apps.openshift.io/system-searchd scaled
    deployment.apps.openshift.io/system-sidekiq scaled
    deployment.apps.openshift.io/zync scaled
    deployment.apps.openshift.io/zync-database scaled
    deployment.apps.openshift.io/zync-que scaled

  4. 运行以下命令来删除 system-mysql Deployment 对象:

    $ oc delete deployment system-mysql -n threescale

    输出示例:

    Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+
    deployment.apps.openshift.io "system-mysql" deleted

  5. 创建以下 YAML 文件以恢复 mysql 数据库:

    restore-mysql.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: restore-mysql
      namespace: openshift-adp
    spec:
      backupName: mysql-backup
      excludedResources:
        - nodes
        - events
        - events.events.k8s.io
        - backups.velero.io
        - restores.velero.io
        - csinodes.storage.k8s.io
        - volumeattachments.storage.k8s.io
        - backuprepositories.velero.io
        - resticrepositories.velero.io
      hooks:
        resources:
          - name: restoreDB
            postHooks:
              - exec:
                  command:
                    - /bin/sh
                    - '-c'
                    - >
                      sleep 30
    
                      mysql -h 127.0.0.1 -D system -u root
                      --password=$MYSQL_ROOT_PASSWORD <
                      /var/lib/mysqldump/data/dump.sql 1
                  container: system-mysql
                  execTimeout: 80s
                  onError: Fail
                  waitTimeout: 5m
      itemOperationTimeout: 1h0m0s
      restorePVs: true

    1
    从中恢复数据的路径。
  6. 运行以下命令来恢复 mysql 数据库:

    $ oc create -f restore-mysql.yaml

验证

  1. 运行以下命令验证 PodVolumeRestore 恢复是否已完成:

    $ oc get podvolumerestores.velero.io -n openshift-adp

    输出示例:

    NAME                    NAMESPACE    POD                     UPLOADER TYPE   VOLUME                  STATUS      TOTALBYTES   BYTESDONE   AGE
    restore-mysql-rbzvm     threescale   system-mysql-2-kjkhl    kopia           mysql-storage           Completed   771879108    771879108   40m
    restore-mysql-z7x7l     threescale   system-mysql-2-kjkhl    kopia           example-claim           Completed   380415       380415      40m

  2. 运行以下命令验证额外的 PVC 是否已恢复:

    $ oc get pvc -n threescale

    输出示例:

    NAME                    STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    backend-redis-storage   Bound    pvc-3dca410d-3b9f-49d4-aebf-75f47152e09d   1Gi        RWO            gp3-csi        <unset>                 68m
    example-claim           Bound    pvc-cbaa49b0-06cd-4b1a-9e90-0ef755c67a54   1Gi        RWO            gp3-csi        <unset>                 57m
    mysql-storage           Bound    pvc-4549649f-b9ad-44f7-8f67-dd6b9dbb3896   1Gi        RWO            gp3-csi        <unset>                 68m
    system-redis-storage    Bound    pvc-04dadafd-8a3e-4d00-8381-6041800a24fc   1Gi        RWO            gp3-csi        <unset>                 68m
    system-searchd          Bound    pvc-afbf606c-d4a8-4041-8ec6-54c5baf1a3b9   1Gi        RWO            gp3-csi        <unset>                 68m

后续步骤

  • 恢复后端 Redis 数据库。

4.12.1.7. 恢复后端 Redis 数据库

您可以通过删除部署并指定您不想恢复的资源来恢复后端 Redis 数据库。

先决条件

  • 已恢复 Secret 和 APIManager 自定义资源。
  • 您恢复了 mysql 数据库。

流程

  1. 运行以下命令来删除 backend-redis 部署:

    $ oc delete deployment backend-redis -n threescale

    输出示例:

    Warning: apps.openshift.io/v1 deployment is deprecated in v4.14+, unavailable in v4.10000+
    
    deployment.apps.openshift.io "backend-redis" deleted

  2. 使用以下配置创建 YAML 文件,以恢复 Redis 数据库:

    restore-backend.yaml 文件示例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: restore-backend
      namespace: openshift-adp
    spec:
      backupName: redis-backup
      excludedResources:
        - nodes
        - events
        - events.events.k8s.io
        - backups.velero.io
        - restores.velero.io
        - resticrepositories.velero.io
        - csinodes.storage.k8s.io
        - volumeattachments.storage.k8s.io
        - backuprepositories.velero.io
      itemOperationTimeout: 1h0m0s
      restorePVs: true

  3. 运行以下命令来恢复 Redis 数据库:

    $ oc create -f restore-backend.yaml

验证

  • 运行以下命令验证 PodVolumeRestore 恢复是否已完成:

    $ oc get podvolumerestores.velero.io -n openshift-adp

    输出示例:

    NAME                    NAMESPACE    POD                     UPLOADER TYPE   VOLUME                  STATUS      TOTALBYTES   BYTESDONE   AGE
    restore-backend-jmrwx   threescale   backend-redis-1-bsfmv   kopia           backend-redis-storage   Completed   76123        76123       21m

后续步骤

  • 扩展 3scale Operator 和部署。

4.12.1.8. 扩展 3scale Operator 和部署

您可以扩展 3scale Operator 以及手动缩减的任何部署。几分钟后,3scale 安装应完全正常工作,其状态应与备份的状态匹配。

先决条件

  • 确保没有扩展部署,或者没有额外的 pod 运行。一些 system-mysqlbackend-redis pod 在恢复后从部署分离,可以在恢复成功后删除。

流程

  1. 运行以下命令来扩展 3scale Operator:

    $ oc scale deployment threescale-operator-controller-manager-v2 --replicas=1 -n threescale
  2. 运行以下命令,确保部署了 3scale Operator:

    $ oc get deployment -n threescale
  3. 执行以下脚本来扩展部署:

    $ ./scaledeployment.sh
  4. 运行以下命令,获取 3scale-admin 路由以登录到 3scale UI:

    $ oc get routes -n threescale

    输出示例

    NAME                         HOST/PORT                                                                   PATH   SERVICES             PORT      TERMINATION     WILDCARD
    backend                      backend-3scale.apps.custom-cluster-name.openshift.com                         backend-listener     http      edge/Allow      None
    zync-3scale-api-b4l4d        api-3scale-apicast-production.apps.custom-cluster-name.openshift.com          apicast-production   gateway   edge/Redirect   None
    zync-3scale-api-b6sns        api-3scale-apicast-staging.apps.custom-cluster-name.openshift.com             apicast-staging      gateway   edge/Redirect   None
    zync-3scale-master-7sc4j     master.apps.custom-cluster-name.openshift.com                                 system-master        http      edge/Redirect   None
    zync-3scale-provider-7r2nm   3scale-admin.apps.custom-cluster-name.openshift.com                           system-provider      http      edge/Redirect   None
    zync-3scale-provider-mjxlb   3scale.apps.custom-cluster-name.openshift.com                                 system-developer     http      edge/Redirect   None

    在本例中,3scale-admin.apps.custom-cluster-name.openshift.com 是 3scale-admin URL。

  5. 使用此输出中的 URL 以管理员身份登录 3scale Operator。您可以在尝试创建备份前验证现有数据是否可用。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.