ニフクラ ブログ

ニフクラやクラウドの技術について、エンジニアが語るブログです。

マルチIPアドレスで実現するL7ロードバランサーのクラスター構成

こんにちは。富士通クラウドテクノロジーズの青木です。

ニフクラでは、複数のグローバルIPアドレスをニフクラ上のサーバーに自由に割り当てて使用することを可能にする「マルチIPアドレス」サービスを2020年4月から提供しています。 今回は、この「マルチIPアドレス」サービスと「L7ロードバランサー(Pulse Secure Virtual Traffic Manager)」(以下L7LB)でクラスター構成を作成する手順を紹介します。 また、実際にどれくらいの可用性があるかの検証までを行います。

この記事では、図1のようなシステムの構築を通じ、

  • クラスターによるシステムの冗長化
  • ニフクラでのL7LBクラスターの具体的な構築方法と検証

について解説します。

f:id:TechnicalAccountEngineer:20200708105505p:plain
図1: 今回構築するシステムの構成図

クラスター構成による冗長化

f:id:TechnicalAccountEngineer:20200708105135p:plain
図2: Webサーバーとロードバランサーを含むシステム

上の図2のように、Webサーバーとロードバランサーを含むシステムの可用性について考えてみます。 ロードバランサーによって2台のWebサーバーに負荷分散を行う構成になっています。 この構成では、いずれか1台のWebサーバーに障害が発生してもサービスを継続することができます。 しかし、ロードバランサーに障害が発生するとサービスが停止してしまうため、 システムの可用性向上のためには、この単一障害点を無くす対処が必要です。

ニフクラのサーバーには、物理ホストの故障時にサーバーが別のホストへ移動する機能「自動フェイルオーバー(HA機能)」が標準で備わっています。 ニフクラのサーバー上で稼働するロードバランサーも、自動フェイルオーバー(以降HA機能)の対象ですので、一定の可用性は担保された状態ではあります。

ただしニフクラのHA機能は、サーバーが別のホストへ移動する際にサーバーの再起動が発生します。 この再起動に伴う停止時間が許容できない、あるいはさらにシステムの可用性を高めたいという場合には、 ロードバランサーを クラスター化 する方法があります。

今回紹介するクラスター構成では、複数台のロードバランサーを1つのクラスターとします。 以下の図3に簡略化した構成図を示します。

f:id:TechnicalAccountEngineer:20200730182135p:plain
図3: クラスター構成

図3にあるように、2台のWebサーバーを作成し、ロードバランサーによりインターネットからのアクセスの負荷分散を行います。 2台のロードバランサーがクラスターになっていて、片方が動作し、もう片方は障害に備えて待機するという構成となっています。 動作しているロードバランサーが停止した場合、待機していたロードバランサーがその停止を自動的に検出し、動作を開始します。 そのため、停止時間を最小限にしてサービスを継続することができます。

本記事では、クラスターへのリクエストを受け付けるIPアドレス(VIP)をグローバルIPアドレスとしています。 これを実現する場合に必要になるのが、冒頭で紹介したニフクラの「マルチIPアドレス」です。 それではこれから「マルチIPアドレス」を用いたクラスター構成の構築手順と検証をご説明します。

検証概要

注意事項

以下構築手順を紹介しますが、事前に下記事項についてご確認ください。

  • 本記事は検証結果の1つを示すものです。実際に検討される場合は、ご利用者様で改めて内容を確認のうえ実施いただくようお願いします。
  • 本記事の掲載にあたっては細心の注意を払っておりますが、ニフクラとして内容の正確性・最新性を保証するものではありませんのでご了承ください。
  • 本記事中にはOSの操作も記載していますが、ニフクラではOS以上はご利用者様の責任範囲となります。ご留意ください。

構成

今回構成するネットワークの全体図は以下の図4のようになります(なお図中のグローバルIPアドレスは説明のためのもので、実際の値とは異なります)。 ニフクラのプライベートLAN機能を使って、Webサーバーは外部からリクエストを受けるロードバランサーとは別のネットワークとしています。

