2017年1月17日火曜日

GCE でクロスリージョン+オートスケーリング 第一回

GCE でクロスリージョン+オートスケーリング 第一回

GCE ってすごいかも

Google Compute Engine(GCE) でグローバル IP アドレスを確保する際,大きな特徴としてリージョンを指定する・しないの選択が可能です("グローバル転送ルール" (後述) のときのみ)。リージョン指定しなくて良いってことは,例えばあるリージョンが戦争とかで壊滅状態になったときに何もしなくても同一 IP アドレスで別のリージョンで運用継続できるってこと?

だとすると,個人的にはこりゃすごいと関心してしまいます(違ってたらすみません,ご指摘ください)。オンプレだとマルチホーミングして AS 取得して BGP で... などとしていたことが,いとも簡単にコマンドやブラウザから椅子に座りながらチョイチョイで設定可能です。

ちょっと外れますが,おそらく AWS だとこのようなリージョンを超えた Elastic IP address の設定は出来ないと思われます。Multi AZ は可能ですが,disaster 対策や冗長化には Endpoints の CNAME で対処していると私は理解しています(間違ってたらごめんなさい, ご指摘いただけると助かります)。

また,この仕組みにより GCE では cross regional な負荷分散も可能にします。つまり異なるリージョンにある末端インスタンスノードにリクエストを分散できるようです。

これらについては,おそらく「今更」感バリバリと思いますが個人的には今更感動しています。そんなこんなで,仕事柄 AWS で Web システムを構築することが多い私が,そこでよくやる基本的なオートスケーリングなサーバ構成を GCE でも作ってみようか,しかもクロスリージョンで! という気になり,ちょっとやり方をメモしようとこれを書くことにしました(基本中の基本なことになっちゃいますが...)。

今回作るものの概要

こんな感じのものを作る

というわけで本当に基本的なものですが,今回は以下イメージのような基礎的な Web サーバのシステムを作ってみます。

よくある Web サーバシステムの図

よくある,DMZ に LB がいて,それが 2 本の足を持っていてその下の独立したプライベートネットワーク上に Web サーバが複数台いるというやつです。LB がその Web サーバ達にリクエストを振り分けるって感じです。

これを Google Compute Engine で表現してみます。末端ノードの Web サーバは,固定台数でなくオートスケーリングにします。GCE はインフラ的なネットワーク設計をある程度意識しなくて良いので下記のような感じです。

GCE ではこんな感じの図

必要な GCE 要素の概要

  • ネットワーク

    あまり意識せず 「default」のネットワークを使います。自動的に cross region なサブネットに切られているはずです。AWS とは根本的に考え方が違います。個人的には GCE の方が未来を感じます。

  • "負荷分散(Load Balancer)"

    GCE のロードバランサは AWS の ELB と違って,さぁロードバランサを作るぞ!って感じではなく,以下のような要素を組み立てていきます。

    • "グローバル転送ルール"

      待受の IP アドレスとポートを定義する(BIG-IP で言えば Virtual Server の部分か)。この IP アドレスは前述のリージョンを指定しないものを割り当てることができる。

    • "ターゲットプロキシ"

      その名の通りここは Reverse Proxy の役割だろう。どうもクライアントからの直接のリクエストは一旦ここで受け取ってるっぽい。SSL Termination もここでやる。その後リクエストを解釈して X-Forwarded-For 等の Proxy 用の HTTP ヘッダを追加している。

    • "URL マップ"

      URL により 振り先定義するところ(Apache とか NGINX とかで言えば、Location による振り分け)。

    • "バックエンドサービス"

      末端のインスタンスグループを取りまとめているところ。BIG-IP で言えば pool だろうか。ヘルスチェックや persistence はここでやってる。

  • "インスタンスグループ"

    インスタンスグループは,その名の通りインスタンスの集まりです。"自動スケーリング" を利用したい場合はここで定義できます。"インスタンスグループ" に含まれる各インスタンスの雛形は "インスタンステンプレート" で定義します。その中にインスタンスの "イメージ" も含まれ、これは以下の手順で作成することになります。

    1. "公開イメージ" から "ディスク" 作成
    2. 作成した "ディスク" をブートディスクとしてアタッチしてインスタンスを生成
    3. OS にログインしてお好きなようにカスタマイズ
    4. "ディスク" を消さないようにインスタンス削除
    5. 孤立したディスクから "イメージ" 作成

というわけで今回はここまでとします。次回は具体的に gcloud コマンドを使って実装していくことにします。

GCE でクロスリージョン+オートスケーリング 第一回

0 件のコメント:

コメントを投稿