8月下旬、 Google Cloud SQL 2nd Generation がGAとなりました。すでに検証はしていますが、今回は Cloud SQL Proxy
を中心に書きます。
iga-ninja.hatenablog.com
Cloud SQL Proxy とは?
前回の記事でも記載しましたが、Cloud SQL への接続は全てグローバルIPアドレス
となります。これに嫌悪するひとは多いと思いますが、この点はどうすることも出来ません。で、GCEのVMからアクセスする場合、は2つの方法どちらかをとることになります。
- 特定IPアドレスからのみアクセスを受け付ける(グローバルIPのみローカルIPは意味ない)
- Cloud SQL Proxy を使う
1を採用したでも、GCEの特定VMからのみだときまっていたり、スケールアウトは考える必要がなく、固定台数でのみサービスする場合は、あまり問題はありませんが、スケールアウトするならば新規VM追加の度にIPアドレスを追加していく必要があります。他の方法としては、NATやHAProxy, MaxScale などで、どこかのIPアドレスに束ねてしまう方法ですが、新たなspofを産んでしまうので、あまりよい手とは言えません。
そこで、2の Cloud SQL Proxyです ちなみに、 MySQL Proxy とは全く関係ありません
動作について
Cloud SQL Proxy のやることは、Cloud SQLへの接続(or 認証だけ?)を、一般的な IPアドレス(TCP)経由ではなく、Cloud SQL APIベースで行うものだと推測しています。
だから、IPアドレスにより許可は要らない。
では、プログラム側からどのように参照するかですが、これは UNIX Socket
となります。後で手順を書きますが、Proxy の役目は Cloud SQL への接続を API ベースから UNIX Socket に変換する
と言って良いはずです。
構成
上記 Cloud SQL Proxy の役割を理解すると、自ずと構成は Cloud SQL へアクセスする全VMインスタンスで Cloud SQL Proxyを動かす
となります。どのみち UNIX Socket なんで、必然的にこうなりますよね。また Docker用の Cloud SQL Proxy もあるようです。これはDockerイメージかな?多分他のコンテナは、 Proxy コンテナへリンクをはって、Proxyコンテナ経由で接続するではなかろうかと
また、各VMインスタンスには、Cloud SQL のスコープ(AWSでいうEC2ロール)を付けておくことを激しく推奨します。スコープ無しでも出来ると思いますが、面倒だと思います。
手順
簡単です。GCSからダウンロードして実行するだけです。多分 Go製かな?
https://cloud.google.com/sql/docs/compute-engine-access
wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 mv cloud_sql_proxy.linux.amd64 cloud_sql_proxy chmod +x cloud_sql_proxy sudo mkdir /cloudsql; sudo chmod 777 /cloudsql sudo ./cloud_sql_proxy -dir=/cloudsql &
この実行により、 /cloudsql/ ディレクトリの下に、各Cloud SQL への接続用 Unix Socketができ、 mysqlでアクセスするなら
mysql -uroot -p -S /cloudsql/[INSTANCE_CONNECTION_NAME]
で接続できます。 [INSTANCE_CONNECTION_NAME]
ってなんじゃい?知いますが、大して難しい話ではなくて、-S で指しているのは UNIX Socket の場所です。 Cloud SQL Proxyが INSTAANCE_CONNECTION_NAME(Cloud SQLのね!) で UNIX Socketを作るってだけの話です。
自動起動
ただのアプリーケションなので、自動起動設定が必要です。勝手にデーモン化はするみたいですが。systemd
が使えるなら systemdで
ないなら upstart
で設定すればよろし。
HAProxyで RR負荷分散
backend の指定は UNIX Socket でも出来るらしいです。(> 1.5)
動くことは確認出来ました。レプリラグがひどいものを排除する場合は、xinetd などで httpから確認になると思います。
inokara.hateblo.jp
まとめ
Cloud SQL 2nd gen 使うなら Cloud SQL Proxy 一択
メリットが圧倒的に多いので、上記のみとなります。