搜索

3.3. 使用 Operator 将本地数据库迁移到外部数据库服务器

download PDF

默认情况下,Red Hat Developer Hub 在 PostgreSQL 数据库中托管每个插件的数据。当您获取数据库列表时,您可能会看到基于 Developer Hub 中配置的插件数量的多个数据库。您可以将托管在本地 PostgreSQL 服务器上的 RHDH 实例迁移到外部 PostgreSQL 服务,如 AWS RDS、Azure 数据库或 Crunchy 数据库。要从每个 RHDH 实例迁移数据,您可以使用 PostgreSQL 工具,如 pg_dumppsqlpgAdmin

注意

以下流程使用 数据库复制脚本 进行快速迁移。

先决条件

  • 您已在本地机器上安装了 pg_dumppsql 工具。
  • 对于数据导出,您有 PGSQL 用户特权,以便对本地数据库进行完整的转储。
  • 对于数据导入,您有 PGSQL admin 特权来创建外部数据库,并使用数据库转储填充。

流程

  1. 在终端中运行以下命令,为本地 PostgreSQL 数据库 pod 配置端口转发:

    oc port-forward -n <your-namespace> <pgsql-pod-name> <forward-to-port>:<forward-from-port>

    其中:

    • & lt;pgsql-pod-name& gt; 变量表示 PostgreSQL pod 的名称,格式为 backstage-psql-<deployment-name>-<_index>
    • & lt;forward-to-port > 变量表示您选择的端口将 PostgreSQL 数据转发到。
    • & lt;forward-from-port > 变量表示本地 PostgreSQL 实例端口,如 5432

      示例:配置端口转发

      oc port-forward -n developer-hub backstage-psql-developer-hub-0 15432:5432

  2. 复制以下 db_copy.sh 脚本,并根据您的配置编辑详情:

    #!/bin/bash
    
    to_host=<db-service-host> 1
    to_port=5432 2
    to_user=postgres 3
    
    from_host=127.0.0.1 4
    from_port=15432 5
    from_user=postgres 6
    
    allDB=("backstage_plugin_app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search") 7
    
    for db in ${!allDB[@]};
    do
      db=${allDB[$db]}
      echo Copying database: $db
      PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -c "create database $db;"
      pg_dump -h $from_host -p $from_port -U $from_user -d $db | PGPASSWORD=$TO_PSW psql -h $to_host -p $to_port -U $to_user -d $db
    done
    1
    目标主机名,例如 < db-instance-name>.rds.amazonaws.com
    2
    目的地端口,如 5432
    3
    目标服务器用户名,例如 postgres
    4
    源主机名,如 127.0.0.1
    5
    源端口号,如 < forward-to-port> 变量。
    6
    源服务器用户名,如 postgres
    7
    要使用双引号导入的数据库名称,例如:"backstage_plugin_ app" "backstage_plugin_auth" "backstage_plugin_catalog" "backstage_plugin_permission" "backstage_plugin_permission" "backstage_plugin_scaffolder" "backstage_plugin_search")
  3. 创建用于复制数据的目的地数据库:

    /bin/bash TO_PSW=<destination-db-password> /path/to/db_copy.sh 1
    1
    & lt;destination-db-password > 变量表示要连接到目标数据库的密码。
    注意

    当数据复制完成后,您可以停止端口转发。有关处理大型数据库和使用压缩工具的更多信息,请参阅 PostgreSQL 网站上的 Handling Large Databases 部分。

  4. 重新配置 Backstage 自定义资源(CR)。如需更多信息,请参阅使用 Operator 配置外部 PostgreSQL 实例
  5. 在重新配置后,检查 Backstage CR 的末尾是否存在以下代码:

    # ...
    spec:
      database:
        enableLocalDb: false
      application:
      # ...
        extraFiles:
          secrets:
            - name: <crt-secret>
              key: postgres-crt.pem # key name as in <crt-secret> Secret
        extraEnvs:
          secrets:
            - name: <cred-secret>
    # ...
    注意

    重新配置 Backstage CR 会删除对应的 StatefulSetPod 对象,但不删除 PersistenceVolumeClaim 对象。使用以下命令删除本地 PersistenceVolumeClaim 对象:

    oc -n developer-hub delete pvc <local-psql-pvc-name>

    其中,&lt ;local-psql-pvc-name&gt; 变量采用 data-<psql-pod-name> 格式。

  6. 应用配置更改。

验证

  1. 运行以下命令,验证您的 RHDH 实例是否使用迁移的数据运行,且不包含本地 PostgreSQL 数据库:

    oc get pods -n <your-namespace>
  2. 检查以下详情的输出:

    • backstage-developer-hub-xxx pod 处于 running 状态。
    • backstage-psql-developer-hub-0 pod 不可用。

      您还可以使用 OpenShift Container Platform Web 控制台中的 Topology 视图来验证这些详情。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.