f:id:TechnicalAccountEngineer:20200708105505p:plain
図4: 今回構築するシステムの構成図

L7LBのクラスター構成は次の図5のようになっています。L7LBでは、複数のL7LBサーバーでクラスターを構成します。 そのクラスターの一部または全部で「トラフィックIPグループ」を構成することができます。 このグループは可用性を高く維持したいIPアドレス(外部からアクセスされるIPアドレス)である、「 トラフィックIPアドレス (VIP) 」を管理します。 今回は、2台のサーバーからなるクラスターの全体で、トラフィックIPアドレスを管理するトラフィックIPグループを構成することにします。

L7LBにはいくつか動作モードがありますが、今回はシングルホストモードを利用します。 このモードでは、トラフィックIPアドレスがトラフィックIPグループ内のいずれかのL7LBサーバーに割り振られ、 有効(アクティブ)になります。トラフィックIPアドレスが割り振られかったL7LBサーバー(パッシブ)は、 アクティブなサーバーの障害発生時に動作します。これにより、トラフィックIPアドレスの可用性が高く保てます。

トラフィックIPアドレスへのアクセスは、最終的にバックエンドサーバーへ振り分けられます。 バックエンドサーバーの集まりをプールと呼び、今回はWebサーバーのプールを構成します。 トラフィックIPアドレスの TCP 80番ポート(HTTP) へのアクセスは、 このプール中のいずれかのサーバーに振り分けられます。

f:id:TechnicalAccountEngineer:20200730182717p:plain
図5: L7LBの動作(シングルホストモード)

L7ロードバランサー(Pulse Secure Virtual Traffic Manager)について

今回クラスター構成に用いるロードバランサーは、ニフクラの「L7ロードバランサー」です。

L7ロードバランサーは、高機能および多機能なソフトウェアL7ロードバランサーです。 Linuxで動作し、ポート番号やIPアドレスをベースにトラフィックを振り分けるL4負荷分散のみならず、 アプリケーション情報をベースに振り分けるL7負荷分散が可能です。

ニフクラでは3種類のロードバランサーを提供していますが、L7に対応しているのはこのロードバランサーだけです。 ほかのロードバランサーについては、ニフクラの「ロードバランサー」のページを参考にしてください。

構築

構築手順

構築手順については、図研ネットウエイブ社のダウンロードサイトに「Pulse Virtual Traffic Manager セットアップ手順書」がありますので、そちらも参照ください。 以下の手順も基本的にこの手順書に沿っています。

なお、今回検証で用いたL7LB (Virtual Traffic Manager) のバージョンは 18.2 です。 以下の情報は検証時点のものになりますのでご了承ください。

構築手順の大まかな流れは以下の通りです。

  1. コントロールパネルログイン(ニフクラ)
  2. ファイアウォールグループ作成(ニフクラ)
  3. プライベートLAN作成(ニフクラ)
  4. サーバー作成(ニフクラ)
  5. サーバーセパレート設定(ニフクラ)
  6. nginxインストール(OS)
  7. プライベートIPアドレス設定(OS)
  8. rootユーザーのパスワード設定(OS)
  9. マルチIPアドレス設定(ニフクラ)
  10. グローバルIPアドレス・ホスト名設定(OS)
  11. L7LBインストール(OS)
  12. hotfixの適用(L7LB)
  13. クラスターの設定 (L7LB)
  14. トラフィックIPグループの設定(L7LB)
  15. サービスの設定(L7LB)
  16. 動作確認(L7LB)
  17. 構築後の調整 (ニフクラ)

では、手順の解説をはじめます。

1. コントロールパネルログイン(ニフクラ)

ニフクラのコントロールパネルにログインします。基本的に、以降の作業はコントロールパネルと端末 (SSH) で行います。

2. ファイアウォールグループ作成(ニフクラ)

