外部レプリカを構成する

ここでは、Cloud SQL 外部の 1 つ以上のレプリカに複製される Cloud SQL インスタンスを構成する方法を説明します。また、外部レプリカ構成に含まれるマスター インスタンスを降格して構成を元に戻す方法も説明します。

外部レプリカの構成の詳細については、レプリケーションを構成するための要件とヒントをご覧ください。

外部レプリカ構成を設定する

始める前に

この作業を開始する前に、外部レプリカの要件を満たす Cloud SQL インスタンスと外部 MySQL インスタンスを用意しておく必要があります。

マスター インスタンスを構成する

  1. Google Cloud Platform Console で [Cloud SQL インスタンス] ページに移動します。

    [Cloud SQL インスタンス] ページに移動

  2. マスター インスタンスでの外部レプリカの IP アドレスへのアクセスを有効にします。

    IP アクセスを有効にする方法について詳しくは、IP 接続のためのアクセスを構成するをご覧ください。

  3. 後で使用するために、マスター インスタンスの IP アドレスを記録します。

    IP アドレスは、インスタンスの [概要] ページに表示されます。

  4. 右上隅の Cloud Shell アイコン(Cloud Shell アイコン)をクリックします。

  5. Cloud Shell プロンプトで、組み込み mysql クライアントを使用してマスター インスタンスに接続します。

    gcloud sql connect [MASTER_INSTANCE_NAME] --user=root
    
  6. root パスワードを入力します。

    mysql プロンプトが表示されます。

  7. レプリケーション用の特別なユーザーを作成します。

    CREATE USER '[REPLICATION_USER]'@'%' IDENTIFIED BY '[REPLICATION_PASSWORD]';
    
  8. レプリケーション用ユーザーにレプリケーション権限を付与します。

    GRANT REPLICATION SLAVE ON *.* TO '[REPLICATION_USER]'@'%';
    
  9. マスター インスタンスから Cloud Storage バケットにデータベースをエクスポートします。

    SQL ダンプファイルを作成するで説明している外部レプリケーションの手順に従います。

  10. レプリカをホストしているマシンから、Cloud Storage コンソール内のファイルをクリックして、バケットからレプリカへファイルをダウンロードします。

外部レプリカの構成

第 2 世代

  1. レプリカをホストしているマシン上で、マスター インスタンスから作成したエクスポート ファイルとともに新しい外部 MySQL インスタンスをシードします。

    たとえば、次のコマンドでは mysqldump.sql という名前のエクスポート ファイルが読み込まれます。

    mysql --user=root --password <  mysqldump.sql
    
  2. このレプリカとマスターのペアのサーバー ID を特定します。

    サーバー ID は数値(たとえば「3」)です。これは、外部レプリカの構成全体で一意でなければなりません(各レプリカは一意のサーバー ID を持つ必要があります)。

  3. レプリカの my.cnf オプション ファイルに以下のオプションを追加します。
    [mysqld]
    server-id=[SERVER_ID]
    gtid_mode=ON
    enforce_gtid_consistency=ON
    log_slave_updates=ON
    replicate-ignore-db=mysql
    binlog-format=ROW
    log_bin=mysql-bin
    expire_logs_days=1
    read_only=ON
    

    MySQL のレプリケーション オプションの詳細については、レプリケーションとバイナリログのオプションをご覧ください。

  4. mysqld プロセスを再起動して構成ファイルが読み取られるようにします。
  5. レプリカの mysql クライアントで、次のコマンドを入力します。
    CHANGE MASTER TO MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]',
    MASTER_PASSWORD='[REPLICATION_PASSWORD]', MASTER_AUTO_POSITION=1;
    
  6. レプリカのレプリケーションを開始します。
    START SLAVE;
    
  7. レプリケーションのステータスを確認します。

    SHOW SLAVE STATUS\G;
    

    「マスターからのイベントの送信を待機しています」と表示された場合、レプリケーションは作動しています。

