9.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=0
Copy 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 pod
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=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のステップに進む前に、
system-mysql
Pod を通じて外部 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.sql
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<system_mysql_pod_id> を一意の
system-mysql
Pod ID に置き換えます。 次の例のように、ファイル
system-mysql-dump.sql
に有効な MySQL レベルのダンプが含まれていることを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
<system_mysql_pod_id> を一意の
system-mysql
Pod をスケールダウンし、レプリカが 0 (ゼロ) のままにします。oc scale dc/system-mysql --replicas=0
oc scale dc/system-mysql --replicas=0
Copy 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" | base64
Copy to Clipboard Copied! Toggle word wrap Toggle overflow リモート MySQL データベースのデフォルトの 'user'@'%' を作成します。これには SELECT 権限しか付与する必要はありません。また、その base64 変換値を取得します。
echo "user" | base64 echo "<password>" | base64
echo "user" | base64 echo "<password>" | base64
Copy 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-database
Copy 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.sql
Copy 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=1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow system-app
Pod が問題なく起動し、実行されるはずです。
-
- 確認後、上記の順序 で他の Pod をスケールアップして元の状態に戻します。
-
system-mysql
DeploymentConfig オブジェクトのバックアップを作成します。数日後、すべて正常に動作していることが確認できたら、削除してかまいません。system-mysql
DeploymentConfig を削除することで、この手順を今後再び実行する場合の混乱を防ぐことができます。