テックまとめ

Cloud SQL

  1. コンセプト
  2. インスタンスの作成
  3. レプリケーション
  4. ユースケース

1. コンセプト

Cloud SQL はクラウド上の MySQL 、 PostgreSQL 、 SQL Server のリレーショナル データベースを簡単に設定、維持、運用、管理できるようにするフルマネージド データベース サービス。
GCP 外からもアクセス可能 なのが売りの 1 つらしい。
Cloud SQL が対応しているデータ形式には、ダンプファイル(.sql)と CSV ファイル(.csv)。

  • 特徴
    • Cloud SQL の構築は ゾーン を指定するものの、VPC やサブネットは指定できない -> ゾーンリソース -> ゾーン障害に対応できない
      • 同一リージョン・別ゾーンに対して フェールオーバーレプリカ を作成できる(別リージョンは無理)
    • Cloud SQL を構築した後、 AUTHORIZATION の項目で、アクセスする VM インスタンスの グローバル IP を許可するリストに加える
    • VM インスタンスから Cloud SQL にアクセスするには Cloud SQL の IP アドレス、ユーザ、パスワードを指定する
    • グローバル IP だけでなく、 プライベート IP もサポートされている

2. インスタンスの作成

$ gcloud sql instances create INSTANCE_NAME --cpu=NUMBER_CPUS --memory=MEMORY_SIZE --region=REGION
  • 高可用性 インスタンスを作成する場合は、--zone--secondary-zone オプションを使用して、プライマリゾーンとセカンダリゾーンの両方を指定できる
  • パブリックアクセスする場合は --authorized-networks=192.168.100.0/24 のように許可する IP アドレスを指定する必要がある
  • プライベートアクセスする場合は --network=projects/testproject/global/networks/testsharednetwork のように VPC を指定する必要がある
    • ただし、ベータ版コマンド( gcloud beta sql instances create)でのみ有効

2.1. Cloud Shell から gcloud でインスタンスに接続

$ gcloud sql connect qwiklabs-demo --user=root

2.2. Cloud SQL Auth Proxy

3. レプリケーション

  • 高可用性構成
    • HA を構成し、可用性を高める
    • リードレプリカじゃない( HA なので)
    • 同一リージョン・複数ゾーンで構成され、 フェールオーバーに対応 する
  • リードレプリカ
    • プライマリインスタンスの正確なコピーを作成し、読み取り専用のセカンダリインスタンスとして構成する(リードレプリカ)
    • プライマリインスタンス、スタンバイインスタンス、リードレプリカの 3 種類で構成される
      • スタンバイインスタンスは文字通り、プライマリインスタンスのフェールオーバー用で通常は機能していない
    • プライマリインスタンスごとに最大 10 個のリードレプリカを作成できる
    • リードレプリカは フェールオーバーできない
  • クロスリージョン リードレプリカ
    • リードレプリカはクロスリージョンにも対応する
  • 外部リードレプリカ
    • Cloud SQL プライマリ インスタンスを複製する外部インスタンス
  • 外部サーバーからのレプリケーション
    • 外部インスタンスがプライマリで、 Cloud SQL がレプリカの構成

4. ユースケース

4.1. VM インスタンスから Cloud SQL に接続する

  • default ネットワークの us-central1-a ゾーンに blog VM インスタンスがある
    • 内部 IP 10.128.0.3 、 外部 IP 35.194.61.180
  • blog VM インスタンスは 1 台で LAMP 構成になっている
  • MySQL を blog-db という名前の Cloud SQL に移行して接続する
    • blog/var/www/html/wordpress/wp-config.php を書き換えて DB の接続先を変更する
# Cloud Shell :リージョン・ゾーンの設定
$ gcloud config set compute/region us-central1
$ gcloud config set compute/zone us-central1-a

# Cloud Shell : Cloud SQL の作成
$ gcloud sql instances create blog-db --region=us-central1 --authorized-networks=35.194.61.180/32


# blod VM インスタンス: blod VM インスタンスへ SSH して mysql ダンプを取得
$ mysqldump --databases wordpress -h localhost -u blogadmin -pPassword1* \
    --hex-blob --single-transaction \
    --default-character-set=utf8mb4 > dump.sql

# blod VM インスタンス: Cloud Storage バケット作成
$ gsutil mb gs://qwiklabs-gcp-01-9aec32589768

# blod VM インスタンス: ダンプをアップロード
$ gsutil cp dump.sql gs://qwiklabs-gcp-01-9aec32589768/

# blod VM インスタンス: アップロードを確認
$ gsutil ls gs://qwiklabs-gcp-01-9aec32589768/
gs://qwiklabs-gcp-01-9aec32589768/dump.sql

# Cloud Console にて blog-db から gs://qwiklabs-gcp-01-9aec32589768/dump.sql をインポート

# blod VM インスタンス: 試しに VM インスタンスから接続
$ mysql -h 35.239.119.80 -u root

# blod VM インスタンス: 設定ファイルを編集した後、 Apache リスタート
$ sudo service apache2 restart

# Cloud Shell :接続テスト
$ curl http://35.194.61.180