第 1 世代

  1. レプリカをホストしているマシン上で、マスター インスタンスから作成したエクスポート ファイルとともに新しい外部 MySQL インスタンスをシードします。

    たとえば、次のコマンドでは mysqldump.sql という名前のエクスポート ファイルが読み込まれます。

    mysql --user=root --password <  mysqldump.sql
    
  2. このレプリカとマスターのペアのサーバー ID を特定します。

    サーバー ID は数値(たとえば「3」)です。これは、外部レプリカの構成全体で一意でなければなりません(各レプリカは一意のサーバー ID を持つ必要があります)。

  3. 以下の例のような行を my.cnf オプション ファイルに追加して、リードレプリカにサーバー ID を設定します。

    [mysqld]
    server-id=[SERVER_ID]
    

    MySQL のレプリケーション オプションの詳細については、レプリケーションとバイナリログのオプションをご覧ください。

  4. mysqld プロセスを再起動して構成ファイルが読み取られるようにします。
  5. エクスポート ファイルを開き、CHANGE MASTER TO MASTER_LOG_FILE コマンドを見つけます。
  6. そのコマンドの行をコピーし、行頭のダッシュ("--")を削除してから mysql クライアントに貼り付けます。

    まだ Enter キーは押さないでください。

  7. 最後のセミコロンの前に、MASTER_HOSTMASTER_USERMASTER_PASSWORD の値を挿入します。

    ステートメントは以下の例のようになるはずです。

    CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107,
    MASTER_HOST='[MASTER_IP_ADDRESS]', MASTER_USER='[REPLICATION_USER]', MASTER_PASSWORD='[REPLICATION_PASSWORD]';
    
  8. Enter キーを押してステートメントを実行します。
  9. レプリカのレプリケーションを開始します。

    START SLAVE;
    
  10. レプリケーションのステータスを確認します。

    SHOW SLAVE STATUS\G;
    

    「マスターからのイベントの送信を待機しています」と表示された場合、レプリケーションは作動しています。

外部レプリカのマスターを降格する

外部レプリカを使用する Cloud SQL インスタンスがある場合、外部レプリカの構成を元に戻すことができます。構成を元に戻すと、次のように変更されます。

  • 外部レプリカが新しいマスター インスタンスになります。
  • Cloud SQL インスタンスがリードレプリカになり、前は外部レプリカだったサーバー(現在のソース データベース サーバー)からのレプリケーションを行います。

外部レプリカの構成を元に戻すには、次の手順に従います。

  1. ソース表現インスタンスを作成します。

    降格オペレーションが完了した後は、このインスタンスが Cloud SQL レプリカのソース データベース サーバーを表します。

    ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data '{
             "name": "[SOURCE_REPRESENTATION_NAME]",
             "region": "[REGION]",
             "databaseVersion": "[EXTERNAL_SERVER_MYSQL_VERSION]",
             "onPremisesConfiguration": {
             "hostPort": "[EXTERNAL_SERVER_IP]:[EXTERNAL_SERVER_PORT]"
         }' \
         -X POST \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances
    

    Cloud SQL レプリカを配置するリージョンを使用します。

  2. 降格プロセスを開始します。

    この API 呼び出しでは機密情報を使用する必要があるため、データをコマンドラインに入力するのではなく、JSON ファイルを使用してデータを cURL に渡します。

    次のデータファイルを作成します。

    {
        "demoteMasterContext": {
             "replicaConfiguration": {
                 "mysqlReplicaConfiguration" {
                 "username": "[MYSQL_REPLICATION_USERNAME]",
                 "password": "[PASSWORD]",
                 "caCertificate": "[EXTERNAL_SERVER_CA]",
                 "clientCertificate": "[CLIENT_CERT]",
                 "clientKey": "[PRIVATE_KEY]"
            }
        },
        "masterInstanceName": [SOURCE_REPRESENTATION_NAME]
    }
    

    次に、API を呼び出します。

    curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
         --header 'Content-Type: application/json' \
         --data @[PATH_TO_DATA_FILE] \
         https://www.googleapis.com/sql/v1beta4/projects/[PROJECT-ID]/instances/[INSTANCE_NAME]/demoteMaster
    

    SSL/TLS のオプションについて詳しくは、SSL/TLS オプションをご覧ください。replicaConfiguration オブジェクトで使用するプロパティの詳細については、外部サーバーからのレプリケーションをご覧ください。

  3. 外部レプリカがマスター インスタンスからの保留中トランザクションをすべて完了するまで待ちます。

    レプリカがマスター インスタンスと同じ状態になると、SHOW SLAVE STATUS コマンドは Seconds Behind Master の値として 0 を表示し、Executed_Gtid_Set の値が外部レプリカと Cloud SQL マスターの間で同じになります。

  4. mysql クライアントを使用して、外部レプリカに対するレプリケーションを停止します。

    STOP SLAVE
    RESET SLAVE ALL
    
  5. Cloud SQL インスタンスが新しくソース データベース サーバーとなった外部サーバーからのレプリケーションを開始するまで待ちます。

    Cloud SQL インスタンスに対して SHOW SLAVE STATUS コマンドを実行すると、レプリケーション ステータスが返されます。

  6. Cloud SQL インスタンスがソース データベース サーバーからのレプリケーションを正常に完了したら、ソース データベース サーバー上の read_only フラグを off に設定し、ソース データベース サーバーを指すようにアプリケーションを更新します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...