FUJITSU Cloud Service K5
IaaS 設計・構築ガイド(デザインパターン・実装サンプル集)

内部負荷分散構成 [西日本第3 /東日本第3 リージョン向け]


要求事項

サービスの可用性や性能を考慮した構成をFUJITSU Cloud Service for OSS(以下FJCS for OSS)上で実現したいといった要求事項に対応するパターンです。

一般に、サーバは突如停止する可能性が ゼロ ではありません。 クラウドでも、設備等の物理的なトラブルや、
トラフィック増による性能劣化など、 何らかの理由でサービス継続ができない場合があります。

FJCS for OSSでは、このようなサービス提供の機会損失を防ぎ、可用性や性能を向上させる負荷分散機能として、
ロードバランサーサービスを提供しています。

なお、本章で説明するロードバランサーは、西日本第3 /東日本第3 リージョン向けの提供機能 および操作画面になっています。
東日本/西日本第1,2リージョンの場合は、内部負荷分散構成パターンを参照して下さい。

対応するデザインパターン概要

FJCS for OSSでは、可用性向上と性能向上のための負荷分散機能として、ロードバランサーサービスを提供しています。
ロードバランサーサービスによる負荷分散の構成としては、以下の2構成が利用可能です。

外部負荷分散構成負荷分散を外部ネットワークに配置し、インターネットからのアクセスを、
外部ネットワークに接続された内部ネットワークの仮想サーバへの通信を負荷分散します
内部負荷分散構成負荷分散を内部ネットワークに配置し、内部ネットワークの仮想サーバから、
内部ネットワークの仮想サーバへ通信を負荷分散します
この構成では、IPSecVPNや構内接続等のセキュアな接続を併用すると、
社内イントラネット環境から負荷分散構成を利用したシステムが利用可能です

以下では、内部負荷分散構成について記載します。



構造 (イメージ図)

■同一サブネット
  • ロードバランサーのアクセス元と同一のサブネットにロードバランサーを配置する構成例です。

■異なるサブネット
  • 東日本/西日本第1,2リージョンと同等構成が組めません。
    1つのネットワークに仮想ルータを2つ接続することができません。
    この構成は内部ネットワークに仮想ルータが2つ接続されているため、同等構成を組むことができません。



実装サンプル

内部負荷分散に対応した構成を配備する手順を示します。

 (1) セキュリティグループ

  • ロードバランサー用のセキュリティグループ "SG_LB" と、
    仮想サーバ用のセキュリティグループ "SG_Web" をそれぞれ設定します。
  • セキュリティグループの設定内容については、
    セキュリティグループ/ファイアーウォール併用パターン に記載の内容を参照してください。
  • 内部負荷分散構成用に変更にする場合は、"SG_LB" の受信のルールに、
    ロードバランサーで受け付ける IPアドレス (CIDR形式) またはセキュリティグループを設定してください。



 (2) 負荷分散対象の仮想サーバ配備



 (3) ロードバランサー の配備

  • 以下の「1.ロードバランサー利用の流れ」を参照してください。



1.ロードバランサー利用の流れ

  ロードバランサーサービスを利用するために必要な手順について説明します。

項目
内容
1.ロードバランサー作成負荷分散対象の仮想サーバが接続されているサブネットに、ロードバランサーを作成
配備先となるサブネットIDを指定
2.負荷分散条件(リスナー)を作成負荷分散の対象となるトラフィックの条件を定義
設定先となるロードバランサーのIDを指定
3.負荷分散条件(プール)を指定負荷分散の対象となったトラフィックを、どのような条件に基づいて負荷分散対象の仮想サーバへ振り分けるかを定義
設定先となるリスナーのIDを指定
4.負荷分散対象(メンバー)を登録負荷分散対象となる仮想サーバをプールに登録
登録先となるプールのIDを指定
5.異常監視(ヘルスモニター)を設定負荷分散対象の仮想サーバに対する、ヘルスチェック条件をプールに登録
監視対象となるプールのIDを指定



2.APIでの操作

  

2-1. ロードバランサー作成

 (1) ロードバランサー作成
  以下のAPIに、設定項目(json)を設定し、実行してください。

  • 設定項目(json)