必要なファイアウォールグループを作成します。 まず、ファイアウォールグループ lbfw を作成します。これは、ロードバランサーに適用するためのファイアウォールグループです。 ロードバランサーは、Webサーバーへのリクエストを受け付ける80番ポート (TCP) へのアクセス、 L7LBの設定用に9090番ポート (TCP) へのアクセス、 また構築作業のため、SSHで繋ぐ22番ポート (TCP) へのアクセスを許可する必要があります。 そこで、INルールを次のように設定します。

プロトコル 宛先ポート 接続元種別 IP/CIDR・グループ
TCP 22 IPアドレス (IPv4) (構築作業に用いる端末のIPアドレス)
TCP 80 IPアドレス (IPv4) (構築作業に用いる端末のIPアドレス)
TCP 9090 IPアドレス (IPv4) (構築作業に用いる端末のIPアドレス)

なお、OUTルールについては、今回は設定せずに進めます。 ニフクラのファイアウォールグループでOUTルールに何も設定しない場合、 サーバーから出ていく通信 (Outbound) は全て許可されます。 実際に実施する場合は適切なルールについて検討してください。

ルールを入力すると適用するサーバーなどを選択する画面になります。 あとでサーバーを作りますので、ここでは空のまま先に進めます。

次に、ファイアウォールグループ webfw を作成します。 Webサーバーについては、ロードバランサーからのアクセスを許可する必要があります。 L7LBの場合はこの許可は明示的に行わなければなりません(この点で、ニフクラの「ロードバランサー(L4)」とは異なります)。 また、L7LBサーバーと同様、構築用のSSHアクセスが必要です。さらにWebサーバーの動作確認のため、 構築作業端末に対して80番ポート (TCP) を空けておくのもよいでしょう。 そこで、以下のようにINルールを設定します。

プロトコル 宛先ポート 接続元種別 IP/CIDR・グループ
TCP 22 IPアドレス (IPv4) (構築作業に用いる端末のIPアドレス)
TCP 80 IPアドレス (IPv4) (構築作業に用いる端末のIPアドレス)
ANY - グループ lbfw

ここで、lbfwは先程作成したファイアウォールグループです。

OUTルールについては、先ほどと同じく設定せずに進めます。 繰り返しになりますが、実際に実施する場合は適切なルールについて検討してください。

3. プライベートLAN作成(ニフクラ)

プライベートLANを作成します。今回は、 PLAN という名前で、CIDRを 192.168.1.0/24 とします。

f:id:TechnicalAccountEngineer:20200708105647p:plain
図6: プライベートLANの作成

4. サーバー作成(ニフクラ)

サーバーを作成します。今回の構成では4台のサーバーが必要です。 Webサーバーについてはとくに制約はありませんが、L7LBサーバーについてはCPUやメモリの要件をよく確認してサーバータイプを選択する必要があります。 帯域やSSLトランザクション数によって必要なスペックが変わりますので、詳しくはニフクラの仕様・機能説明ページを参考にしてください。 今回は以下のように構成します。

サーバー名 タイプ OS ファイアウォールグループ 用途
lbserver1 c-small2 CentOS 7.7 lbfw L7LBサーバー (1)
lbserver2 c-small2 CentOS 7.7 lbfw L7LBサーバー (2)
webserver1 c-small CentOS 8.1 webfw Webサーバー (1)
webserver2 c-small CentOS 8.1 webfw Webサーバー (2)

※ Type-cは一部のゾーンでのみ利用できます

途中、ファイアウォールやネットワークを設定する画面になります。ファイアウォールグループについては、 L7LBサーバーはlbfw、Webサーバーはwebfwを選択します。またネットワークの設定では、 「共通プライベート」を先ほど作成したプライベートLAN(今回は PLAN )に変更します。 各サーバーのプライベートIPアドレスは手動で設定するので、PLANのIPアドレスは「指定しない」にします。 「共通グローバル」のIPアドレスは「自動割り当て」のままにします。

f:id:TechnicalAccountEngineer:20200709113531p:plain
図7: サーバーのネットワーク設定

