nginx 反向代理
LVS负载均衡群集和Nginx反向代理的区别
LVS 其实现的功能只是对请求数据包的转发(也可能会改写数据包) , 传递 ,其中DR模式明显的特征是,从负载均衡下面的节点服务器来看,接收到的请求还是来自访问负载均衡器的客户端的真实用户,而反向代理服务器就不一样了,反向代理接收访问用户的请求后,会代理用户重新发起请求,请求代理下的节点服务器,最后把数据返回给客户端用户,在节点服务器看来,访问的节点服务器的客户端用户就是反向代理服务器了,而非真实的网站访问用户
一句话,LVS等负载均衡是转发用户请求的数据包,而Nginx反向代理是接收用户的请求然后重新发起请求去请求其后面的节点
nginx 负载均衡的组件模块
nginx http 模块 | 说明 |
ngx_http_proxy_module |
proxy代理模块,用于把请求后抛给服务器节点或upstream服务器池 |
ngx_http_upstream_module | 负载均衡模块,可以实现网站的负载均衡功能 |
upstream 模块
nginx的负载均衡模块功能依赖于ngx_http_upstream_module 模块,所支持的代理方式包括proxy_pass,fastcgi_pass,memcached_pass
ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器组,使用时可以通过proxy_pass 代理方式把网站的请求发送到事先定义好的对应upstream组的名字上,具体方法为 “proxy_pass http://www_server_pools”,其中www_server_pools就是一个Upstream节点服务器组的名字。
upstream 模块语法
upstream www_server_pools {
server 域名或ip地址t 参数 ;<===========server关键字是固定的 后面跟接域名,需要内网有dns服务器或者在负载均衡器的hosts文件做域名解析
server unix:/tmp/backend3 ; <============指定socket文件
}
upstream模块内部server标签参数说明
upstream模块内参数 | 说明 |
weight=1 | 代表服务器的权重,默认值是1。权重数字越大表示接受的请求比例越大 |
max_fails=1 | Nginx尝试连接后端主机失败的次数,这个数值是配合proxy_next_upstream,fastcgi_next_upstream和memcached_next_upstream 这个三个参数来使用的,当Nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如 104 ,502,503。Max_fails默认值为1;企业场景下建议2~3次 |
backup | 热备配置(RS节点的高可用),当前面激活的RS都失败后会自动启用热备RS。这标志着这个服务器作为备份服务器,若主服务器全部宕机了,就向它转发请求;注意,当负载调度器算法为IP_hash时,后端服务器 在负载均衡调度中的状态不能是 Weight和backup |
fail_timeout=10s | 在max_fails定义的失败次数后,距离下次检查的间隔时间,默认10s;如果max_fails是5,它就会检测5次,如果5次都502。那么,它就会根据fail_timeout的值,等待10s再去检查,还是只检查一次,如果持续是502,在不重新加载nginx配置的情况下,每隔10s都只检测一次。常规业务2-3秒比较合理 |
down | 这标志着服务器永远不可用,这个参数可配合ip_hash使用 |
upstream 模块调度算法
调度算法一般分为两类,第一类为静态调度算法,就负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器的情况,例如:rr,wrr,ip_hash
第二类为动态调度算法,既负载均衡器会根据后端节点的当前状态来决定是否分发请求,例如:连接数少的优先获得请求,响应时间短的优先获得请求,例如:least_conn,fair
rr轮询(默认调度算法,)
按客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于LVS的rr算法,如果后端节点宕机(默认情况下Nginx只检测80端口),宕机的服务器会被自动从节点服务器池中剔除,以使客户端的用户访问不受影响。新的请求会分配给正常的服务器