項目
設定値
内容
$LOADBALANCER"loadbarancer1"ロードバランサー名(プロジェクト内で一意となっている必要があります。)
$TENANT_ID(プロジェクトID)プロジェクトID
$VIP_SUBNET_ID(サブネットID)サブネットID
$VIP_ADDRESS(仮想IPアドレス)ロードバランサーに割り当てる仮想IPアドレス(プライベートIP)
  • 実行API

curl -s $NETWORK/v2.0/lbaas/loadbalancers -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"loadbalancer":{"name":"'$LOADBALANCER'","tenant_id":"'$TENANT_ID'","vip_subnet_id":"'$VIP_SUBNET_ID'","vip_address":"'$VIP_ADDRESS'"}}' | jq .



 (2) ロードバランサー確認
  (1) ロードバランサー作成APIの実行結果を参照し"provisioning_status": "ACTIVE"になっていることを確認してください。

  • 設定項目(json)
項目
内容
$LOADBALANCER_IDロードバランサー作成APIの実行結果を参照しロードバランサーIDを指定する。
  • 実行API

curl -s $NETWORK/v2.0/lbaas/loadbalancers/$LOADBALANCER_ID -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .



2-2.リスナー作成

  • 設定項目(json)
項目
設定値
内容
$TENANT_ID(プロジェクトID)プロジェクトID
$LOADBALANCER_ID(ロードバランサーID)ロードバランサーID
$PROTOCOL"HTTP"フロントエンド側とバックエンド側の通信プロトコル(HTTP/TERMINATED_HTTPS/HTTPS/TCP)を指定します。
$PROTOCOL_PORT"80"ロードバランサーがリクエストを待ち受けるポート番号
$LISTENER"listener1"リスナー名(ロードバランサー内で一意)
  • 通信プロトコルの組合せ
設定値
フロントエンド
バックエンド
HTTPHTTPHTTP
TERMINATED_HTTPSHTTPSHTTP
HTTPSHTTPSHTTPS
TCPTCPTCP
  • 実行API

curl -s $NETWORK/v2.0/lbaas/listeners -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"listener":{"loadbalancer_id":"'$LOADBALANCER_ID'","name":"'$LISTENER'","tenant_id":"'$TENANT_ID'","protocol":"'$PROTOCOL'","protocol_port":"'$PROTOCOL_PORT'"}}' | jq .



2-3.プール作成

  • 設定項目(json)
項目
設定値
内容
$POOL"pool1"プール名
$LB_ALGORITHM"ROUND_ROBIN"仮想サーバに対する負荷分散のアルゴリズムです。
-ROUND_ROBIN
トラフィックを均等に仮想サーバへ振り分けます。
-LEAST_CONNECTIONS
コネクション数が少ない仮想サーバへ優先してトラフィックを振り分けます。
-SOURCE_IP
特定の送信元IPアドレスからのトラフィックを、特定の仮想サーバに振り分けます。リスナーに設定したバックエンドの通信プロトコルと同じプロトコルを指定してください。
$TENANT_ID(プロジェクトID)プロジェクトID
$PROTOCOL"HTTP"負荷分散先の仮想サーバとの通信プロトコルです。
リスナーに設定したバックエンドの通信プロトコルと同じプロトコルを指定してください。
$LISTENER_ID(リスナーID)リスナーID指定
  • 実行API

curl -s $NETWORK/v2.0/lbaas/pools -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"pool":{"lb_algorithm":"'$LB_ALGORITHM'","name":"'$POOL'","protocol":"'$PROTOCOL'","listener_id": "'$LISTENER_ID'","tenant_id":"'$TENANT_ID'"}}' | jq .



2-4.プールにメンバー登録

 (1) プールにメンバー登録
  以下のAPIにて、負荷分散対象となる仮想サーバをプールに登録してください。
  事前に、負荷分散対象となる仮想サーバを起動状態にしてください。

  • 設定項目(json)
項目
設定値
内容
$POOL_ID(プールID)プールID
$ADDRESS(仮想サーバIPアドレス)分散対象の仮想サーバIPアドレス
$PROTOCOL_PORT"80"プロトコルポート
$TENANT_ID(プロジェクトID)プロジェクトID
$SUBNET_ID(サブネットID)サブネットID
  • 実行API

