Nginx ロードバランシング設定
Nginxのロードバランシングを設定し、複数のバックエンドサーバーにトラフィックを分散する方法を解説。ラウンドロビン、最小接続数、IPハッシュ、重み付け方式に対応。
Proxy
詳細な説明
ロードバランシングは、受信トラフィックを複数のバックエンドサーバーに分散し、可用性、信頼性、全体的なパフォーマンスを向上させます。Nginxは複数のロードバランシングアルゴリズムを標準でサポートしています。
Upstreamブロック
upstream ブロックでバックエンドサーバーを定義し、proxy_pass でそのグループ名を参照します。Nginxが自動的にリクエストを分散します。
upstream backend {
server 10.0.0.1:3000;
server 10.0.0.2:3000;
server 10.0.0.3:3000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
ロードバランシング方式
ラウンドロビン(デフォルト)はリクエストを順番にサーバーへ分配します。最小接続数(least_conn)はアクティブな接続数が最も少ないサーバーにリクエストを送信し、処理時間が異なるアプリケーションに適しています。IPハッシュ(ip_hash)はクライアントIPのハッシュ値を計算し、同じクライアントが常に同じバックエンドに接続されるようにします。外部セッションストレージなしでセッション永続性を維持する場合に有用です。
upstream backend {
least_conn;
server 10.0.0.1:3000;
server 10.0.0.2:3000;
}
重み付け分散
サーバーの処理能力が異なる場合、重みを割り当てます。weight=3 のサーバーは weight=1 のサーバーの3倍のリクエストを受け取ります。
upstream backend {
server 10.0.0.1:3000 weight=3;
server 10.0.0.2:3000 weight=1;
}
ヘルスチェックとフェイルオーバー
backup を指定すると、すべてのプライマリサーバーがダウンした場合にのみトラフィックを受け取ります。max_fails と fail_timeout でNginxが異常サーバーを検知し、ローテーションから一時的に除外する方法を定義します。
upstream backend {
server 10.0.0.1:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.2:3000 max_fails=3 fail_timeout=30s;
server 10.0.0.3:3000 backup;
}
ベストプラクティス
- ログや外部監視ツールでバックエンドサーバーの状態と応答時間を監視する。
- Nginxとバックエンド間で
keepalive接続を使用し、TCPハンドシェイクのオーバーヘッドを削減する。 - ロードバランシングとNginx層でのSSL終端を組み合わせ、証明書管理を簡素化する。
ユースケース
Webアプリケーションを水平スケーリングし、複数のアプリケーションサーバーにトラフィックを均等に分散しながら、ダウンしたサーバーへの自動フェイルオーバーを提供します。