3.3. 使用 Operator 将本地数据库迁移到外部数据库服务器
默认情况下,Red Hat Developer Hub 在 PostgreSQL 数据库中托管每个插件的数据。当您获取数据库列表时,您可能会看到基于 Developer Hub 中配置的插件数量的多个数据库。您可以将托管在本地 PostgreSQL 服务器上的 RHDH 实例迁移到外部 PostgreSQL 服务,如 AWS RDS、Azure 数据库或 Crunchy 数据库。要从每个 RHDH 实例迁移数据,您可以使用 PostgreSQL 工具,如 pg_dump
和 psql
或 pgAdmin
。
以下流程使用 数据库复制脚本 进行快速迁移。
先决条件
流程
在终端中运行以下命令,为本地 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
-
&
复制以下
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")
。
创建用于复制数据的目的地数据库:
/bin/bash TO_PSW=<destination-db-password> /path/to/db_copy.sh 1
- 1
- &
lt;destination-db-password
> 变量表示要连接到目标数据库的密码。
注意当数据复制完成后,您可以停止端口转发。有关处理大型数据库和使用压缩工具的更多信息,请参阅 PostgreSQL 网站上的 Handling Large Databases 部分。
-
重新配置
Backstage
自定义资源(CR)。如需更多信息,请参阅使用 Operator 配置外部 PostgreSQL 实例。 在重新配置后,检查
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 会删除对应的StatefulSet
和Pod
对象,但不删除PersistenceVolumeClaim
对象。使用以下命令删除本地PersistenceVolumeClaim
对象:oc -n developer-hub delete pvc <local-psql-pvc-name>
其中,<
;local-psql-pvc-name>
; 变量采用data-<psql-pod-name>
格式。- 应用配置更改。
验证
运行以下命令,验证您的 RHDH 实例是否使用迁移的数据运行,且不包含本地 PostgreSQL 数据库:
oc get pods -n <your-namespace>
检查以下详情的输出:
-
backstage-developer-hub-xxx
pod 处于 running 状态。 backstage-psql-developer-hub-0
pod 不可用。您还可以使用 OpenShift Container Platform Web 控制台中的 Topology 视图来验证这些详情。
-