nginx 负载均衡配置 ( 支持 socket) for linux


<<yaoweibin-nginx_tcp_proxy_module-v0.4-45-ga40c9.gz>>

TCP模块

nginx 做负载均衡只能支持 http 协议的负载均衡,不能支持 socket 协议。让 nginx 支持 tcp_proxy_pass ,那 websocket 负载均衡的问题就解决 nginx 安装到 /usr/local/nginx
echo "">/usr/local/nginx/conf/nginx.conf
vi nginx.conf
worker_processes 4;
pid /var/run/nginx.pid;
events {
worker_connections 40768;
}
// 以下增加一个 http 的负载均衡
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
upstream test1 { // 这里增加负载均衡的真实机
server 192.168.1.101:8098 weight=2;
server 192.168.1.102:8098 weight=2;
server 192.168.1.103:8098 weight=2;
server 192.168.1.104:8098 weight=2;
}
types_hash_max_size 2048;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
include /usr/local/nginx/conf/mime.types;
default_type application/octet-stream;
gzip on;
gzip_disable "msie6";
server
{
listen 8098; // 负载均衡 test1 使用的端口
server_name test1; // 对应 test1 的负载均衡
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass   http://test1 ; // 写成和负载均衡 test1 名称一样 .
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}}

// 以下再增加一个 socket 的负载均衡
tcp {
upstream test2 { // 这里增加负载均衡的真实机
server 192.168.1.11:8087 weight=2;
server 192.168.1.12:8087 weight=2;
server 192.168.1.13:8087 weight=2;
server 192.168.1.14:8087 weight=2;
}
server {
listen 8087; // 负载均衡 test2 使用的端口
proxy_pass test2; // 写成和负载均衡 test1 名称一样不加 http://.
}
}

检查配置

nginx -t
启动
nginx
使用 nginx 服务器的 IP 和相应配置的端口即可运行 .

负载均衡方式

nginx 的 upstream 目前支持的 5 种方式的分配
1 、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2 、 weight
指定轮询几率, weight 和访问比率成正比,用于后端服务器性能不均的情况。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3 、 ip_hash
每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4 、 fair (第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backserver {
server server1;
server server2;
fair;
}
5 、 url_hash (第三方)
按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
####################
upstream backserver{
ip_hash;
server 127.0.0.1:9090 down; (down 表示单前的 server 暂时不参与负载 )
server 127.0.0.1:8080 weight=2; (weight 默认为 1.weight 越大,负载的权重就越大 )
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup; ( 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器 )
}
max_fails :允许请求失败的次数默认为 1. 当超过最大次数时,返回 proxy_next_upstream 模块定义的错误。