0
点赞
收藏
分享

微信扫一扫

Nginx进阶篇(4)nginx七层负载均衡

芭芭蘑菇 2022-06-15 阅读 228

特点

1. 功能强大,性能卓越,运行稳定。

2. 配置简单灵活。

3. 能够自动剔除工作不正常的后端服务器。

4. 上传文件使用异步模式。client---nginx---web1 web2 web3  lvs同步请求 DR client -->dr---web1

5. 支持多种分配策略,可以分配权重,分配方式灵活。


优势

nginx复制用户请求,在后端服务器出现问题时。nginx会再复制一份请求发给另一台后端服务器。

lvs则在这种情况,只能用户重新发请求

缺点

流量会经过nginx,nginx成为瓶颈


生产架构

Nginx进阶篇(4)nginx七层负载均衡_linux


7层负载均衡语法

通过location对不同的请求进行进行负载均衡,因为通过http协议,所以称作7层

location  / {

}
location ~ \.html${
proxy_pass ...
}
location ~ \.php${
proxy_pass ...
}
location ~ \.(jpg|png|css|js)${
proxy_pass ...
}


nginx负载均衡算法

1.round robin(默认)

轮询方式,依次将请求分配到各个后台服务器中,默认的负载均衡方式。  

适用于后台机器性能一致的情况。  

挂掉的机器可以自动从服务列表中剔除。

2.weight

根据权重来分发请求到不同的机器中,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。  

例如:  
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}

3. IP_hash

根据请求者ip的hash值将请求发送到后台服务器中,可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

4.url_hash(第三方)

根据请求的url的hash值将请求分到不同的机器中,当后台服务器为缓存的时候效率高。

需要额外安装 nginx的upstream_hash模块

wget http://wiki.nginx.org/images/7/78/Nginx_upstream_hash-0.3.tar.gz

在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法  

upstream backend {    
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

5. fair(第三方)

根据后台响应时间来分发请求,响应时间短的分发的请求多。

upstream backend {    
server server1;
server server2;
fair;
}

每个设备的状态设置为: 

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进行匹配.可以进行重定向或者进行新的代理 负载均衡


案例

环境

client:client

nginx:nginx

apache:web1

apache:web1

1.关闭防火墙和selinux(略)

2.域名解析

3.同步时间(实验环境略)

4.准备web1/2页面

5.配置nginx

yum install -y epel-release
yum install -y nginx

vim /etc/nginx/ngxin.conf
upstream html {
server web1:80;
server web2:80;
}
server {

location / {
proxy_pass http://html;
}
}

6.测试负载均衡

访问nginx服务器。能交替的看到web1和web2

7.动静分离(略)

增加一个upstream php  server  web3

增加一个location ~ \.php {}

upstream html {
server web1:80;
server web2:80;
}
upstream php {
server web3:80;
server web4:80;
}
server {
location / {
proxy_pass http://html;
}
location ~ \.php$ {
proxy_pass http://php;
}
}

客户端测试

举报

相关推荐

0 条评论