nginx是一款开源的高性能开源代理服务器,常用于http代理、反向代理、负载均衡以及web缓存。从应用方式和场景可以看出nginx常常作为服务端系统架构最为重要的一个中间件之一,同样nginx也可能会存在性能瓶颈导致服务端整体性能问题
nginx作为中间件主要作用就是负责对请求进行分发从而起到负载均衡作用,nginx自带四种负载均衡策略分别是:轮询 、weight、ip_hash、least_conn,以及两种第三方策略fair和url_hash。nginx默认的负载均衡策略为轮询
● 以下是一个nginx部分配置,主要看upstream部分(nginx负载均衡通过配置upstream来实现请求转发)其他可忽略,在upstream中如果没有指定任何策略时,nginx会自动执行轮询策略来对请求进行转发到两台服务器上。
● nginx会检查upstream中配置的服务器是否挂掉,如果检测到服务器挂掉则会从轮询中剔除。当然也可以手动配置轮询策略的辅助参数来自定义服务挂掉的标准(fail_timeout、max_fails、down)
upstream ysc_m_sw_server { server 10.8.0.6:8081; server 10.8.0.4:8081; } server { server_name ysc.m.sw.com; ........
轮询策略调优问题:
轮询策略按照请求数量平均转发到upstream中配置的服务器,各服务器处理的请求数量基本一致
潜在问题①:服务器之间如果存在硬件配置差异,会导致配置低的服务器负载过高
潜在问题②:请求中如果处理时间较长(资源占用高)的请求集中到某一台服务器,也会导致该服务器负载过高
● 权重策略是通过对upstream中的server配置指定权重参数weight来实现按权重比例转发请求
● 权重策略通常用在服务器存在配置差异时低配置服务器负载过高情况
upstream ysc_m_sw_server { # 6配置较高服务器,weight权重更高,4服务器配置相对低权重配置较低 server 10.8.0.6:8081 weight=5; server 10.8.0.4:8081 weight=4; } server { server_name ysc.m.sw.com; ........
● ip_hash策略原理是:按每个请求原始访问ip的hash来进行请求转发,而同一ip的hash不会发生改变所以每个固定客户端的请求只会访问一个后端应用服务器
● ip_hash策略解决了多个应用服务器之间session不同步的问题
upstream ysc_m_sw_server { ip_hash; server 10.8.0.6:8081; server 10.8.0.4:8081; } server { server_name ysc.m.sw.com; ........
ip_hash策略调优问题:
ip_hash的原理为同一ip的请求都转发到同一台服务器上
潜在问题:ip_hash策略下后端服务器负载很难相同,所以可能造成在某台服务器负载过高