多台Web服务器水平扩展,进行负载均衡对外服务,是一种很常见的方案。
常用方法用DNS轮询,LVS。
DNS轮询虽然有配置简单的有点,但无法实现健康检查,DNS修改需要较长时间失效,对于无域名的内部服务需要手动修改客户端hosts。
LVS实现功能强大,可配置项多,能实现会话保持,但消耗机器数多,不适合中型和小型项目。
其实Nginx也能实现负载均衡,而且配置简单,通过ip_hash也能实现会话保持。
配置方法:
1.轮询:
此种配置最为简单也最为常用,请求将会依次交给不同的服务器处理,但无法实现会话保持。
upstream 配置名称 { server 192.168.1.1:8080; # 服务器A server 192.168.1.2:8090; # 服务器B server 192.168.1.3:8100; # 服务器C }
2.权重
此种配置适用于多台服务器配置有高低之分,需要根据实际配置情况分配请求,此方法依然无法实现会话保持。
#weight越大,处理请求的次数则越多,实际值=weight/sum(weight) * 总请求数 upstream 配置名称 { server 192.168.1.1:8080 weight=10; # 服务器A server 192.168.1.2:8090 weight=20; # 服务器B server 192.168.1.3:8100 weight=20; # 服务器C }
3.ip_hash
此配置根据ip的hash值决定处理请求的服务器,所以同一ip多个请求将交给同一服务器处理,这种方法可以解决会话保持的问题。
upstream 配置名称 { ip_hash; # 使用ip_hash方法 server 192.168.1.1:8080; # 服务器A server 192.168.1.2:8090; # 服务器B server 192.168.1.3:8100; # 服务器C }
4.其他方法
籍由第三方扩展,Nginx还可以实现多种负载均衡算法,例如:url_hash、fair等等,由于实际使用较少,在此不一一赘述。
5.应用负载均衡
server { listen 80; location / { root html; proxy_pass http://配置名称; index index.html index.htm; } }
注意:请不要在upstream中设置的服务器上添加proxy_pass,否则会出现死循环,导致请求失败。
6.更多的upstream配置选项
#weight 默认为1,值越大权重越大,处理请求次数越多 #down 该服务器不会被转发请求 #backup 该服务器用于备份,只有其他服务器都失效时才使用 #max_fails 允许的最大失败次数 #fail_timeout 达到最大失败次数后,暂停处理请求的时间,单位:秒
时间: 2024-10-13 02:22:37