10.2. 外部化 MySQL 数据库
使用以下步骤,将 MySQL 数据库完全外部化。
这将在进程持续期间导致环境中的停机。
流程
登录到托管 3scale On-premises 实例的 OpenShift 节点,并更改到其项目:
oc login -u <user> <url> oc project <3scale-project>
将
<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
注意可以同时缩减每个步骤的部署配置。例如,您可以将
apicast-wildcard-router
和zync
一起缩减。但是,最好等待每个步骤中的 pod 终止,然后再缩减后续 pod。3scale 实例将完全无法访问,直到它被完全启动。
-
要确认 3scale 项目上没有运行任何 pod,请使用以下命令:
oc get pod
命令应返回 No resources found。
使用以下命令再次扩展数据库级别的 pod:
oc scale dc/{backend-redis,system-memcache,system-mysql,system-redis,zync-database} --replicas=1
确保您可以通过
system-mysql
pod 登录外部 MySQL 数据库,然后继续后续步骤:oc rsh system-mysql-<system_mysql_pod_id> mysql -u root -p -h <host>
- <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
-
将 <system_mysql_pod_id> 替换为您唯一的
system-mysql
pod ID。 验证
system-mysql-dump.sql
是否包含有效的 MySQL 级别转储,如下例所示:$ head -n 10 system-mysql-dump.sql -- MySQL dump 10.13 Distrib 5.7.24, for Linux (x86_64) -- -- Host: localhost Database: -- ------------------------------------------------------ -- Server version 5.7.24 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */;
-
将 <system_mysql_pod_id> 替换为您唯一的
缩减
system-mysql
pod,并保留为 0(零)副本:oc scale dc/system-mysql --replicas=0
查找与 URL
mysql2://root:<password>@<host>/system
等效的 base64,相应地替换 <password> 和 <host> :echo "mysql2://root:<password>@<host>/system" | base64
在远程 MySQL 数据库上创建默认的 'user'@'%'。它只需要具有 SELECT 特权。找到它的 base64 对等信息:
echo "user" | base64 echo "<password>" | base64
- 将 <password> 替换为 'user'@'%' 的密码。
执行备份并编辑 OpenShift secret
system-database
:oc get secret system-database -o yaml > system-database-orig.bkp.yml oc edit secret system-database
- URL :使用 [step-8] 中的值替换它。
- DB_USER 和 DB_PASSWORD :将上一步中的值用于这两者。
-
将
system-mysql-dump.sql
发送到远程数据库服务器,并将转储导入到其中。使用命令导入它: 使用以下命令将
system-mysql-dump.sql
发送到远程数据库服务器,并将转储导入到服务器:mysql -u root -p < system-mysql-dump.sql
确保创建了名为 system 的新数据库:
mysql -u root -p -se "SHOW DATABASES"
使用以下说明启动 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
system-app
pod 现在应该已启动并运行,且没有任何问题。
-
- 验证后,按照所示的顺序扩展其他容器集。
-
备份
system-mysql
DeploymentConfig 对象。您可以在几分钟后删除所有内容,确定一切运行正常。如果将来再次执行此步骤,删除system-mysql
DeploymentConfig 可避免以后出现混淆。