
私はTCPロードバランサーとしてNGINXサーバーを使用しています。デフォルトではラウンドロビンロードバランシングなので、特定のクライアントIPに対して、エンドポイントに到達するたびにリクエストごとに異なるバックエンドアップストリームサーバーが使用されると予想しています。しかし実際には、毎回同じアップストリームサーバーが使用され、明確なクライアント IP は個別のアップストリーム サーバーを取得しています。これは、クライアントが大量のトラフィックを生成し、特定のクライアントが 1 つのアップストリーム サーバーしか利用できないためにホットスポットが発生するため、問題です。特定のクライアント IP がアップストリーム サーバー間でゆっくりとローテーションされているようです。ここでも、各リクエストをリクエストごとにランダムにアップストリームに割り当てるようにしたいと考えています。
NGINXに上流サーバーをランダムに割り当てるにはどうすればいいですか?すべてのリクエスト? ランダムキーワードを試してみましたが、効果はありませんでした。ご協力いただければ幸いです。
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
stream {
upstream api_backend_http {
server node1.mydomain.com:80;
server node2.mydomain.com:80;
server node6.mydomain.com:80;
server node14.mydomain.com:80;
server node18.mydomain.com:80;
server node19.mydomain.com:80;
server node21.mydomain.com:80;
server node22.mydomain.com:80;
server node24.mydomain.com:80;
}
upstream api_backend_https {
server node1.mydomain.com:443;
server node2.mydomain.com:443;
server node6.mydomain.com:443;
server node14.mydomain.com:443;
server node18.mydomain.com:443;
server node19.mydomain.com:443;
server node21.mydomain.com:443;
server node22.mydomain.com:443;
server node24.mydomain.com:443;
}
server {
listen 80;
proxy_pass api_backend_http;
proxy_buffer_size 16k;
proxy_connect_timeout 1s;
}
server {
listen 443;
proxy_pass api_backend_https;
proxy_buffer_size 16k;
proxy_connect_timeout 1s;
}
}
答え1
TCPロードバランサーとしてnginxを使用するのはやめたほうがいいです他のWebサーバー用これを本格的な HTTP リバース プロキシに切り替えます。これにより、TCP セッション分散の代わりに、必要なリクエストごとの RR を取得できます (永続的な接続はデフォルトで無効になっています)。