GCPの負荷分散を使ってWebアプリの冗長構成を作ってみた

タイトル通り。
この記事で作成する環境の全体図は以下の通り。

GCE (Google Compute Engine)を2つ立てる

VMを作成する。設定は以下の図の通り。

このVMをもう一つ立てる。「VMインスタンス」ページで確認するとこんな感じ。

簡単なWebアプリケーションをデプロイ

以前作ったシンプルなWebアプリケーションを使う。
GitHubにソースコード載せてる。

参考程度に必要なコマンドを載せとく。

# yum -y install docker git
# systemctl start docker
# systemctl enable docker
# curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose
# git clone https://github.com/tetsis/nginx-gunicorn-django-postgres.git
# cd nginx-gunicorn-django-postgres/
# sed -i -e "s/443:443/80:80/" docker-compose.yml (外部公開するポートをHTTPの80に変更する)
# docker-compose build
# docker-compose up -d
# docker-compose ps

インスタンスグループを作る

インスタンスグループを作成する。

  • ロケーション:「シングルゾーン」
  • グループタイプ:「非マネージドインスタンスグループ」
  • VMインスタンス:さっき作った2つのVMを追加する

(本当は障害耐性を上げるためマルチゾーンでやりたかったけど、マルチゾーンかつ非マネージドでやる方法が見つからなかった)

作成後の「インスタンスグループ」ページ。

HTTP(S)負荷分散(ロードバランサ)を作る

「負荷分散」からロードバランサを作成する。
HTTP(S)負荷分散の「設定を開始」をクリック。

バックエンドの設定

「バックエンドの設定」->「バックエンドサービスとバックエンドバケットの作成または選択」->「バックエンドサービス」->「バックエンドサービスを作成」
バックエンドサービスの設定項目はこんな感じ。

途中ヘルスチェックを作成する。

作成完了するとこんな感じ。

ホストとパスのルール

ここは特に設定しなくてOK。URLパスに応じてバックエンドを変えたい場合に設定するんだろう。

フロントエンドの設定

「フロントエンドの設定」はこんな感じ。

途中、証明書を設定する。
「証明書を選択してください」->「新しい証明書の作成」で公開鍵証明書、証明書チェーン(あれば)、秘密鍵を入力する。

作成完了

詳細ページ。

ロードバランサ経由でWebアプリケーションにアクセスする

ロードバランサのフロントエンドにつけられたグローバルIPアドレスにブラウザでアクセスする。

いい感じ。