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;
}
本文来自博客园, 作者:Star-Hitian, 转载请注明原文链接:https://www.cnblogs.com/Star-Haitian/p/16345615.html