【GCP】 Cloud Load Balancing + Compute Engine で冗長構成の Web サーバーを構築

はじめに

こんな感じで、GCP 上でミニマムな冗長構成の LAMP サーバーを構築してみた話。
構成要素は下記の通り。

  • Google Compute Engine (以下 GCE)
  • Google Cloud Load Balancing (以下 LB)
  • Google Cloud SQL for MySQL

なお、本記事はインフラレイヤーの構築のみを対象とする。

前提

  • LAMP
  • WordPress
  • 管理画面の URL パス (例: /wp-admin など) へのリクエストを片寄せする (バランシングしない) ように設定
  • LB のフロントエンド側接続: HTTP, HTTPS
  • LB のバックエンド側接続: HTTP

手順

GCE インスタンス作成

インスタンスを作成 を押下。

スペックをお好みで指定。

Google なので Debian 推しらしいが、CentOS も選択可。
Web 周りのファイアウォール開放もここで設定できる。

隠されている詳細設定のセキュリティタブにて、追加する Linux ユーザー名とその SSH 接続用公開鍵を登録できる、気が利く。

デフォルトだと外部 IP が動的 (エフェメラル) の設定なので、ネットワーキングタブにて、静的 IP 割当に変更。
ちなみに、内部 IP も同様に静的化できる。

GCE インスタンスの複製

2 台目サーバーを 1 台目からコピーする場合、ディスクのスナップショットを使用すれば可能。

作成したスナップショットの詳細画面にて、インスタンスを作成を押下。

前述したインスタンス作成時の画面が表示されるので、適当にインスタンス情報を指定して複製。

インスタンスグループの作成

LB のバックエンドとして指定するためのグループを、下記の通り作成。

  • シングルゾーン
  • 非マネージドインスタンスグループ
    • 真面目にオートスケーリング構成にするならば、マネージドとして設定すべき

アプリケーション管理画面の URL パスを片寄せする用のグループも同様に作成。

ヘルスチェックの作成

LB 作成時に指定するので、予め作成しておくと良い。

特に凝った設定はないので適宜。

LB の作成

L7 の LB として作成。

まず、バックエンドの設定

管理画面以外の表側サイトへのリクエストはバランシングするので、先に作った 2 つのインスタンスグループを登録。

先に作ったヘルスチェック設定を指定。
また、必要に応じてセッションアフィニティ (スティッキーセッション) を設定。

同様に、管理画面 URL リクエスト時のバックエンドを片寄せするように設定。

次に、ホストとパスのルール設定。
管理画面の URL パスへのアクセスを片寄せするように設定。

最後に、フロントエンドの設定
HTTP と HTTPS の 2 つの設定を追加する。

まず、HTTP。

次に HTTPS。
SSL 証明書をアップロードして指定。

Cloud SQL for MySQL インスタンスの作成

こちら。

終わりに

  • 実運用の際は、サーバー冗長化に伴うミドルウェアやアプリケーション設定調整の考慮も必要
    • X-Forwarded-ProtoX-Forwarded-For など
    • ファイル同期
    • セッションストア
  • GCP はコンソールの UI がとてもよくできていて快適に作業できるので良い