nginx七层和四层负载均衡

1420人浏览 / 0人评论

一、四层负载均衡和七层负载均衡的区别

四层负载均衡:
所谓四层负载均衡指的是OSI七层模型中的传输层,那么传输层Nginx已经能支持TCP/IP的控制,所以只需要对客户端的请求进行TCP/IP协议的包转发就可以实现负载均衡,那么它的好处是性能非常快、只需要底层进行应用处理,而不需要进行一些复杂的逻辑。
 
七层负载均衡:
七层负载均衡它是在应用层,那么它可以完成很多应用方面的协议请求,比如我们说的http应用的负载均衡,它可以实现http信息的改写、头信息的改写、安全应用规则控制、URL匹配规则控制、以及转发、rewrite等等的规则,所以在应用层的服务里面,我们可以做的内容就更多,那么Nginx则是一个典型的七层负载均衡SLB。
 
二、七层负载均衡
调度算法:
轮询            按时间顺序逐一分配到不同的后端服务器(默认)
weight         加权轮询,weight值越大,分配到的访问几率越高
ip_hash       每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn  最少链接数,那个机器链接数少就分发  

 weight使用

upstream load_pass {
server 10.0.0.7:80 weight=5;
server 10.0.0.8:80 weight=2;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}

 ip_hash使用

upstream load_pass {
ip_hash;
server 10.0.0.7:80 ;
server 10.0.0.8:80 ;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}

 url_hash使用

upstream load_pass {
url_hash;
server 10.0.0.7:80 ;
server 10.0.0.8:80 ;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}

least_conn;使用

upstream load_pass {
least_conn; 
server 10.0.0.7:80 ;
server 10.0.0.8:80 ;
}
location / {
proxy_pass http://load_pass;
include proxy_params;
}

后端状态:

down             当前的server暂时不参与负载均衡
backup          预留的备份服务器
max_fails        允许请求失败的次数
fail_timeout   经过max_fails失败后, 服务暂停时间
max_conns     限制最大的接收连接数

 非企业使用案例

upstream load_pass {
server 10.0.0.7:80 down;
server 10.0.0.8:80 backup;
server 10.0.0.9:80 max_fails=1 fail_timeout=10s;
}

 

 

三、四层负载均衡

1.四层+七层来作负载均衡,4层可以保证7层的负载均衡的高可用性。如:nginx
就无法保证自己的服务高可用,需要依赖lvs或者keepalive来作。
2.四层来作负载均衡,如:tcp协议的负载均衡,有些请求是TCP协议的,或者说
这些请求只需要作到4层就可以了,所以使用4层负载均衡
配置语法
[root@lb01 conf.c]# cat stream.conf
stream {
#1.定义虚拟资源池
log_format proxy '$remote_addr - [$time_local] $status $protocol'
'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
#调用日志,使用proxy格式
access_log /var/log/nginx/tcp_proxy.log proxy;
upstream ssh {
server 172.16.1.7:22;
}
upstream mysql {
server 172.16.1.51:3306;
}
#2.调用虚拟资源池
server {
listen 5555;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass ssh;
}
server {
listen 6666;
proxy_connect_timeout 1s;
proxy_timeout 300s;
proxy_pass mysql;
}
}

全部评论