单机版nginx负载均衡实现

同时开启多个tomcat

1:http://127.0.0.1:8080

2:http://127.0.0.1:8081

3:http://127.0.0.1:8082

 

执行命令 :   vim /usr/local/nginx/conf/nginx.conf  修改一下内容

server {
listen 8080;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
# root html;
# index index.html index.htm;
proxy_pass http://myServer;
}

}

#这里把upstream放到server模块外边
upstream myServer{
server 127.0.0.1:8081;
server 127.0.0.1:8080;
server 127.0.0.1:8082;
}

 轮询过程中,网页端请求的资源也是轮询状态,需要指定目录避免轮询次数过多

 

按权重轮询(weight roundribbon)

根据服务器性能不同,让不同的服务承载不同的访问量。解决服务器性能差异问题。

具体实现:

weight  配置取值返回从1-255 数据越大,权重越大,默认值为1

 

upstream myServer{
server 127.0.0.1:8081 weight=10;
server 127.0.0.1:8080;
server 127.0.0.1:8082 weight=20;
}

 

重启nginx

 /usr/local/nginx/sbin/nginx  -s reload

 
 

ip_hash算法

一旦配置ip_hash算法,就会按照客户端IP进行hash运算,运算结果对总的服务数量取余,余数是几,就会跳转到该服务,并且以后的所有请求在同一IP时,都会请求到该服务。(在轮询或者权重轮询的基础上)。解决session不共享问题的。

upstream myServer{

ip_hash;

server 127.0.0.1:8081 weight=10;
server 127.0.0.1:8080;
server 127.0.0.1:8082 weight=20;
}

 

least_conn算法

最少连接:将请求分配到连接数最少的服务上

upstream webhost {

 

 

least_conn;

 

 

server localhost:8080 weight=1;

 

 

server 192.168.14.133:8080 weight=1;

 

 

server 192.168.14.134:8080 weight=2;

 

 

}

 

 

 

 

fair算法

 

 

根据响应时间分配

upstream webhost {

 

 

fair;

 

 

server localhost:8080 weight=1;

 

 

server 192.168.14.133:8080 weight=1;

 

 

server 192.168.14.134:8080 weight=2;
 

 

 

}

 

 

*******************************************************************************************************************************************************************************************************************

 

集群

#三台服务器集群
upstream jinsh {
        server 192.168.10.125:8080;
        server 192.168.10.126:8080;
        server 192.168.10.127:8080;
}

#当浏览器每次访问 http://www.jinsh.com 时,将会以轮询的形式访问上面的三台服务器
server {
        listen 80;
        server_name www.jinsh.com;

        location / {
                proxy_pass http://jinsh;
        }

}
CSS 复制 全屏
  • 负载均衡 轮询与加权
#使用weight来配置权重,weight值越大该台服务器接受请求会越多
#不加weight,默认是按轮询的方式挨个接收请求的
upstream jinsh {
        server 192.168.10.125:8080 weight=5;
        server 192.168.10.126:8080 weight=2;
        server 192.168.10.127:8080 weight=1;
}
  • 负载均衡 ip_hash
    算法:hash(ip) % node_counts = index
    ip_hash 可以保证用户访问可以请求到上游服务中的固定的服务器,前提是用户ip没有发生更改。
    使用ip_hash的注意点:不能把后台服务器直接移除,只能标记down
upstream tomcats {
        ip_hash;

        server 192.168.1.173:8080;
        server 192.168.1.174:8080 down;
        server 192.168.1.175:8080;
}

参考:http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash

  • 哈希算法与一致性哈希算法

    • 哈希算法:hash(ip) % node_counts = index
      ip_hash会取IP地址的前三段进行计算,所以同一内网下的计算机将会请求到同一个节点。
      哈希算法的问题:当服务器节点数发生变动时,算计的计算将发生改变。
      image
    • 一致性哈希算法:
      当服务器节点数发生变动时,只会影响到变动节点上的用户请求。
      image
  • 负载均衡 url_hash
    算法:hash(url) % node_counts = index
    根据请求的 url 来分配响应节点

upstream tomcats {
        # url hash
    	hash $request_uri;

        server 192.168.1.173:8080;
        server 192.168.1.174:8080 down;
        server 192.168.1.175:8080;
}
  • 负载均衡 least_conn
    根据最少连接数去分配,哪个节点连接数最少就分配给哪个节点
upstream tomcats {
    least_conn;

    server 192.168.1.173:8080;
    server 192.168.1.174:8080;
    server 192.168.1.175:8080;
}

upstream指令参数

  • max_conns:限制每台server的连接数,用于保护避免过载,可起到限流作用。
#如果此时worker进程数配置的是1,那么该集群同一时刻就只能处理6个请求
upstream jinsh {
        server 192.168.10.125:8080 max_conns=2;
        server 192.168.10.126:8080 max_conns=2;
        server 192.168.10.127:8080 max_conns=2;
}
  • slow_start:让服务器缓慢加入到集群中来
upstream tomcats {
        server 192.168.1.173:8080 weight=6 slow_start=60s;
        server 192.168.1.174:8080 weight=2;
        server 192.168.1.175:8080 weight=2;
}
#该参数不能使用在hash和random load balancing中
#如果在upstream中只有一台server,则该参数失效
  • down:标识某台服务器不可用
upstream tomcats {
        server 192.168.1.173:8080 down; #这台服务器将无法访问
        server 192.168.1.174:8080 weight=2;
        server 192.168.1.175:8080 weight=2;
}
  • backup:标识某台服务器为备用机
upstream tomcats {
        server 192.168.1.173:8080 backup; #当下面两台服务器都无法访问时,请求才会访问到这一台备用服务器
        server 192.168.1.174:8080 weight=2;
        server 192.168.1.175:8080 weight=2;
}
#backup参数不能使用在hash和random load balancing中。
  • max_fails和fail_timeout
#max_fails:表示失败几次,则标记server已宕机,剔除上游服务。
#fail_timeout:表示失败的重试时间。
upstream tomcats {
        server 192.168.1.173:8080 max_fails=2 fail_timeout=15s;
        server 192.168.1.174:8080 weight=2;
        server 192.168.1.175:8080 weight=2;
}
#则表示在15秒内请求某一server失败达到2次后,则认为该server已经挂了或者宕机了,随后15秒内不会有新的请求到达刚刚挂掉的节点上,而是会请求到正常运作的server,15秒后会再有新请求尝试连接挂掉的server,如果还是失败,重复上一过程,直到恢复

Keepalived 提高吞吐量

  • Keepalived :设置长连接处理的数量
  • proxy_http_version:设置长连接http版本为1.1
  • proxy_set_header:清除connection header 信息
upstream tomcats {
        server 192.168.1.190:8080;
        keepalive 32;
}

server {
        listen       80;
        server_name  www.tomcats.com;

        location / {
            proxy_pass  http://tomcats;
            proxy_http_version 1.1;
            proxy_set_header Connection "";
        }
    }
posted @ 2022-08-23 15:44  mrt_yy  阅读(174)  评论(0编辑  收藏  举报