背景

当一个网站从小到大,访问量逐渐增大现有的服务器已经支撑不住,一般的解决方案就是缓存、加服务器、数据库读写分离、实行负载均衡分布式等等,本人对这些技术方案都没有在项目中具体的实践过,
但是一直听同事过说起,利用空闲时间自我学习了解下;

负载均衡

什么是负载均衡,就是当快要承受不住的时候,又给你一台服务器来分担压力,请求会分配到两台服务器上,两台服务器上部署相同的内容相当于一个分身,可以处理相同的事情;
Nginx作为负载均衡服务器,用户请求先到达nginx,再由nginx根据负载配置将请求转发至不同的Web服务器
image.png

Nginx配置文件

1) 从Nginx官网下载 http://nginx.org/en/download.html
2) 安装Nginx,并找到nginx.conf文件(C:\nginx\conf\nginx.conf);
在http中加入配置:

  1. 加权轮询,按服务器的性能给予权重,本例是1:2分配
  2.   upstream www.woizuqiu.com {
  3.    server 192.168.1.1:8080 weight=1;
  4. server 192.168.1.1:8090 weight=2;
  5. }
  6.   ip_hash轮询方法,不可给服务器加权重,nginx会让相同的客户端ip请求相同的服务器
  7.   upstream www.woizuqiu.com {
  8.     server 192.168.1.1:8080;
  9.     server 192.168.1.1:8090 max_fails=3 fail_timeout=30s ;
  10.    ip_hash;
  11.    }
  12. fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。
  13. upstream backend {
  14. server server1;
  15. server server2;
  16. fair;
  17. }
  18. url_hash(第三方)按访问urlhash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
  19. 例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
  20. upstream backend {
  21. server squid1:3128;
  22. server squid2:3128;
  23. hash $request_uri;
  24. hash_method crc32;
  25. }
  26. tips:
  27. upstream bakend{#定义负载均衡设备的Ip及设备状态
  28. ip_hash;
  29. server 127.0.0.1:9090 down;
  30. server 127.0.0.1:8080 weight=2;
  31. server 127.0.0.1:6060;
  32. server 127.0.0.1:7070 backup;
  33. }

根据服务器的本身的性能差别及职能,可以设置不同的参数控制。

每个设备的状态设置为:
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进行匹配.可以进行重定向或者进行新的代理 负载均衡

server配置如下:

  1. 在需要使用负载均衡的server中增加 proxy_pass http://bakend/;
  2. server {
  3. listen 80;
  4. server_name www.woizuqiu.com;
  5. #charset koi8-r;
  6. #access_log logs/host.access.log main;
  7. location / {
  8. add_header backendIP $upstream_addr;#被转发到的上游服务器地址
  9. add_header backendCode $upstream_status;#状态码
  10. proxy_pass http://www.woizuqiu.com;
  11. proxy_set_header Host $host;
  12. proxy_set_header X-Real-IP $remote_addr;
  13. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  14. }
  15. }

1.查看Nginx版本:
C:\nginx>nginx -v

2.启动Nginx:
C:\nginx>start nginx
启动Nginx需要占用80端口,常见错误:bind() to 0.0.0.0:8080 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions),需要把系统的80端口关掉,
检查端口:netstat -aon | findstr :80

3.判断Nginx是否启动:
tasklist /fi “imagename eq nginx.exe”
image.png
4.停止:
C:\nginx>nginx.exe -s stop

5.重新载入Nginx:
C:\nginx>nginx.exe -s reload