読み取りプールを作成して管理する

このページでは、大規模な読み取りワークロードの読み取りプールを作成して管理する方法について説明します。

始める前に

  1. 読み取りプールには、プライマリ インスタンスのコピーが含まれています。まだ作成していない場合は、Cloud SQL Enterprise Plus エディションのプライマリ インスタンスを作成します。リードプールはパブリック IP 接続をサポートしていますが、このガイドでは、プライベート IP(PSA)接続を使用してプライマリ インスタンスを作成します。プライマリ インスタンスとレプリケーションの詳細については、Cloud SQL でのレプリケーションをご覧ください。
  2. プライマリ インスタンスの作成後、root ユーザーのパスワードを選択し、次のコマンドを実行してプライマリ インスタンスにパスワードを設定します。このパスワードは、後で読み取りプールに接続するときに使用できるように保存します。
  3.     gcloud --project=PROJECT \
        sql users set-password root --host=% \
        --instance=PRIMARY_INSTANCE_NAME --prompt-for-password
      

    次のように置き換えます。

    • PROJECT: プライマリ インスタンスと読み取りプールを配置するプロジェクトの名前。
    • PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。

読み取りプールを作成する

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances create コマンドを使用して、複数の読み取りプールノードを含む読み取りプールを作成します。

      gcloud beta sql instances create READ_POOL_NAME \
      --tier=TIER --edition=ENTERPRISE_PLUS \
      --instance-type=READ_POOL_INSTANCE --node-count=NODE_COUNT \
      --master-instance-name=PRIMARY_INSTANCE_NAME
    

次のように置き換えます。

  • READ_POOL_NAME: 読み取りプールに使用する名前。
  • TIER: 読み取りプール内の各読み取りプールノードに使用するマシンタイプ(db-perf-optimized-N-4 など)。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。
  • PRIMARY_INSTANCE_NAME: 読み取りプールに関連付けられているプライマリ インスタンスの名前(my-primary-instance など)。

REST v1

インスタンス リソースの insert メソッドを使用して、複数のリードプールノードを含むリードプールを作成します。databaseVersion プロパティはプライマリと同じにする必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: プライマリ インスタンスと読み取りプールを配置するプロジェクトの名前。
  • REGION: 読み取りプールのリージョン(us-east1 など)。リージョンはプライマリ インスタンスと同じにする必要があります。
  • TIER: 読み取りプールの各ノードに使用するマシンタイプ(db-perf-optimized-N-4 など)。
  • PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
  • READ_POOL_NAME: 読み取りプールに使用する名前(my-read-pool など)。
  • DATABASE_VERSION: 使用するデータベース バージョン。例: MYSQL_8_0_37
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。
  • FULL_NETWORK_NAME: 読み取りプールを配置するネットワークのフルパス(projects/vpc-host-project/global/networks/my-network-name など)。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT/instances

リクエストの本文(JSON):

