美文网首页
Nginx常见使用场景-负载均衡服务(六)

Nginx常见使用场景-负载均衡服务(六)

作者: andpy | 来源:发表于2018-05-25 09:07 被阅读15次

    nginx 负载均衡服务

    实现的原理使用的是 proxy_pass,nginx将不同的服务转发到服务池当中。

    //语法
    Syntax:upstream name {...}
    Default:-
    Context:http
    

    在目标服务器配置三个不同server表示不同的服务

    //server1
    server{
        listen 8001;
        ...
        location / {
            root /opt/app/code1;
            index index.html index.htm;
        }
    }
    
    //server2
    server{
        listen 8002;
        ...
        location / {
            root /opt/app/code2;
            index index.html index.htm;
        }
    
    }
    
    //server3
    server{
        listen 8003;
        ...
        location / {
            root /opt/app/code3;
            index index.html index.htm;
        }
    }
    

    在代理服务器配置 upsteram.conf

    //后面的名字是自定义的,在proxy_pass配置
    upstream imooc{
        server 192.168.9.1:8001;
        server 192.168.9.1:8002;
        server 192.168.9.1:8003 ;
    }
    server {
        listen 80;
        server_name www.applelife.xyz;
        ...
        location /{
            #配置上面的名称 imocc
            proxy_pass http://imocc;
            #proxy_params 为共同参数配置文件
            include proxy_params;
        }
    }
    

    启动之后,浏览验证查看,访问代理服务器,默认服务请求是轮询的操作查看

    在目标服务器上停止掉一个服务验证:利用iptables

    //命令 不对外提供8002的端口的服务
    iptables -I INPUT -p tcp --dport 8002 -j DROP
    

    upstream举例

    //支持ip域名的方式
    upstream backend{
        #weight表示权重,在轮询当中比重
        server backend1.example.com weight =5;
        server backend2.exxample.com:8080;
        #socket方式
        server unix:/tmp/backend3;
        
        #backup表示是一个备份的节点
        server backup1.example.com:8080 backup;
        server backup2.example.com:8080 backup;
    }
    

    后端服务器在负载均衡调度中的状态参数介绍

    #当前的server暂时不参与负载均衡
    down
    #预留的备份服务器
    backup
    #允许请求失败的次数
    max_fails
    #经过max_fails失败后,服务暂停的时间,默认10秒
    fail_timeout
    #限制最大的接收的连接数
    max_conns
    
    //示例
    upstream applelife {
        #不进行服务 server1
        server 192.168.9.1:8001 down;
        #备份服务 server2
        server 192.168.9.1:8002 backup;
        #允许请求失败次数 server3
        server 192.168.9.1:8003 max_fails=1 fail_timeout=10s;
    }
    

    在验证的时候,发现只会出现server3 在目标服务器上停止掉一个服务验证:利用iptables

    //命令 不对外提供8003的端口的服务
    iptables -I INPUT -p tcp --dport 8003 -j DROP
    

    停掉 8003服务之后,之后就会启动8002备份服务了

    //关闭 iptables
    iptables -F
    

    调度算法方式

    • 轮询 按照时间的顺序逐一分配到不同的后端服务器
    • 加权轮询 weight值越大 ,分配到的访问的机率越高
    • ip_hash 每个请求的按访问ip的hash结果分配,这样来自同一个ip的固定访问一个后端服务器(代理不能访问的客户端的ip)
    • url_hash 按照访问的url的hash结果来分配请求,是每个url定向到同一个后端服务器
    • least_conn 最少的链接数,那个机器连接数少就分发
    • hash关键数值 hash自定义的key
    //iphash方式
    upstream applelife {
        ip_hash;
        # server1
        server 192.168.9.1:8001;
        # server2
        server 192.168.9.1:8002;
        # server3
        server 192.168.9.1:8003;
    }
    

    hash关键数值

    //语法 这个是在版本1.7.2出现的
    Syntax:hash key [consistent];
    Default:-
    Context:upstream
    
    //示例
    upstream applelife {
        #request_uri请求参数 不包括域名的部分
        hash $request_uri;
        # server1
        server 192.168.9.1:8001;
        # server2
        server 192.168.9.1:8002;
        # server3
        server 192.168.9.1:8003;
    }
    

    相关文章

      网友评论

          本文标题:Nginx常见使用场景-负载均衡服务(六)

          本文链接:https://www.haomeiwen.com/subject/cbhyjftx.html