ネットワーク

NGINX Plus を冗長構成にする方法

お客様より NGINX Plus で HA 機能 ( Active/Standby ) を使用して Proxy の冗長ができるか?という質問を受けました。
オンプレミス環境で NGINX Plus の HA 機能を検証したので記載します。
なお、AWS 環境での HA 機能は Jo nishikawa さんが確認しており、後日、記事が公開されますのでそちらもお楽しみに。

NGINX Plus での冗長構成

NGINX Plus では NGINX Plus 用にパッケージされた nginx-ha-keepalived を使用することで簡単に冗長構成を構築できます。
今回は NGINX Plus  2 台を使用して、Active/Standby の冗長構成を構築する手順を掲載します。

検証環境

  • VMware ESXi 7.0
    • インスタンス :  1号機/2号機
  • CentOS 8.5.2111
  • NGINX Plus R27-p1

keepalived のインストール

2台の NGINX Plus それぞれで、NGINX Plus 用にパッケージされた nginx-ha-keepalived をインストールします。
この nginx-ha-keepalived は OSS では使用することができません。

※ 通常の keepalived では、後述する nginx-ha-setup コマンドを使用できませんので、 nginx-ha-keepalived をインストールしてください 。

keepalived の設定

nginx-ha-setup コマンドを使用して対話形式で keepalived のコンフィグを生成します。

# nginx-ha-setup

 

Step1 では、自機と対向機の IP アドレスを設定します。
ここで設定した IP アドレスを使用して keepalived はお互いのスコア値を交換します。

Step2 では実通信に使用する仮想 IP アドレスを指定します。
この仮想 IP アドレスは冗長両機で同じアドレスを指定する必要があります。

また、自機が初期状態で Master/Backup のどちらで動作するかも指定します。
ここで Master を指定した NGINX Plus が Active として動作します。

 

Step3 で Enter を押下すると、keepalived の config が生成され、自動的に /etc/keepalived に保存されます。

冗長両機で nginx-ha-setup コマンドを実行して keepalived の設定が完了すれば、冗長構成の設定は完了です。

 

また、作成された keepalived の設定は以下のようになります。

Step2 で Backup を指定した場合もほぼ同じ設定になりますが、以下の Priority 値だけが異なります。

Master/Backup の状態確認方法

NGINX Plus が Active/Standby のどちらで動作しているかは以下のファイルで確認できます。

/var/run/nginx-ha-keepalived.state

※ Master と表示された機器が Active , Backup と表示された機器が Standby となります。

 

また、仮想 IP アドレスが付与されているかでも判断できます。
以下の出力結果で仮想 IP アドレスを持っている方が Active となります。

冗長構成の動作原理

keepalived には以下のような特徴があります。

  • VRRP を使用して、Active/Standby を構成
  • 冗長両機で共有する仮想 IP アドレスを持ち、Active だけが通信を処理
  • 各ノードはスコア値を持ち、スコア値が逆転すると Active/Standby が切り替わる
  • 初期セットアップ時に 各ノードにて Master/Backup を指定し、基本的に Master に指定されたノードが Active として動作する

詳しくは以下のサイトをご確認ください。

https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/load_balancer_administration/ch-keepalived-overview-vsa#s1-lvs-basic-VSA

切り替わりの仕組み

keepalived では各ノードでスコア値を持っており、このスコア値が高いほうが Active となります。
スコア値は、vrrp_instance の Priority と vrrp_script の weight を合算した値となりますので、
上述の設定では、Master は 201 (101 + 50 + 50) 、Backup は 200 (100 + 50 + 50) となります。
そして、vrrp_script の応答結果によって weight 分が減算され、スコア値が逆転した場合に、切り替わりが発生します。

異常検知による切り替わり

vrrp_script の chk_nginx_service 設定で、自機の NGINX Plus プロセスの状態を確認しており、プロセスが停止した場合、スコア値が weight 分減少して、切り替わりが発生します。

手動による切り替わり

vrrp_script の chk_manual_failover 設定にて、特定ディレクトリにファイルが存在する場合、スコア値が  weight 減少してます。そのため、以下のファイルを作成することで切り替わりが発生します。

/var/run/keepalived-manual-failover

※ ファイルが存在する限りスコア値が減少した状態となりますが、ファイルを削除するとスコア値が回復するため、切り替わりが発生します。 冗長両機でファイルを作成した場合、初期セットアップで Master を選択したノードが Active になりますので、ご注意ください。

 

まとめ

NGINX Plus 用にパッケージ化された keepalived を使用することで、非常に簡単に冗長構成を組むことができました。
仕組みについても VRRP を使用しているためシンプルであり、vrrp_script を作成することでいろいろな切り替わりルールを設定できる点が良いと思いました。
また、今回は Active/Standby 構成ですが、仮想 IP アドレスを増やすことで、Active/Active 構成にすることもできます。

冒頭にも書きましたが、次回は AWS 環境における冗長構成の構築方法となります。
Public Cloud 環境においても、keepalived を使用するため基本的な原理は同じですが、Cloud ならではの部分( EIP の付け替え等)がありますので、楽しみにしていてください。

 

当社では、今回紹介した NGINX Plus における冗長構成の構築を含んだハンズオントレーニングも開催しております。
開催情報はイベントページにてご確認いただけますので、ぜひ、ご参加ください。

https://cn.teldevice.co.jp/seminar/

 

この記事に関連する製品・サービス