これで4つ全てのサーバーがプライベートLAN(今回は PLAN )に追加されるようになります。

サーバーの作成が完了すると、コントロールパネル上でグローバルIPアドレスが表示されます。 なお、プライベートIPアドレスが取得できないため、 下の図8のようにステータスが「異常あり」と表示されますが、問題ありません。 ここで表示されたグローバルIPアドレスは後で使いますので、控えておきます。

f:id:TechnicalAccountEngineer:20200709113633p:plain
図8: サーバーの状態表示 - 「異常あり」と表示される

5. サーバーセパレート設定(ニフクラ)

今回のように同じゾーンで動作するサーバーで冗長構成とする場合は、 サーバーセパレートを設定しておくと、2台以上のサーバーが単一物理ホストの障害で同時に停止することを回避できます。

図9の設定だと、lbserver1とlbserver2は異なる物理ホストで動作するようになります(詳細については、「サーバーセパレート」の機能説明ページをご覧ください)。 同様に、webserver1とwebserver2にもサーバーセパレートを設定します。

f:id:TechnicalAccountEngineer:20200709113705p:plain
図9: サーバーセパレートの設定

6. nginxインストール(OS)

まずWebサーバーにSSHでログインします。

# ssh -p 22 -i <秘密鍵へのパス> root@198.51.100.45

続いてnginxを導入します。

# yum install nginx
# systemctl enable nginx --now

完了したら、WebサーバーのグローバルIPアドレスにアクセスし、ページが表示されることを確認します。 この作業は2台のWebサーバーともに実施します。

7. プライベートIPアドレス設定(OS)

続いて、Webサーバー、L7LBサーバー含む4台のサーバー全てに対し、プライベートLANのIPアドレスを手動で設定します。 今回は以下のように設定します。

サーバー名 グローバルIPアドレス プライベートIPアドレス 用途
lbserver1 198.51.100.25 192.168.1.100 L7LBサーバー (1)
lbserver2 198.51.100.38 192.168.1.101 L7LBサーバー (2)
webserver1 198.51.100.45 192.168.1.200 Webサーバー (1)
webserver2 198.51.100.58 192.168.1.201 Webサーバー (2)

まず、各サーバーにログインし、サーバーのプライベート側のインターフェースを

# ip a

で確認します。グローバルIPアドレスが振られているインターフェースとは別に、 IPアドレスのないインターフェースがあります。 このインターフェースにプライベートIPアドレスを手動で設定します。 以下 nmtui による例を示します。

# nmtui

Edit a Connectionに進み、図10のようにIPアドレスを設定します。

f:id:TechnicalAccountEngineer:20200708110109p:plain
図10: nmtuiによるIPアドレスの設定

なお、サーバーによってインターフェースの名前が異なることがあります。 設定の際には、そのサーバーごとにインターフェースを確認してください。

設定後、

# ip a

で変更が反映されていることを確認します。設定が反映されない場合、再度 nmtui を実行し、 メニューの Activate a Connection から、接続を一旦無効にしたのち再度有効にしてください。

正しく設定ができれば、コントロールパネル上でも変更が反映されるはずです。 プライベートIPアドレスが正しく設定されれば、「異常あり」の表示も消えます。

f:id:TechnicalAccountEngineer:20200709113819p:plain
図11: サーバーの状態表示 - 「オンライン」と表示される

8. rootユーザーのパスワード設定(OS)

4つある各サーバーに対して、rootユーザーのパスワードを設定します。 これは、ニフクラのコントロールパネルからコンソールログインを行うために必要です。 次に行うマルチIPアドレスの設定では、一旦L7LBサーバーはグローバルIPアドレスが存在しない状態になり、 インターネットからアクセスできなくなるため、コンソールログインが必要です。

また、Webサーバーも最終的にはグローバルIPアドレスを持たなくなりますので、 ここでコンソールログインできるようにしておきます。

手順としては、SSHでサーバーにログインしたあと、次のコマンドでrootユーザーにパスワードを設定します。

