Nginx 负载均衡

Nginx 负载均衡模块说明

  • ngx_http_proxy_module :proxy 代理模块,用于把请求后抛给服务器节点或 upstream 服务器池。
  • ngx_http_upstream_module: 负载均衡模块,可以实现网站的负载均衡功能及节点的健康检查。节点检查,默认基于端口探测

Nginx 负载均衡配置

安装ngx

# 安装nginx
yum -y install gcc pcre-devel zlib-devel
yum install openssl openssl-devel -y

  # - gcc: 源码编译工具 
  # - pcre-devel: nginx url_rewrite 功能提供包 
  # - zlib-devel: nginx 压缩功能提供包


useradd -u 1111 -s /sbin/nologin nginx -M
ngx_version='nginx-1.19.3'
wget http://nginx.org/download/${ngx_version}.tar.gz -P /usr/src
cd /usr/src
tar xf nginx-1.19.3.tar.gz
cd nginx-1.19.3/
./configure --user=nginx --group=nginx --prefix=/usr/local/${ngx_version}/ --with-http_stub_status_module --with-http_ssl_module --with-pcre
make -j2 && make install 
ln -s /usr/local/${ngx_version} /usr/local/nginx
/usr/local/nginx/sbin/nginx

模块说明:https://nginx.org/en/docs/http/ngx_http_upstream_module.html

负载均衡简单配置

# 负载均衡器配置
# upstream:模块 负载均衡池
# backend:负载均衡池的名称
# weight 权重;一共6个请求,分发给.1 一个,分发给.2 五个;
upstream backend {
    server 10.0.0.1:80      weight=1;
    server 10.0.0.2:80      weight=5;
}

# server 标签
# / 默认请求,分发给 backend 负载均衡池池;
server {
    listen    80;
    server_name    aaa.com; 
    location / {
        proxy_pass http://backend;
    	# 默认 反向代理 向后请求,请求头中不携带 host,后端节点机有多个虚拟主机时的关键配置;
    	# set_header 往后转发,请求头增加 host 字段
    	proxy_set_header Host $host;
    	# 向后请求时设置 X-Forwarded-For 为 $remote_addr;这样后端在请求头中就可以根据 X-Forwarded-For 获得客户端ip
        proxy_set_header X-Forwarded-For $remote_addr;

    }
}

upstream 讲解

ngx_http_upstream_module
官方地址:https://nginx.org/en/docs/http/ngx_http_upstream_module.html

Server 标签 参数说明
server 10.0.10.8:80 负载均衡后面的 RS 配置,可以是 P 或域名,如果端口不写,默认是 80 端口。高并发场景下,P 可换成域名,通过 DNS 做负载均衡。
weight=1 代表服务器的权重,默认值是 1。权重数字越大表示接受的请求比例越大。
max_fails=1 Ngx 尝试连接后端主机失败的次数,这个数值是配合 proxy_next_upstream, fastcg_next_upstream 和 memcached_next_upstream 这三个参数来使用的,当 Nginx 接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如 404、502、503。Max_fails 的默认值是 1; 企业场景:建议 2-3 次。京东 1 次,蓝汛 10 次,根据业务需求去配置。
backup 热备配置(S 节点的高可用),当前面激活的 RS 都失败后会自动启用热备 S。这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求;注意,当负载调度算法为 ip hash 时,后端服务器在负载均衡调度中的状态不能是 weight 和 backup。
fail_timeout=10s 在 max_fails 定义的失败次数后,距离下次检查的间隔时间,默认是10s;如果 max fails 是 5,它就检测 5 次,如果 5 次都是 502。那么,它就会根据 fail_timeout 的值,等待 10s 再去检查,还是只检查一次,如果持续502,在不重新加载nginx配置的情况下,每隔10s都值检测一次。常规业务2-3秒比较合理,比如京东3s,蓝汛3s,可根据业务需求去配置
down 这标志着服务器永远不可能用,这个参数可配合 ip_hash 使用。

提示:以上的参数和专业的haproxy参数很类似,但是不如haproxy的参数易懂。

upstream 配置案例

# nginx upstream 默认会监测节点状态,把不好的节点,踢出去
upstream blog_server_pool {
    server 10.0.0.1;	# 这一行和下一行是等价的
    server 10.0.0.2:80 weight=1 max_fails=1 fail_timeout=10s;	# 这一行标签和上一行是等价的,慈航多余的部分就是默认配置,不写也可以;
    # server 10.0.0.3:80 weight=1 max_fails=2 fail_timeout=20s backup;
}
posted @ 2022-06-05 23:35  Star-Hitian  阅读(28)  评论(0编辑  收藏  举报