現在位置: ホーム / Nginx Ch. / NGINX Plus R6の高い可用性

NGINX Plus R6の高い可用性

本記事はNGINX Inc.に掲載されている Tech Blog を日本語訳したものとなります。 原文は記事の最後にあるURLよりご確認ください。

インターネット接続が常態となった今日の社会では、ユーザーは、貴社のサイトやアプリを、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ソリューションに付与します。

高可用性はどのようにもたらされるか?

初期設定を基に(下記の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に設定するには、それぞれのノードで以下の手順を実行します。

  1. NGINX Plusリポジトリーにある対応オペレーティングシステムの指示に従って、NGINX Plus R6ベースパッケージ(nginx-plus)をインストールまたはアップグレードします。
  2. NGINX Plusリポジトリーに示される対応オペレーティングシステムのインストールコマンドを使用し、下のUbuntuの例のようにnginx-plusnginx-ha-keepalivedに置換して、nginx-ha-keepalivedパッケージをインストールします。
    root# apt-get install nginx-ha-keepalived
  3. 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 {
        interface eth0
        state BACKUP
        priority 101
        virtual_router_id 51
        advert_int 1
        unicast_src_ip 192.168.100.100
        unicast_peer {
               192.168.100.101
        }
        authentication {
               auth_type PASS
               auth_pass f8f0e5114cbe031a3e1e622daf18f82a
        }
        virtual_ipaddress {
               192.168.100.150
        }
        track_script {
                chk_nginx_service
        }
        notify "/usr/libexec/keepalived/nginx-ha-notify"
    }

    すべてのディレクティブの目的を説明するのは、本稿では範囲を超えますが、以下のいくつかの点は留意する価値があります。

    • ファイルには以下の2つの主な設定ブロックがあります。
      • vrrp_scriptブロックはヘルスチェック機能を設定し、スクリプトを実行してNGINX Plusが稼働状態にあるかどうかをチェックします。

        nginx-ha-check
        スクリプトがnginx-ha-keepalivedパッケージから指定のディレクトリ(OSにより異なる)に自動的にインストールされます。

        intervalディレクティブは、スクリプトの実行頻度を秒単位で設定します。

      • vrrp_instanceブロックは、このノードのVRRPインスタンスを設定します。

        指定したIPアドレスは、次の3つのディレクティブの値として記録されます:unicast_src_ip(ローカルノード)、unicast_peer(他方のノード)、およびvirtual_ipaddress(マスターノードに割り当てられた仮想IPアドレス)

        advert_intディレクティブは、マスターノードのVRRPインスタンスがadvertisementをバックアップノードのピアに送信する頻度を秒単位で制御します。

        virtual_router_idディレクティブ用の値51はサンプルです。必要に応じて変更し、使用環境で一意になるようにしてください(VRRPを使用してHAを複数のサービスに付与している場合に当てはまります)。

    • また、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/

    サイオスOSSよろず相談室

    サイオスOSSよろず相談室(1)

    問い合わせボタン

    最新の記事
    NGINX Unit の概要からインストール 2017年09月18日
    nginx.conf 2017 参加レポート | NGINX Application Platform & NGINX Unit 発表 2017年09月08日
    nginx 1.13.5 リリース 2017年09月08日
    nginx 1.13.4 リリース 2017年08月09日
    NGINX Amplify ベータ版公開中 2017年07月19日
    nginx 1.13.3 リリース(CVE-2017-7529 対応) 2017年07月14日
    NGINX Plus R12 p3 メンテナンスリリース 2017年06月30日
    nginx 1.13.2 リリース 2017年06月28日
    【特別企画】 NGINX MANIAX セミナー Vol.1 2017年05月30日
    Nginxの Mainline Version の新リリースバージョン nginx 1.13.0 リリース、安定バージョンの nginx 1.12 も公開 2017年04月26日
    Nginx 1.11.12 リリース(Nginx 1.11.11のCPU占有問題へのBugFix) 2017年03月27日
    NGINX Plus R12 リリース 2017年03月22日
    nginx 1.11.11 リリース 2017年03月22日
    nginx 1.11.10 リリース 2017年02月15日
    nginx 1.11.9 リリース 2017年01月24日
    nginx 1.11.7 リリース 2016年12月16日
    nginx 1.11.6 リリース 2016年11月16日
    NGINX Plus R11 リリース 2016年10月25日
    NGINX Plus R10 リリース 2016年09月23日
    nginx 1.11.4 リリース 2016年09月22日
    Nginx 1.11.3 リリース 2016年07月27日
    NGINX Plus R9 リリース 2016年04月20日
    nginx 1.9.14 がリリース - OpenSSL 1.1.0 の互換性やHTTP/2上の機能改善 - 2016年04月06日
    nginx 1.9.11 がリリース - dynamic modules を追加 - 2016年02月10日
    nginx 1.9.10 がリリース、3つの脆弱性問題を修正 2016年01月28日
    NGINX Plus Release8 リリース 2016年01月20日
    nginx 1.9.9 および nginx 1.9.8 がリリース 2015年12月15日
    Nginx 1.9.7 がリリースされました。 2015年11月18日
    Nginx 1.9.6 がリリースされました。 2015年10月28日
    HTTP/2 に対応した Nginx 1.9.5 がリリースされました。 2015年09月25日
    NGINX Plus Release 7 リリース 2015年09月17日
    Nginx 1.9.4 がリリースされました。 2015年08月19日
    Nginx 1.9.3 がリリースされました。 2015年07月15日
    nginx開発者コメント:nginx 1.8およびnginx 1.9リリースについて 2015年07月03日
    NGINX Plus R6の高い可用性 2015年07月01日
    Nginx 1.9.2 がリリースされました。 2015年06月17日
    Nginx 1.9.1 リリース ~デフォルトでSSLv3がdisabledに 2015年05月27日
    Nginx 1.9.0 がリリースされました 2015年04月29日
    NGINX Plus Release6 リリース 2015年04月15日
    Nginx - Web technologies of the year 2014 2015年01月14日
    NGINX Plus r5 リリース 2014年12月03日
    NIFTY Cloudを利用したNGINX Plusの基本的な構成の導入(第1回) 2014年09月10日
    最新の記事 - もっと...