# passwd

これでコントロールパネルからコンソールログインができるようになります。 なお、コンソールログインは、コントロールパネルのサーバー画面から行えます。

9. マルチIPアドレス設定(ニフクラ)

今回は3つのグローバルIPアドレスを使いますので、「確保するIPアドレス数」は3とします。 作成が完了すると、以下の図12のように表示されます。

f:id:TechnicalAccountEngineer:20200708110430p:plain
図12: 作成されたマルチIPアドレスグループ

このグループを選択し、作成した2つのL7LBサーバーを割り当てます。この画面ではサーバーを1つずつしか選択できませんので、 サーバーの数だけ繰り返します(図13)。

f:id:TechnicalAccountEngineer:20200709113857p:plain
図13: マルチIPアドレスグループへのサーバーの追加

なお、このときサーバーは再起動されます。

10. グローバルIPアドレス・ホスト名設定(OS)

ニフクラのコントロールパネルからL7LBサーバーにコンソールログインし(先ほど設定したrootユーザーのパスワードが必要です)、 グローバルIPアドレスを手動で設定します。サブネットマスクとゲートウェイは、 コントロールパネルのマルチIPアドレスグループの画面(図12参照)に表示されるものを使います。 IPアドレスは、発行された3つのアドレスから選びます。下の表のように、3つのうち2つをL7LBサーバー用とし、 あと1つをトラフィックIPアドレスとします(なお、表中のグローバルIPアドレスは説明のためのもので、実際の値とは異なります。また、マルチIPアドレスが連番である保証はありません)。

IPアドレス 用途
203.0.113.114 L7LBサーバー (lbserver1) 用
203.0.113.115 L7LBサーバー (lbserver2) 用
203.0.113.116 トラフィックIPアドレス

以下 nmtui による設定例を示します。

# nmtui

f:id:TechnicalAccountEngineer:20200708110518p:plain
図14: nmtuiによるIPアドレスの設定

設定後、

# ip a

で変更が反映されていることを確認します。設定が反映されない場合、再度 nmtui を実行し、 メニューの Activate a Connection から、接続を一旦無効にしたのち再度有効にしてください。

正しく設定ができれば、コントロールパネル上でも変更が反映されるはずです。

f:id:TechnicalAccountEngineer:20200709113926p:plain
図15: サーバーの状態表示 - IPアドレスの変更が反映されている

続いて、ホスト名をL7LBサーバーに設定します。L7LBサーバーは互いをホスト名で参照しますので、 ここで設定したホスト名で名前解決ができる必要があります。ここでは、 /etc/hosts に追記して対応します。 以下に、ホスト名の設定、および /etc/hosts の設定例を示します。この設定を lbserver1, lbserver2の両方に行います。

サーバー名(ホスト名) IPアドレス
lbserver1 203.0.113.114
lbserver2 203.0.113.115
# hostnamectl set-hostname lbserver1
# ...
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
203.0.113.114 lbserver1
203.0.113.115 lbserver2

さらに、時刻の同期設定を行う必要があります。ニフクラ環境では

# vmware-toolbox-cmd timesync enable

とすれば、VMware Toolsによる時刻同期が可能です。または、NTPによる同期も可能です。

続いて、L7LBの動作に必要なソフトのインストールを行います。インストールすべきソフトなど、 詳しくは手順書を参考にしてください。ここではJREをインストールしました。

# yum install java-1.8.0-openjdk

11. L7LBインストール(OS)

L7LBサーバーのグローバルIPアドレスの変更が確認できたら、L7LBをインストールします。 サポートサイトよりダウンロードしたアーカイブを展開し、コマンドを実行すればインストールが可能です。 詳しくは手順書を参考にしてください。以下、コマンド例を示します。

# tar zxvf pulsevtm_182_linux-x86_64.tgz
# cd ZeusTM_182_Linux-x86_64/
# ./zinstall

これ以降は画面の指示に従いインストールとセットアップを進めます。特に変更の必要がなければ、 デフォルトの値で最後まで進めて構いません。

