负载均衡,英文Load Banlance。是一种建立在现有服务器结构上提供多台服务器负载分配的一个单元。我们常见的负载均衡一般都是基于Nginx来配置的。最近由于给某大型线下交易平台做负载均衡,所以有幸用自己的实践来写一篇笔记。
第一种配置:轮询
轮询是负载均衡中的默认配置,所以如果大家不格外去设置的话,当用户请求服务器时负载均衡会按照默认顺序检查负载状态,分配给合适的服务器来响应。
第二种配置:weight(权重)
这种情况一般适用于服务器配置不均的情况下,我们可以通过weight来设置优先提供服务的服务器。简单配置代码可参考:
- upstream bakend {
- server 192.168.0.14 weight=10;
- server 192.168.0.15 weight=10;
- }
第三种配置:ip_hash
ip_hash是根据客户端IP的哈希值来固定为用户分配服务器的一种方案。这种方案可以很好的避免用户请求过程中由于响应服务器不同而导致的session问题。
- upstream bakend {
- ip_hash;
- server 192.168.0.14:88;
- server 192.168.0.15:80;
- }
第四种配置:fair
fair是由第三方提供的一种均衡解决方案。主要通过后端服务器的响应时间来优先为用户分配服务器。
- upstream backend {
- server server1;
- server server2;
- fair;
- }
第五种配置:url_hash
url_hash也是由第三方提供的一种均衡解决方案。按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
- upstream backend {
- server squid1:3128;
- server squid2:3128;
- hash $request_uri;
- hash_method crc32;
- }
补充资料:
- upstream bakend{#定义负载均衡设备的Ip及设备状态
- ip_hash;
- server 127.0.0.1:9090 down;
- server 127.0.0.1:8080 weight=2;
- server 127.0.0.1:6060;
- server 127.0.0.1:7070 backup;
- }
在需要使用负载均衡的服务器上配置
- proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
nginx支持同时设置多组的负载均衡,用来给不用的server来使用。
client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