10.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 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 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 を削除することで、この手順を今後再び実行する場合の混乱を防ぐことができます。