史上最详细的Nginx负载均衡教程

演示说明:

主服务器:39.106.208.11

从服务器1:47.92.150.11

从服务器2:121.42.199.98

同步服务器件文件采用rsync+inotify同步服务器文件,下篇文章中介绍。

1、安装nginx,很简单,这里就不多介绍了,建议源码安装。

2、配置nginx

1》反向代理

server{

listen 80;

location / {

proxy_store off;

proxy_redirect off;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header Host $http_host;

}

}

2》负载均衡

1)轮播模式(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

http{

server 47.92.150.116:80;

server 121.42.199.98:80;

}

}

2)weight模式

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

http{

server 47.92.150.116:80weight=10;

server 121.42.199.98:80 weight=5;

}

}

3)ip_hash模式

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

http{

ip_hash;

server 47.92.150.116:80;

server 121.42.199.98:80;

}

}

4)fair模式(第三方软件)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。由于采用fair负载策略,配置weigth参数改变负载权重将无效。

需要下载编译fair软件(https://github.com/gnosek/nginx-upstream-fair)

http{

fair;

server 47.92.150.116:80;

server 121.42.199.98:80;

}

}

5)url_hash模式(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法,剩下参数自己查阅。

http{

server 47.92.150.116:80;

server 121.42.199.98:80;

hash $request_uri;

hash_method crc32;

}

}

每个设备的状态设置为:

1.down 表示单前的server暂时不参与负载

2.weight 默认为1.weight越大,负载的权重就越大。

3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

4.fail_timeout:max_fails次失败后,暂停的时间。

5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

6.max_conns:限制分配给某台Server处理的最大连接数量,超过这个数量,将不会分配新的连接给它。默认为0,表示不限制。注意:1.5.9之后的版本才有这个配置。

7.resolve:将server指令配置的域名,指定域名解析服务器。

需要在http模块下配置resolver指令,指定域名解析服务。

http{

resolve 192.168.0.2:80;

server 192.168.0.1:80 max_conns=1000;

server 192.168.0.1:80 down;

server 192.168.0.1:80 weight=10 max_fails=3 fail_timeout=15;

server 192.168.0.1:80backup;

server 192.168.0.1:80 resolve;

}

}

配置忘不要忘记重启nginx服务器!!!!

3》演示(默认的轮训模式,其他模式自行测试)

第一次请求

第二次请求

第三次请求

第四次请求

同步服务器件文件采用rsync+inotify同步服务器文件,下篇文章中介绍。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180527G0ER6N00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

扫码关注腾讯云开发者

领取腾讯云代金券