{
  "name": "READ_POOL_NAME",
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT",
  "databaseVersion": "DATABASE_VERSION",
  "region": "REGION",
  "instanceType": "READ_POOL_INSTANCE",
  "nodeCount": NODE_COUNT,
  "settings": {
    "tier": "TIER",
    "edition": "ENTERPRISE_PLUS",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "FULL_NETWORK_NAME"
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

インスタンス リソースの insert メソッドを使用して、複数のリードプールノードを含むリードプールを作成します。databaseVersion プロパティはプライマリと同じにする必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: プライマリ インスタンスと読み取りプールを配置するプロジェクトの名前。
  • REGION: 読み取りプールのリージョン(us-east1 など)。リージョンはプライマリ インスタンスと同じにする必要があります。
  • TIER: 読み取りプールの各ノードに使用するマシンタイプ(db-perf-optimized-N-4 など)。
  • PRIMARY_INSTANCE_NAME: プライマリ インスタンスの名前。
  • READ_POOL_NAME: 読み取りプールに使用する名前(my-read-pool など)。
  • DATABASE_VERSION: 使用するデータベース バージョン。例: MYSQL_8_0_37
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。
  • FULL_NETWORK_NAME: 読み取りプールを配置するネットワークのフルパス(projects/vpc-host-project/global/networks/my-network-name など)。

HTTP メソッドと URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances

リクエストの本文(JSON):

{
  "name": "READ_POOL_NAME",
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT",
  "databaseVersion": "DATABASE_VERSION",
  "region": "REGION",
  "instanceType": "READ_POOL_INSTANCE",
  "nodeCount": NODE_COUNT,
  "settings": {
    "tier": "TIER",
    "edition": "ENTERPRISE_PLUS",
    "ipConfiguration": {
      "ipv4Enabled": false,
      "privateNetwork": "FULL_NETWORK_NAME"
    }
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

リードレプリカをリードプールに変換する

既存の Cloud SQL Enterprise Plus エディションのリードレプリカを読み取りプールに変換するには、プール内のノード数を指定します。この変換プロセスでは、レプリカ IP が読み取りプール IP(読み取りエンドポイント)になるため、既存のクライアントは再構成なしでプールに接続できます。

新しく作成されたリードプールノードは、元のリードレプリカと同じマシンタイプと構成になります。このマシンタイプまたは構成を変更するには、別のオペレーションが必要です。このオペレーションは、ゾーン リードレプリカでのみサポートされています。高可用性(HA)リードレプリカを読み取りプールに変換するには、まずゾーン リードレプリカに変換する必要があります。

詳細については、読み取りプール構成を編集するをご覧ください。

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances patch コマンドを使用して、リードプールで使用するリードレプリカを変換します。

      gcloud beta sql instances patch READ_REPLICA_NAME \
      --instance-type=READ_POOL_INSTANCE --node-count=NODE_COUNT
    

次のように置き換えます。

  • READ_REPLICA_NAME: 変換するリードレプリカの名前。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

REST v1

インスタンス リソースの patch メソッドを使用して、リードレプリカをリードプールに変換します。

リクエストのデータを使用する前に、次のように置き換えます。

  • READ_REPLICA_NAME: 変換するリードレプリカの名前(例: my-read-replica)。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_REPLICA_NAME

リクエストの本文(JSON):

{
  "instanceType": "READ_POOL_INSTANCE",
  "nodeCount": NODE_COUNT
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

インスタンス リソースの patch メソッドを使用して、リードレプリカをリードプールに変換します。

リクエストのデータを使用する前に、次のように置き換えます。

  • READ_REPLICA_NAME: 変換するリードレプリカの名前(例: my-read-replica)。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_REPLICA_NAME

リクエストの本文(JSON):

{
  "instanceType": "READ_POOL_INSTANCE",
  "nodeCount": NODE_COUNT
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

読み取りプールをリードレプリカに変換する

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances patch コマンドを使用して、リードプールで使用するリードレプリカを変換します。

      gcloud beta sql instances patch READ_POOL_NAME \
      --instance-type=READ_REPLICA_INSTANCE
    

次のように置き換えます。

  • READ_POOL_NAME: 変換する読み取りプールの名前。

REST v1

インスタンス リソースの patch メソッドを使用して、リードプールをリードレプリカに変換します。

リクエストのデータを使用する前に、次のように置き換えます。

  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "instanceType": "READ_REPLICA_INSTANCE"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

インスタンス リソースの patch メソッドを使用して、リードプールをリードレプリカに変換します。

リクエストのデータを使用する前に、次のように置き換えます。

  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "instanceType": "READ_REPLICA_INSTANCE"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

読み取りプールの情報を表示する

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances describe コマンドを使用して、リードプールの説明を取得します。

      gcloud beta sql instances describe READ_POOL_NAME
    

次のように置き換えます。

  • READ_POOL_NAME: 説明を取得する読み取りプールの名前。

IP アドレスとノード情報を含むレスポンスの例は次のようになります。

      ...
      connectionName: my-project:us-central1:read-pool
      ipAddresses:
      - ipAddress: 10.3.0.108
        type: PRIVATE
      nodeCount: 2
      nodes:
      - dnsName: c5bdacb09ffc.j10o8yqc7pve.us-central1.sql.goog.
        gceZone: us-central1-f
        ipAddresses:
        - ipAddress: 10.3.0.112
          type: PRIVATE
        name: read-pool-node-01
        state: RUNNABLE
      - dnsName: 8f77c454d6b2.j10o8yqc7pve.us-central1.sql.goog.
        gceZone: us-central1-c
        ipAddresses:
        - ipAddress: 10.3.0.113
          type: PRIVATE
        name: read-pool-node-02
        state: RUNNABLE
    

REST v1

get メソッドを使用して、読み取りプールの詳細を表示します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

get メソッドを使用して、読み取りプールの詳細を表示します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  [...],
  "connectionName": "my-project:us-central1:read-pool",
  "ipAddresses": [
    {
      "type": "PRIVATE",
      "ipAddress": "10.3.0.108"
    }
  ],
  "nodeCount": 2,
  "nodes": [
    {
      "ipAddresses": [
        {
          "type": "PRIVATE",
          "ipAddress": "10.3.0.112"
        }
      ],                                                                                                                 
      "name": "read-pool-node-01",
      "gceZone": "us-central1-f",
      "dnsName": "c5bdacb09ffc.j10o8yqc7pve.us-central1.sql.goog.",
      "state": "RUNNABLE"
    },
    {
      "ipAddresses": [
        {
          "type": "PRIVATE",
          "ipAddress": "10.3.0.113"
        }
      ],
      "name": "read-pool-node-02",
      "gceZone": "us-central1-c",
      "dnsName": "8f77c454d6b2.j10o8yqc7pve.us-central1.sql.goog.",
      "state": "RUNNABLE"
    }
  ]
}

読み取りプール ノードを追加または削除する

次の手順では、読み取りプール内の読み取りプール ノードの数を変更して、読み取りプールをスケールインまたはスケールアウトします。操作にはいくつかの制限があります。詳細については、読み取りプールの制限事項をご覧ください。

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances patch コマンドを使用して、リードプールをスケーリングします。

      gcloud beta sql instances patch READ_POOL_NAME \
      --node-count=NODE_COUNT
    

次のように置き換えます。

  • READ_POOL_NAME: 読み取りプールの名前。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

REST v1

patch メソッドを使用して、読み取りプール内の読み取りプール ノードの数を変更することで、読み取りプールをスケールインまたはスケールアウトします。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "nodeCount": NODE_COUNT
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

patch メソッドを使用して、読み取りプール内の読み取りプール ノードの数を変更することで、読み取りプールをスケールインまたはスケールアウトします。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • NODE_COUNT: 読み取りプールに必要な読み取りプールノードの数。120 の任意の数値を指定します。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "nodeCount": NODE_COUNT
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

読み取りプール構成を編集する

リードプールの構成を編集する手順は次のとおりです。詳細については、インスタンスの設定についてインスタンスを編集するをご覧ください。

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud beta sql instances patch コマンドを使用して、マシンタイプを変更するなど、読み取りプールを垂直方向にスケーリングします。

      gcloud beta sql instances patch READ_POOL_NAME \
      --tier=TIER
    

次のように置き換えます。

  • READ_POOL_NAME: 読み取りプールの名前。
  • TIER: 読み取りプールの各ノードに適用するマシンタイプ(db-perf-optimized-N-8 など)。

REST v1

読み取りプール ノードの構成を変更するには、 patch メソッドを使用します。設定は、読み取りプール内のすべての読み取りプール ノードに一律に適用されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • TIER: 読み取りプールの各ノードに使用するマシンタイプ(db-perf-optimized-N-4 など)。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "settings": {
    "tier": "TIER"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

読み取りプール ノードの構成を変更するには、 patch メソッドを使用します。設定は、読み取りプール内のすべての読み取りプール ノードに一律に適用されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • TIER: 読み取りプールの各ノードに使用するマシンタイプ(db-perf-optimized-N-4 など)。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME

リクエストの本文(JSON):

{
  "settings": {
    "tier": "TIER"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

読み取りプールに接続する

読み取りプールに接続する方法は多数あります。次の手順では、同じ VPC ネットワークに VM を作成して接続元として使用し、プライベート IP アドレスを使用して読み取りプールに接続する方法を示します。

Cloud SQL インスタンスへの接続を構成するその他の方法については、Cloud SQL 接続についてをご覧ください。通常、接続方法では、まずインスタンスの IP アドレスまたは接続名を取得する必要があります。これについては、読み取りプール情報を確認するで説明しています。読み取りプールは、他の Cloud SQL インスタンスで使用可能な接続方法のほとんどをサポートしていますが、制限事項がいくつかあります。

Cloud SQL Auth Proxy または Cloud SQL コネクタを使用して接続する場合は、最新バージョンに更新してください。読み取りプールをサポートするために必要な最小バージョンは次のとおりです。

  • Cloud SQL Auth Proxy: v2.15.2
  • Cloud SQL Python コネクタ: v1.18.0
  • Cloud SQL Go コネクタ: v1.16.0
  • Cloud SQL Node コネクタ: v1.7.0
  • Cloud SQL Java コネクタ: v1.24.0

コンソール

読み取りプールに接続する手順は次のとおりです。

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

    インスタンスの [概要] ページが表示されます。新しい読み取りプールをクリックして、プライベート IP アドレスなどの詳細を表示します。[このインスタンスに接続] セクションで、インスタンスの接続名をコピーして保存します。connection name の形式は projectID:region:instanceID です。後で Cloud SQL Auth Proxy を起動する際に、この connection name を使用します。
  2. Compute Engine VM を作成します
  3. Compute Engine VM に対して 2 つの SSH 接続を開きます。これらは、Cloud SQL Auth Proxy の実行とデータベース クライアントの実行を行う後続の手順で使用されます。
  4. クライアントをインストールします
  5. Cloud SQL Auth Proxy をインストールします
  6. Cloud SQL Auth Proxy を起動します
  7. Cloud SQL インスタンスに接続します

詳細については、プライベート IP を使用して Cloud SQL インスタンスに接続するをご覧ください。

読み取りプールを削除する

gcloud

gcloud CLI のインストールと使用開始については、gcloud CLI をインストールするをご覧ください。Cloud Shell の起動については、Cloud Shell を使用するをご覧ください。

次の gcloud sql instances delete コマンドを使用して、リードプールを削除します。

      gcloud sql instances delete READ_POOL_NAME
    

次のように置き換えます。

  • READ_POOL_NAME: 削除する読み取りプールの名前。

REST v1

読み取りプールを削除するには、 delete メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/v1/projects/PROJECT/instances/READ_POOL_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

REST v1beta4

読み取りプールを削除するには、 delete メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT: 読み取りプールが存在するプロジェクトの名前。
  • READ_POOL_NAME: 読み取りプールの名前(my-read-pool など)。

HTTP メソッドと URL:

DELETE https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT/instances/READ_POOL_NAME

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

次のステップ