10.2. MySQL データベースの外部化
MySQL データベースを完全に外部化するには、以下の手順を使用します。
この操作により、プロセスの進行中に環境でダウンタイムが発生します。
手順
オンプレミス型 3scale インスタンスをホストする OpenShift ノードにログインし、そのプロジェクトに切り替えます。
oc login -u <user> <url> oc project <3scale-project>
<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
注記各ステップのデプロイメント設定は同時にスケールダウンできます。たとえば、
apicast-wildcard-router
とzync
を一緒にスケールダウンできます。ただし、各ステップの Pod が終了するのを待ってから、次の Pod をスケールダウンすることをお勧めします。3scale インスタンスは、完全に再起動されるまで一切アクセスできなくなります。
-
3scale 2.6 より前のバージョンの場合は
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 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
-
<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
<password> と <host> を適宜置き換え、URL
mysql2://root:<password>@<host>/system
の base64 変換値を取得します。echo "mysql2://root:<password>@<host>/system" | base64
リモート MySQL データベースのデフォルトの 'user'@'%' を作成します。これには SELECT 権限しか付与する必要はありません。また、その base64 変換値を取得します。
echo "user" | base64 echo "<password>" | base64
- <password> を 'user'@'%' のパスワードに置き換えます。
バックアップを実行し、OpenShift シークレット
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
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
system-app
Pod が問題なく起動し、実行されるはずです。
-
- 確認後、上記の順序 で他の Pod をスケールアップして元の状態に戻します。
-
system-mysql
DeploymentConfig オブジェクトのバックアップを作成します。数日後、すべて正常に動作していることが確認できたら、削除してかまいません。system-mysql
DeploymentConfig を削除することで、この手順を今後再び実行する場合の混乱を防ぐことができます。