自宅では、プロキシやDNSなどを負荷分散装置(ロードバランサ)にてロードバランスして利用している。負荷分散装置としてはZEVENETを利用していたが、コミュニティ版は2020年5月から更新がないことや、冗長構成した際にうまく切り替わらないなどの問題が起きていたため、今回別製品に変更することにした。
調べていくと、Webサーバ用途のソフトウェアとして知られる「NGINX (エンジンエックス)」が負荷分散装置としても利用できることがわかった。ただし、OSS版のNGINXにおいては、以下機能が実装されていない点に注意しよう。以下機能は商用のNGINX Plusであれば利用可能となる。
- セッションパーシステンスの機能なし
- 負荷分散対象サーバに対するNGINXからの定期的なヘルチェック (アクティブヘルスチェック) の機能なし。通信発生時に都度ヘルスチェックを行うパッシブヘルスチェックのみ利用可能
- NGINXの機能を利用した冗長化構成の機能なし
今回、「NGINX」を利用して負荷分散装置(ロードバランサ)を構築する手順を記載する。先に言っておくと、NGINXの設定は非常に簡単だった。
環境
環境としては以下の通りAlmaLinuxを利用したが、そのほかのRed Hat系のディストリビューションであれば、ほぼ同様の手順で構築できるはずだ。
- AlmaLinux 8.5
- NGINX 1.14.1
負荷分散装置の構成は以下の通りとする。クライアントからの通信と負荷分散対象サーバが同一のインタフェースとなる「ワンアーム」構成となる。なお、NGINXでは、通信は必ずSource NATされるため、ワンアーム構成としたとしても特別な設定は不要となる。
負荷分散対象は以下の通りとする。
用途 | 待ち受けポート | 負荷分散対象サーバ | ポート番号 |
---|---|---|---|
Proxy | 8080/tcp | 192.168.33.27, 192.168.33.28 | 8080/tcp |
DNS | 53/udp | 192.168.33.27, 192.168.33.28 | 10053/udp |
MTA | 25/tcp | 192.168.33.27, 192.168.33.28 | 25/tcp |
NTP | 123/udp | 192.168.33.27, 192.168.33.28 | 123/udp |
NGINXにて負荷分散装置を構築する手順
1. dnf
でNGINXをインストール
Red Hat系のディストリビューションの場合は、NGINXは標準のリポジトリに用意されている。NGINX本体に加え、負荷分散装置の設定に必要なstreamモジュールをインストールする。
# dnf install nginx nginx-mod-stream -y
2. NGINXの設定ファイルを作成
負荷分散装置の設定ファイル用のディレクトリを作成する。
# mkdir /etc/nginx/stream.conf.d
ディレクトリ作成後、以下2つのファイルを作成・追記を行う。
/etc/nginx/stream.conf.d/servers.stream.conf
以下内容で設定ファイルを新規作成する。
# Proxy
upstream proxy_server {
least_conn;
server 192.168.33.27:8080;
server 192.168.33.28:8080;
}
server {
listen 8080;
proxy_pass proxy_server;
}
# DNS
upstream dns_server {
server 192.168.33.27:10053;
server 192.168.33.28:10053;
}
server {
listen 53 udp;
proxy_pass dns_server;
}
# MTA
upstream mail_server {
least_conn;
server 192.168.33.27:25;
server 192.168.33.28:25;
}
server {
listen 25;
proxy_pass mail_server;
}
# NTP
upstream ntp_server {
server 192.168.33.27:123;
server 192.168.33.28:123;
}
server {
listen 123 udp;
proxy_pass ntp_server;
}
/etc/nginx/nginx.conf
以下を最下行に追記する。
stream {
include /etc/nginx/stream.conf.d/*.conf;
}
3. サービス起動
これだけで必要な設定は完了となるため、NGINXのサービスを起動しよう。
# systemctl start nginx
# systemctl enable nginx
4. 動作確認
サービス起動後に待ち受けポートが開放されていることをss
コマンドで確認する。以下の通り、負荷分散装置の設定を行ったポートがLISTEN (UDPに関してはUNCONN) になっていることがわかる。
# ss -nl | egrep ":(8080|53|25|123)" | sed -e 's/ */\t/g'
udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:*
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:8080 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:25 0.0.0.0:*
負荷分散対象サーバに対しても問題なく通信できていることを確認しておこう。
# ss -n | egrep "192.168.33.27:(8080|53|25|123)" | sed -e 's/ */\t/g'
udp ESTAB 0 0 192.168.33.41:57935 192.168.33.27:123
tcp ESTAB 0 0 192.168.33.41:39962 192.168.33.27:8080
tcp ESTAB 0 0 192.168.33.41:39592 192.168.33.27:8080
# ss -n | egrep "192.168.33.28:(8080|53|25|123)" | sed -e 's/ */\t/g'
udp ESTAB 0 0 192.168.33.41:37953 192.168.33.28:123
tcp ESTAB 0 0 192.168.33.41:35096 192.168.33.28:8080
tcp ESTAB 0 0 192.168.33.41:33832 192.168.33.28:8080
以上を確認したうえで、実際にプロキシ経由でのインターネット閲覧やDNSの名前解決を確認し、問題なく動作することを確認した。
以上にて、「NGINX」を利用して負荷分散装置を構築する手順は完了となる。
0 件のコメント:
コメントを投稿