12. hotfixの適用(L7LB)

hotfixがあれば適用します。 https://<L7LBサーバーのグローバルIPアドレス>:9090/ をブラウザで開き、 ユーザー名 admin とセットアップで設定したパスワードでログインします。設定画面が表示されますので、 手順書に従いhotfixの導入を実施してください。導入は2台それぞれに行う必要があります。

13.クラスターの設定 (L7LB)

2台のL7LBサーバーでクラスターを作成します。現在は2つのクラスターがありますが、これを1つに統合します。 まず https://<lbserver2のIPアドレス>:9090/ にアクセスします。 画面右上にある Wizards というプルダウンメニューに、Join a clusterという項目がありますので、 これをクリックしてウィザードを開始します。ウィザードでは、"Select existing cluster" で既存のクラスターを検索すれば、lbserver1のクラスタが表示されますので、そこにJoinします。

f:id:TechnicalAccountEngineer:20200708110646p:plain
図16: クラスタの統合

なお、これ以降の設定は2つのL7LBサーバーのどちらか一方に行えば、他方にも反映されます。

14. トラフィックIPグループの設定(L7LB)

引き続きL7LBの設定画面で、Services > Traffic IP Groups と進み、図17のようにトラフィックIPグループを作成します。 名前は任意のものを設定します。今回はlbserver2をパッシブにしたいので、Passiveにチェックを入れます。 またIP Addressesには、手順9. で決めたトラフィックIPアドレスを入力します。

f:id:TechnicalAccountEngineer:20200708110718p:plain
図17: トラフィックIPグループの設定

15.サービスの設定 (L7LB)

サービスを作成します。これにより、トラフィックIPアドレスへのリクエストがバックエンドのWebサーバーへ送られるようになります。 今回は、この設定にウィザードを使います。画面右上にある Wizards というプルダウンメニューに、Manage a new service という項目がありますので、これをクリックしてウィザードを開始します。 指定するのは、サービスの名前、通信に使うプロトコルとポート、そして2台あるWebサーバーのノード情報(IPアドレスとポート)です。 今回は以下のように設定します。

項目 設定値
Name Nginx(任意の値で構いません)
Protocol HTTP
Port 80
ノード1 192.168.1.200:80
ノード2 192.168.1.201:80

16.動作確認 (L7LB)

トラフィックマネージャー、サービス(バーチャルサーバーとプール)が正しく動作していることを確認します。 図18のように、緑色のチェックマークがそれぞれのアイコンに表示されていれば問題ありません。

f:id:TechnicalAccountEngineer:20200708110804p:plain
図18: L7LBの動作確認

また、ブラウザーで http://<トラフィックIPアドレス>/ へアクセスし、ページが表示されることを確認します。

17. 構築後の調整(ニフクラ)

以上でL7LBの設定は完了です。必要に応じて次の点を確認しておきます。

  • 現在ファイアウォールグループlbfwの設定では、80番ポートが構築用端末にのみ公開されていますので、 今回作成したWebサービスへアクセスできるのもこの端末のみになっています。 必要に応じてファイアウォールグループの設定を変更してください。
  • WebサーバーにはグローバルIPが不要ですので、コントロールパネルの「ネットワーク設定変更」から、 共通グローバルを削除します。

f:id:TechnicalAccountEngineer:20200709114012p:plain
図19: サーバーのネットワーク設定 - 共通グローバルの削除

動作検証

ニフクラでは、物理ホストの障害が発生すると、HA機能により自動的にサーバーが再起動されます。 これを想定し、クラスタを構成するサーバーが再起動したときサービスが停止する時間を測定してみました。

今回はL7LBサーバーを1台とした場合(図左)と、上の手順のように2台のクラスターとした場合(図右)で比較を行いました。

L7LBサーバーを1台とした場合 L7LBサーバーを2台とした場合
f:id:TechnicalAccountEngineer:20200708110957p:plain f:id:TechnicalAccountEngineer:20200708111031p:plain

