5.2. MySQL データベースの外部化
MySQL データベースを完全に外部化するには、以下の手順を使用します。
この操作により、プロセスの進行中に環境でダウンタイムが発生します。
手順
オンプレミス型 3scale インスタンスをホストする 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) から、すべてのデプロイメント設定を以下の順序でゼロレプリカにスケールダウンします。
-
3scale 2.6 より前のバージョンの場合は
apicast-wildcard-routerとzync、3scale 2.6 以降の場合はzync-queとzync -
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以下の例は、
apicast-wildcard-routerとzyncについて、CLI でこの操作を実施する方法を示しています。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 2.6 より前のバージョンの場合は
3scale プロジェクトで実行中の Pod がないことを確認するには、以下のコマンドを使用します。
oc get pods -n <3scale_namespace>
oc get pods -n <3scale_namespace>Copy 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=1$ oc 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>
$ 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 Pod の識別子
ユーザーは必ず root でなければなりません。詳しくは、外部 MySQL データベースに関する制約 を参照してください。
-
CLI に
mysql>が表示されるようになります。exit と入力してから enter キーを押します。次のプロンプトで再度 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 <password> と <host> を適宜置き換え、URL
mysql2://root:<password>@<host>/systemの base64 変換値を取得します。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 変換値を取得します。
echo "user" | base64 echo "<password>" | base64
$ echo "user" | base64 $ echo "<password>" | base64Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <password> を 'user'@'%' のパスワードに置き換えます。
バックアップを実行し、OpenShift シークレット
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 3scale 2.6 より前のバージョンの場合は
apicast-wildcard-routerとzync、3scale 2.6 以降の場合はzync-queとzync以下の例は、
backend-redis、system-memcache、system-mysql、system-redis、およびzync-databaseについて、CLI でこの操作を実行する方法を示しています。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 が問題なく起動し、実行されるはずです。
-
- 確認後、上記の順序 で他の Pod をスケールアップして元の状態に戻します。
-
system-mysqlDeploymentConfig オブジェクトのバックアップを作成します。数日後、すべて正常に動作していることが確認できたら、削除してかまいません。system-mysqlDeploymentConfig を削除することで、この手順を今後再び実行する場合の混乱を防ぐことができます。