Nginx实现负载均衡的简单案例

七层负载均衡的实现(Nginx):
基于URL等应用层信息的负载均衡,一般使用Nginx来实现
Nginx的proxy是它一个很强大的功能,实现了7层负载均衡
功能强大、性能卓越、运行稳定
配置简单灵活
能够自动剔除工作不正常的后端服务器
上传文件使用异步模式
支持多种分配策略,可以分配权重,分配方式灵活
 
1.Nginx负载均衡:
内置策略:IP Hash、加权轮询
扩展策略:fair策略、通用hash、一致性hash
(1)加权轮询策略
首先将请求都分给高权重的机器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器。
当所有后端机器都down掉时,Nginx会立即将所有机器的标志位清成初始状态,以避免造成所有的机器都处在timeout的状态
(2)IP Hash 策略
Nginx内置的另一个负载均衡的策略,流程和轮询很类似,只有其中的算法和具体的策略有些变化
IP Hash 算法是一种变相的轮询算法
(3)fair策略
根据后端服务器的响应事件判断负载情况,从中选出负载最轻的机器进行分流
(4)通用Hash、一致性Hash策略
通用hash比较简单,可以以Nginx内置的变量为key进行hash,一致性hash采用Nginx内置的一致性hash环,支持memcache
 
2.Nginx配置:
http{
    upstream cluster{
        server srv1;
        server srv2;
        server srv3;
    }
    server {
        listen 80;
        location /{
            proxy_pass http://cluster;
        }
    }
}
 
四层负载均衡的实现(LVS/硬件设备):
LVS实现服务器集群负载均衡有三种方式:NAT、DR、TUN。
硬件设备:通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器
 
-----------------------------------------------------
Nginx配置负载均衡的具体实现:
示例中使用单台机器模拟出多个端口:
server {
        listen 8090;
        server_name  localhost;
        location / {
            root   /Users/me/www;
            index  index.html index.htm index.php;
            add_header MY_HEADER 8090; #自定义一个返回头信息标明当前端口
        }
    }
    server {
        listen 8091;
        server_name  localhost;
        location / {
            root   /Users/me/www;
            index  index.html index.htm index.php;
            add_header MY_HEADER 8091;
        }
    }
    server {
        listen 8092;
        server_name  localhost;
        location / {
            root   /Users/me/www;
            index  index.html index.htm index.php;
            add_header MY_HEADER 8092;
        }
    }

此时访问其中一个端口,查看返回头信息:

这样就相当于模拟出来了3台机器。
 
在server的上面,增加如下内容:
upstream rx_cluster {
    server 127.0.0.1:8090;
    server 127.0.0.1:8091;
    server 127.0.0.1:8092;
}
在server的80端口的location / 部分,增加如下内容:
location / {
     #80端口的负载均衡配置,反向代理到上面定义的rx_cluster
     proxy_pass http://rx_cluster;
}
然后重启nginx。
此时访问80端口,会发现在返回头信息里面随机的分配到了自定义的header头信息:MY_HEADER,会随机的轮询到8090、8091、8092.
如此一来,Nginx的负载均衡就配置完成了。
 
当然,我们也可以针对多台服务器设置权重(weight=数值),权重越高的机器被轮询到的几率和优先级越高:
upstream rx_cluster {
     server 127.0.0.1:8090 weight=10;
     server 127.0.0.1:8091 weight=20;
     server 127.0.0.1:8092 weight=30;
} 

 

posted @ 2019-04-25 22:24  码农骆驼  阅读(259)  评论(0编辑  收藏  举报