8.2. 外部化 MySQL 数据库
使用以下步骤,将 MySQL 数据库完全外部化:
这将在进程持续期间导致环境中的停机。
步骤
登录到托管 3scale On-premises 实例的 OpenShift 节点,并更改到其项目:
oc login -u <user> <url> oc project <3scale-project>
oc login -u <user> <url> oc project <3scale-project>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<user>、<url>和<3scale-project>替换为您自己的凭证和项目名称。按照下方的步骤,按照所示的顺序缩减所有 pod。这将避免丢失数据。
停止 3scale 内部部署
从 OpenShift Web 控制台或命令行界面(CLI),按以下顺序将所有部署配置缩减为零副本:
-
apicast-wildcard-router和zync适用于 3scale 2.6 之前的版本,zync-que和zync适用于 3scale 2.6 和以上版本。 -
apicast-staging和apicast-production。 system-sidekiq、backend-cron和system-sphinx.-
3scale 2.3 包括
system-resque。
-
3scale 2.3 包括
-
system-app。 -
backend-listener和backend-worker。 backend-redis、system-memcache、system-mysql、system-redis和zync-database.以下示例演示了如何在 CLI 中为
apicast-wildcard-router和zync执行此操作 :oc scale dc/apicast-wildcard-router --replicas=0 oc scale dc/zync --replicas=0
oc scale dc/apicast-wildcard-router --replicas=0 oc scale dc/zync --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意可以同时缩减每个步骤的部署配置。例如,您可以将
apicast-wildcard-router和zync一起缩减。但是,最好等待每个步骤中的 pod 终止,然后再缩减后续 pod。3scale 实例将完全无法访问,直到它被完全启动。
-
要确认 3scale 项目上没有运行任何 pod,请使用以下命令:
oc get pod
oc get podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 命令应返回 No resources found。
使用以下命令再次扩展数据库级别的 pod:
oc scale dc/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1oc scale dc/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保您可以通过
system-mysqlpod 登录外部 MySQL 数据库,然后继续后续步骤:oc rsh system-mysql-<system_mysql_pod_id> mysql -u root -p -h <host>
oc rsh system-mysql-<system_mysql_pod_id> mysql -u root -p -h <host>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <system_mysql_pod_id>:system-mysql 容器集的标识符。
用户应当始终为 root。如需更多信息,请参阅 外部 MySQL 数据库限制。
-
CLI 现在将显示
mysql>。键入 exit,然后按 返回。在下一提示中再次键入 exit 以 返回到 OpenShift 节点控制台。
-
CLI 现在将显示
使用以下命令执行完整的 MySQL 转储:
oc rsh system-mysql-<system_mysql_pod_id> /bin/bash -c "mysqldump -u root --single-transaction --routines --triggers --all-databases" > system-mysql-dump.sql
oc rsh system-mysql-<system_mysql_pod_id> /bin/bash -c "mysqldump -u root --single-transaction --routines --triggers --all-databases" > system-mysql-dump.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
将 <system_mysql_pod_id> 替换为您唯一的
system-mysqlpod ID。 验证
system-mysql-dump.sql是否包含有效的 MySQL 级别转储,如下例所示:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
将 <system_mysql_pod_id> 替换为您唯一的
缩减
system-mysqlpod,并保留为 0(零)副本:oc scale dc/system-mysql --replicas=0
oc scale dc/system-mysql --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查找与 URL
mysql2://root:<password>@<host>/system等效的 base64,相应地替换 <password> 和 <host> :echo "mysql2://root:<password>@<host>/system" | base64
echo "mysql2://root:<password>@<host>/system" | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在远程 MySQL 数据库上创建默认的 'user'@'%'。它只需要具有 SELECT 特权。找到与 base64 等效项的 base64 信息:
echo "user" | base64 echo "<password>" | base64
echo "user" | base64 echo "<password>" | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 <password> 替换为 'user'@'%' 的密码。
执行备份并编辑 OpenShift secret
system-database:oc get secret system-database -o yaml > system-database-orig.bkp.yml oc edit secret system-database
oc get secret system-database -o yaml > system-database-orig.bkp.yml oc edit secret system-databaseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - URL :使用 [step-8] 中的值替换它。
- DB_USER 和 DB_PASSWORD :将上一步中的值用于这两者。
-
将
system-mysql-dump.sql发送到远程数据库服务器,并将转储导入到其中。使用命令导入它: 使用以下命令将
system-mysql-dump.sql发送到远程数据库服务器,并将转储导入到服务器:mysql -u root -p < system-mysql-dump.sql
mysql -u root -p < system-mysql-dump.sqlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 确保创建了名为 system 的新数据库:
mysql -u root -p -se "SHOW DATABASES"
mysql -u root -p -se "SHOW DATABASES"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下说明启动 3scale 内部部署,以正确顺序扩展所有 pod。
启动 3scale 内部部署
-
backend-redis、system-memcache、system-mysql、system-redis和zync-database. -
backend-listener和backend-worker。 -
system-app。 system-sidekiq、backend-cron和system-sphinx-
3scale 2.3 包括
system-resque。
-
3scale 2.3 包括
-
apicast-staging和apicast-production。 apicast-wildcard-router和zync适用于 3scale 2.6 之前的版本,zync-que和zync适用于 3scale 2.6 和以上版本。以下示例演示了如何在 CLI 中为
backend-redis、system-memcache、system-mysql、system-redis和zync-database执行此操作 :oc scale dc/backend-redis --replicas=1 oc scale dc/system-memcache --replicas=1 oc scale dc/system-mysql --replicas=1 oc scale dc/system-redis --replicas=1 oc scale dc/zync-database --replicas=1
oc scale dc/backend-redis --replicas=1 oc scale dc/system-memcache --replicas=1 oc scale dc/system-mysql --replicas=1 oc scale dc/system-redis --replicas=1 oc scale dc/zync-database --replicas=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow system-apppod 现在应该已启动并运行,且没有任何问题。
-
- 验证后,按照所示的顺序扩展其他容器集。
-
备份
system-mysqlDeploymentConfig 对象。您可以在几分钟后删除所有内容,确定一切运行正常。如果将来再次执行此步骤,删除system-mysqlDeploymentConfig 可避免以后出现混淆。