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 として動作する
詳しくは以下のサイトをご確認ください。
切り替わりの仕組み
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/