次のコマンドで、今回構築したものとは別のニフクラのサーバー(図中、「テスト用サーバー」)から、 トラフィックIPアドレスに向けてHTTPリクエストを1秒おきに送信します(図中の矢印)。 その間に、ニフクラのコントロールパネルからL7LBサーバーを「強制再起動」(強制的な停止を伴う再起動)します。 このとき、失敗したリクエストの個数をもって、「推定サービス停止時間」としました。

while true; do
  curl -s -m 1 http://<トラフィックIPアドレス>/ -o /dev/null -w "%{http_code},%{time_total}\n" &
  sleep 1
done

結果は以下の通りです(測定した3回のデータを示しています)。

推定サービス停止時間 / 秒
1回目2回目3回目
L7LB1台構成で、そのL7LBを再起動272725
L7LB2台構成で、アクティブなL7LBを再起動686
L7LB2台構成で、パッシブなL7LBを再起動000

L7LBサーバー1台の構成ですと、L7LBサーバーの再起動中はずっとサービスが停止しますので、 停止時間が27秒程度ありました。一方、2台構成の場合は停止時間が8秒程度と短くなっています。 これは、L7LBがサーバーの死活を常に監視しており、クラスター中のサーバーがダウンしていることを検知すると、 すぐに動作しているサーバーがトラフィックIPアドレスを引き継ぐためです。

まとめ

ニフクラのマルチIPアドレス機能を使って、L7ロードバランサーでクラスターを構築する方法を紹介しました。 このクラスタ構成では、ロードバランサー1台の場合に比べ、サービスの停止時間を短くできることも確認できました。 今回の検証の結果を踏まえ、HA機能のみの場合とクラスター構成を比較すると、下の表のようになります。

自動フェイルオーバー(HA機能)のみ クラスター構成
利用する機能 ニフクラ標準機能 「マルチIPアドレス」を利用
(プライベートIPアドレス利用なら不要)
必要な追加設定 なし マルチIPアドレスの設定、
クラスターの設定
対応できる障害 単一物理ホストの障害 単一物理ホストの障害、
L7LBの停止
障害時再稼動に要する時間 数十秒程度(サーバーの再起動を伴う)※1 およそ10秒以内(待機系に切り替わる)※2
費用 安価 高価(L7LBが2組以上必要)

※1 ニフクラの「HA機能」は、物理サーバーの故障時、約5分以内にサーバーが再起動するものです。 ここでは本記事内の検証結果に基づき記載していますが、 再起動に要する時間をこの通り保証するものではありません。

※2 障害の種類やL7LBの設定などによって再稼働に要する時間は変わります。ここでは、本記事内の検証結果に基づき記載しています。

今回は、マルチIPアドレス機能を用いてクラスター構成とすることで、L7ロードバランサーの可用性を高めることができました。 なお、今回紹介したマルチIPアドレスによるクラスター構築は、L7ロードバランサー以外にも適用できます。 ぜひご活用ください。

クラスター構成の限界

最後に、「マルチIPアドレス」によるクラスター構成で対応できる障害の範囲について補足説明をします。

「マルチIPアドレス」機能には、異なるゾーンにあるサーバー間ではIPアドレスを共有できないという制約があります。 したがって、クラスターを構成するサーバー(今回の場合、L7LB)は同一のゾーンになければならず、 クラスター構成だけではゾーン障害やリージョン障害に対応できません。 これら障害にも対応する必要がある場合は、ニフクラの「DNS」機能をご検討ください。 この場合、ニフクラの異なるゾーンやリージョン、あるいはニフクラ以外の任意の場所にサーバーなどを用意し、 DNSの機能でアクセスを切り替えることになります(図20)。

f:id:TechnicalAccountEngineer:20200730182243p:plain
図20: ニフクラの「DNS」によるマルチリージョン構成

このDNSの利用方法については、当ブログに記事がありますので参考にしてください(「ニフクラDNSを利用してリージョンを跨いだDR構築を試してみる」)。