官网:http://nginx.org/en/docs/http/ngx_http_upstream_module.html
upstream模块介绍
Nginx的负载均衡功能依赖于ngx_http_upstream_module,支持的代理方式有proxy_pass(设置一个代理服务器), fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass(设置memcached服务器地址), 和 grpc_pass 指令引用的服务器组;
upstream模块调度算法
1)rr轮询(默认)
服务器将每个前端请求按顺序(时间顺序和排列次序)逐一分配到不同的后端服务器节点。如果后端服务器出现问题,即down掉,那么就会被自动剔除。
2)权重(weight)
在基本的轮询策略基础上考虑各后端服务器节点接受请求的权重,指定各后端服务器节点被轮询到的机率,主要应用于后端服务器节点性能不均的情况。
3)ip_hash
每个请求按访问ip的hash结果分配,当新的请求到达时,先将其客户端ip通过哈希算法哈希出一个值,再根据哈希值分配后端服务器,只有哈希值相同,就会被分配到同一台服务器,该算法可以解决动态网页session共享问题,但可能会导致请求分配不均。
4)最小连接(least_conn)
最少连接数,哪个机器连接数少就分发到哪个机器。
5)fair(第三方)动态算法
按照后端服务器的响应时间来分配请求,响应时间短的优先分配。
6)url_hash(第三方)
按访问url的hash结果来分配请求,让每个url定向到同一个后端服务器,后端服务器为缓存服务器时效果显著。
nginx.conf配置说明
[root@k8smaster conf]# more nginx.conf
worker_processes 1;
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
http {
include mime.types; #设定mime类型,类型由mime.type文件定义
default_type application/octet-stream;
sendfile on; #sendfile指令指定nginx是否调用sendfile函数(zero copy方式)来输出文件,对于普通应用,必须设为on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime。
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://webs;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) / 在连接断开之前两次发送至upstream server的写操作的最大间隔时长;
proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)/ 在连接断开之前两次从接收upstream server接收读操作的最大间隔时长;
proxy_buffer_size 4k; #设置缓冲区的大小,默认该缓冲区大小等于指令proxy_buffers设置的大小
proxy_buffers 4 32k; #设置缓冲的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置到缓冲区
proxy_busy_buffers_size 64k; #用于设置系统很忙时可以使用的proxy_buffers大小,官方推荐的大小为proxy_buffers*2
proxy_temp_file_write_size 64k; #设定缓存临时文件的大小
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream webs {
ip_hash; #用户请求ip通过哈希算法,自动定位到后端服务器。这样使一样ip的用户固定访问一个后端服务器,可以解决session的问题。
server 192.168.23.101:80 weight=5 max_conns=100;
#weigth参数表示权值,权值越高被分配到的几率越大
#max_conns最大并发活动连接数;默认值为0时,意味着没有限制
server 192.168.23.102:99 down; #down手动标记其不再处理任何请求
server 192.168.23.102:80 weight=5 max_fails=2 fail_timeout=30s backup;
#max_fails最大尝试失败次数,默认值为1,0表示禁止失败尝试,失败连接的超时时长由fail_timeout指定
#fail_timeout失败超时时间,默认值为10秒
#backup将服务器标记为备份服务器,当主服务器不可用时,将会接收请求
}
}