分类
1、轮询法
轮询法,就是将用户的请求轮流分配给服务器,就像是挨个数数,轮流分配。这种算法比较简单,他具有绝对均衡的优点,但是也正是因为绝对均衡它必须付出很大的代价,例如它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
2、随机法
随机法,是随机选择一台服务器来分配任务。它保证了请求的分散性达到了均衡的目的。同时它是没有状态的不需要维持上次的选择状态和均衡因子[5]。但是随着任务量的增大,它的效果趋向轮询后也会具有轮询算法的部分缺点。
3、最小连接法
最小连接法,将任务分配给此时具有最小连接数的节点,因此它是动态负载均衡算法。一个节点收到一个任务后连接数就会加1,当节点故障时就将节点权值设置为0,不再给节点分配任务。
最小连接法适用于各个节点处理的性能相似时。任务分发单元会将任务平滑分配给服务器。但当服务器性能差距较大时,就无法达到预期的效果。因为此时连接数并不能准确表明处理能力,连接数小而自身性能很差的服务器可能不及连接数大而自身性能极好的服务器。所以在这个时候就会导致任务无法准确的分配到剩余处理能力强的机器上
官方示例配置及解释
upstream backend { server backend1.example.com weight=5; server backend2.example.com:8080; server unix:/tmp/backend3; server backup1.example.com:8080 backup; server backup2.example.com:8080 backup; } server { location / { proxy_pass http://backend; } }
upstream:模块 不允许修改 backend:名称 可修改,我使用带有“_”的符号名字,会报400,原因不知。 server backend1.example.com: 写监听的域名或者ip weight:权重,权重越大,分发到的任务越多,本文不做说明,其实这个是不需要写的,upstream 模块默认就是轮询法,每个ip分发一次。当然如果你的某个服务器配置高、负载低的机器则配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题 server unix:/tmp/backend3:可以使用socket server backup1.example.com:8080 backup:热备,nginx自带的高可用,当上面监听的 两个服务器都挂掉了,就由热备的提供服务。 proxy_pass http://backend: 使用负载均衡
具体的nginx负载均衡配置
首先搭建4台虚拟机,这里我的虚拟机ip分别是
192.168.56.101(主服务器)
192.168.56.3
192.168.56.4
192.168.56.5(热备服务器)
具体思路:将 192.168.56.101 作为代理服务器,在这台服务器上进行负载均衡的配置。浏览器访问 192.168.56.101,会被自动分配到 192.168.56.3、192.168.56.4 这两台服务器上;其中热备服务器是当监听的192.168.56.3、192.168.56.4 这两个服务器都挂掉了,就由热备服务器提供服务。
1.打开nginx配置文件
[root@localhost ~]# vi /etc/nginx/nginx.conf
我们使用 nginx 中的 upstream模块 来实现nginx将跨越单机的限制,完成网络数据的接收、处理和转发。
在server 之前加上 upstream 模块,后面的域名随便写(最好有意义)。
upstream testserver1{ server 192.168.56.4; #监听ip或者域名 server 192.168.56.3; #监听ip或者域名 server 192.168.56.5 backup;#热备,当监听的服务器挂掉的时候就由这台提供服务 } server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location / { proxy_pass http://testserver1; #这里要和 upstream 后的保持一致 }
2.保存重启nginx
sudo nginx -s reload
3.测试
为了方便测试我们可以先将 192.168.56.101、192.168.56.3、192.168.56.4、192.168.56.5 四台服务器的根目录中的 index.html 中的内容改为对应的ip地址, 比如 我将 192.168.56.101 的 index.html 改为了 <h1> 192.168.56.101 </h1>。
当我们在浏览器中访问 192.168.56.101 时会看到内容随机变化。
4.测试热备服务器
我们将监听的 192.168.56.3、192.168.56.4 两台服务器手动关掉
nginx -s stop
再次刷新页面 192.168.56.101 会看到
证明热备服务器起了作用。
补充:
ip_hash(使用于保持会话):对访问用户的IP进行hash后的结果进行分配,这样每一个用户固定请求同一个后端服务器,能够解决session的问题。
upstream testserver1{
ip_hash;
server 192.168.56.4;
server 192.168.56.3; #监听ip或者域名
#server 192.168.56.5 backup; ip_hash 不支持热备,需要删除
}
fair法(非官方)
这个fair表示的是按照服务器响应时间的长短来进行分发的,服务器响应时间越短的,优先分发。
upstream testserver1 { server 192.168.56.4; server 192.168.56.3; fair; }