curl -s $NETWORK/v2.0/lbaas/pools/$POOL_ID/members -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"member":{"address":"'$ADDRESS'","protocol_port":"'$PROTOCOL_PORT'","tenant_id":"'$TENANT_ID'","subnet_id":"'$SUBNET_ID'"}}' | jq .



 (2) プールメンバーリスト表示

  • 設定項目(json)
項目
内容
$POOL_IDプール作成APIの実行結果を参照しプールIDを指定する
  • 実行API

curl -s $NETWORK/v2.0/lbaas/pools/$POOL_ID/members -X GET -H "X-Auth-Token: $OS_AUTH_TOKEN"| jq .



2-5.異常監視(ヘルスモニター)設定

  負荷分散対象として登録した仮想サーバにヘルスチェックを実施できます。
  応答しない仮想サーバは、自動的に負荷分散の対象から除外されます。

  • 設定項目(json)
項目
設定値
内容
$TENANT_ID(プロジェクトID)プロジェクトID
$POOL_ID(プールID)プールID
$DELAY"10"メンバーへプローブを送る時間間隔(秒単位)
$HTTP_METHOD"GET"ヘルスチェックの実行に使用するHTTPリクエストメソッドです。
$MAX_RETRIES"5"メンバーのステータスをINACTIVEに変更するまでのリトライ回数(1-10)
$TIMEOUT"60"接続がタイムアウトするまでの最大待ち時間。delayより低い値を指定する必要があります。
$TYPE"HTTP"負荷分散対象の仮想サーバを監視する方式です。
HTTP/HTTPS/PING/TCP
$URL_PATH"/index.html"バックエンドのアクセスURL。デフォルトは「/」
  • 実行API

curl -s $NETWORK/v2.0/lbaas/healthmonitors -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"healthmonitor":{"pool_id":"'$POOL_ID'","delay":"'$DELAY'","tenant_id":"'$TENANT_ID'","http_method":"'$HTTP_METHOD'","max_retries":"'$MAX_RETRIES'","timeout":"'$TIMEOUT'","type":"'$TYPE'","url_path":"'$URL_PATH'"}}' | jq .



メリット・効果

ロードバランサーサービスを利用した場合のメリット・効果は以下の通りです。

  • 複数台の仮想サーバによる可用性向上/性能向上
  • IPSecVPNやその他の構内接続等のセキュアな接続を併用すると、
    社内イントラネット環境から負荷分散構成を利用したシステムが利用可能



注意事項

  • 本パターンは2018年7月時点のFJCS for OSS(IaaS)で動作検証しています。

  • ロードバランサーは、ロードバランサーに割り当てる仮想IPアドレス(プライベートIP)でアクセス可能です。

  • ロードバランサーに障害が発生した場合でも、フェイルオーバーによって待機系のロードバランサーに切り替わります。

  • 負荷分散機能で証明書を利用する場合は、APIで証明書を登録してください。

  • すでに負荷分散対象として登録されている仮想サーバのIPアドレスを変更した場合、その仮想サーバは負荷分散の対象外になります。
    必要に応じて、負荷分散対象として再登録してください。

  • 負荷分散対象の仮想サーバの異常を検知するには、監視サービスをご利用いただくか、または、お客様にて仮想サーバの状態を監視する必要があります。

  • FJCS for OSSのロードバランサーサービスでは、L4層の負荷分散とL7層の負荷分散(http/httpsのみ)が可能です。
    ただし、L7層の負荷分散では、Cookieを使ったセッション維持のみ可能です。
    アクセス先のURLに含まれるドメイン名やパス等に応じて負荷分散条件を設定する負荷分散はできません。

その他

特にありません。



関連資料

  • FUJITSU Cloud Service for OSS マニュアル
    http://jp.fujitsu.com/solutions/cloud/k5/document/
    • サービスご紹介資料
    • IaaS 機能説明書
    • IaaS サービスポータルユーザーズガイド
    • IaaS APIユーザーズガイド
    • IaaS APIリファレンスマニュアル
    • IaaS HEATテンプレート解説書

(2018年7月検証)