インターネット接続が常態となった今日の社会では、ユーザーは、貴社のサイトやアプリを、24時間休みなく利用できることを期待しています。これを実現し、貴社の価値を高めるのがNGINXとNGINX Plusです。アプリケーションサーバのリバースプロキシおよびロードバランサーとしてNGINX Plusを展開する主な利点の一つは、アプリケーションの可用性と信頼性の向上であり、NGINX Plusそのものに高可用性(HA)を付加することにより、アプリとウェブサイトのパフォーマンスを一層向上させます。
NGINX Plus Release 6(R6)では、NGINX Plusインスタンスをアクティブ/パッシブHA設定で迅速かつ容易に展開できる新ソリューションを導入しました。このソリューションはオープンソースkeepalivedプロジェクトをベースに、(1) keepalivedデーモン、(2) HAペアの仮想IPアドレス割り当てを管理する仮想ルータ冗長性プロトコル(VRRP)の実装、および (3) サービス(ウェブサーバ、PHPバックエンド、NGINX Plusなど)が稼働状態にあるかどうかを判定するヘルスチェック機能という3つのコンポーネントをLinuxシステム向けHAソリューションに付与します。
目次 [hide] |
高可用性はどのようにもたらされるか?
初期設定を基に(下記のHA用にNGINX Plusを設定するを参照)、keepalivedは一方のNGINX Plusノードを(アクティブ)マスターに、他方を(パッシブ)バックアップに指定します。各ノードにはそれぞれのIPアドレスがあり、マスターノードには仮想IPアドレスも割り当てられており、ドメイン名システム(DNS)の中でクライアントにアドバタイズされます。運用中、VRRPとヘルスチェック機能はノードとNGINX Plusの動作を監視し、マスターが機能を停止すると、その仮想IPアドレスが以下のようにバックアップに再割り当てされるようにします。
- バックアップノードのVRRPインスタンスが、マスターノードのピアからadvertisementパケットを監視する。設定されたadvertisement間隔の3倍の時間を超えて同パケットを受信しないと、バックアップノードがマスターに代わって、仮想IPアドレスを自らに割り当てる。
- マスターノードのNGINX Plusのヘルスチェックが、設定された回数失敗すると、keepalivedが仮想IPアドレスをマスターノードからバックアップノードに再割り当てする。
HA用にNGINX Plusを設定する
NGINX Plusノードのアクティブ/パッシブペアをHAに設定するには、それぞれのノードで以下の手順を実行します。
- NGINX Plusリポジトリーにある対応オペレーティングシステムの指示に従って、NGINX Plus R6ベースパッケージ(nginx-plus)をインストールまたはアップグレードします。
- NGINX Plusリポジトリーに示される対応オペレーティングシステムのインストールコマンドを使用し、下のUbuntuの例のようにnginx-plusをnginx-ha-keepalivedに置換して、nginx-ha-keepalivedパッケージをインストールします。
root# apt-get install nginx-ha-keepalived - nginx-ha-setupスクリプトを実行します(nginx-ha-keepalivedから/usr/binにインストールされます)。
root# nginx-ha-setup
端末のウインドウをサイドバイサイドにして、スクリプトを各ノードで同時に実行し、どちらも同じ手順を実行してから次の手順に進むようお薦めします。また、Linuxのscreen (1) コマンドを使用して端末のウインドウを起動し、セッションが途絶した場合でもインストールが続行されるようにすることをお薦めします。
表示されたプロンプトに対応できるよう、始める前に以下の情報を用意しておいてください。
- 各ノードの物理IPアドレス
- 最初にマスターノードに割り当てられている仮想IPアドレス。スクリプトはこれを「クラスターIPアドレス(またはエンドポイント)」として参照します。どちらかのノードの実際のIPアドレスではありません。
keepalived設定スクリプト
nginx-ha-setupスクリプトは、/etc/keepalived/keepalived.confというローカルkeepalived設定ファイルを各ノードに作成し、手順3で指定した値を取り込みます。次の例は、IPアドレスが192.168.100.100のノードでの作成例です(他方のノードのアドレスは192.168.100.101で、仮想IPアドレスは192.168.100.150です)。これはNGINX Plusの設定とよく似ていますが別物です。たとえば、ディレクティブの区切りにセミコロンが使われていません。
vrrp_script chk_nginx_service { script “/usr/libexec/keepalived/nginx-ha-check” interval 3 weight 50 } vrrp_instance VI_1 { |
すべてのディレクティブの目的を説明するのは、本稿では範囲を超えますが、以下のいくつかの点は留意する価値があります。
- ファイルには以下の2つの主な設定ブロックがあります。
- vrrp_scriptブロックはヘルスチェック機能を設定し、スクリプトを実行してNGINX Plusが稼働状態にあるかどうかをチェックします。
nginx-ha-checkスクリプトがnginx-ha-keepalivedパッケージから指定のディレクトリ(OSにより異なる)に自動的にインストールされます。
intervalディレクティブは、スクリプトの実行頻度を秒単位で設定します。
- vrrp_scriptブロックはヘルスチェック機能を設定し、スクリプトを実行してNGINX Plusが稼働状態にあるかどうかをチェックします。
- vrrp_instanceブロックは、このノードのVRRPインスタンスを設定します。
指定したIPアドレスは、次の3つのディレクティブの値として記録されます:unicast_src_ip(ローカルノード)、unicast_peer(他方のノード)、およびvirtual_ipaddress(マスターノードに割り当てられた仮想IPアドレス)
advert_intディレクティブは、マスターノードのVRRPインスタンスがadvertisementをバックアップノードのピアに送信する頻度を秒単位で制御します。
virtual_router_idディレクティブ用の値51はサンプルです。必要に応じて変更し、使用環境で一意になるようにしてください(VRRPを使用してHAを複数のサービスに付与している場合に当てはまります)。
- vrrp_instanceブロックは、このノードのVRRPインスタンスを設定します。
- また、vrrp_scriptブロックのweightディレクティブとvrrp_instanceブロックのpriorityディレクティブは、どちらがマスターになるかを決定します。詳細はHAに関するNGINX Plus管理者ガイドのヘルスチェックスクリプトを使用したマスターとバックアップの管理をご覧ください。
- ローカルネットワークで複数ペアのkeepalivedインスタンス(または他のVRRPインスタンス)を実行する場合、それぞれにvrrp_instanceブロックを作成し、一意の名前(例ではVI_1など)とvirtual_router_id番号を付与します。
同様に、keepalivedを使用して他のサービスにHAを与える場合、それぞれに別々のヘルスチェックスクリプトとvrrp_scriptブロックを作成する必要があります。
詳細情報
HAソリューションの詳細は、NGINX Plus管理者ガイドのNGINX Plusの高可用性サポートをご覧ください。
どちらがマスターノードかの確認、マスターとバックアップの強制的変更、仮想IPの手動再割り当て、keepalivedとVRRPのトラブルシューティング、および仮想IPアドレスの追加に関する方法について記述されています。また、より複雑なHAセットアップ用のサンプル設定ファイルも提供されています。
原文:http://nginx.com/blog/high-availability-in-nginx-plus-r6/