nginx负载均衡

七层负载均衡

  • 位于应用层,与用户直接打交道,关心协议、域名
  • 主要用于处理http、https等协议开头的请求
  • 位置:http块内
  • 支持域名、IP、unix套接字

nginx中七层负载均衡支持对应模块 ngx_http_upstream_module ,该模块默认已经引入,可以直接使用;

四种负载均衡策略

  • 加权轮询(weight=number):默认策略,默认weight=1:按顺序分发请求
  • 自定义hash(hash key):根据hash值分发请求,不受加权轮询影响
  • ip地址hash(ip_hash):根据客户端ip计算hash值,并根据该hash值分发请求,不受加权轮询影响
  • 最少连接数(least_conn):将请求分发给连接数最少的后台服务器,受加权轮询影响(如果多台服务器符合要求,按加权轮询分发请求)

加权轮询(weight=number):

        当服务器有性能差异时,可设置不同权重,调整请求分发比例;

例如:对于server A weight=3,server B weight=1,当有4个请求过来时,分发给 A 3个请求,分发给 B 1个请求 ;

        

upstream backend {
        #域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
        server localhost weight=3 max_conns=100;
        #ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
        server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
        #备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
        server 127.0.0.1:9090 backup;
        #下线,标记该服务器不可用,一般用于停机维护
        server 127.0.0.1:8081 down;
    }
    server {
        listen 8888;
        server_name localhost;
        location / {

                proxy_pass http://backend;
        }
    }

自定义hash(hash key):

        一个请求的hash值不变,则该请求会一直发往一个服务器;

         

upstream backend {
        #根据请求url哈希分发请求,权重不再生效
        hash $request_uri;
        #域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
        server localhost weight=3 max_conns=100;
        #ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
        server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
        #备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
        #server 127.0.0.1:9090 backup;
        #下线,标记该服务器不可用,一般用于停机维护
        server 127.0.0.1:8081 down;
    }
    server {
        listen 8888;
        server_name localhost;
        location / {

                proxy_pass http://backend;
        }
    }

ip地址hash(ip_hash):

        ip不变哈希值不变,一个ip的请求会一直发往一个服务器        

upstream backend {
        #根据客户端ip地址哈希分发请求,权重不再生效
        ip_hash;
        #域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
        server localhost weight=3 max_conns=100;
        #ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
        server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
        #备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
        #server 127.0.0.1:9090 backup;
        #下线,标记该服务器不可用,一般用于停机维护
        server 127.0.0.1:8081 down;
    }
    server {
        listen 8888;
        server_name localhost;
        location / {

                proxy_pass http://backend;
        }
    }

最少连接数(least_conn):

        将请求分发给连接数最少的后台服务器,受加权轮询影响(如果多台服务器符合要求,按加权轮询分发请求)

        

upstream backend {
        #将请求发往当前连接数最少的服务器
        least_conn;
        #域名形式,max_conns=100:同时处理请求最大数100,默认为0,不限制
        server localhost weight=3 max_conns=100;
        #ip形式,max_fails=3 fail_timeout=10:10秒内请求失败次数达到3次,10秒期间服务器不可用,10秒过后可重新访问
        server 192.168.242.200:8080 weight=2 max_fails=3 fail_timeout=10;
        #备份服务器,当所有服务器都不可用时,启用该服务器处理请求(不可与hash、ip_hash负载均衡策略一起用)
        server 127.0.0.1:9090 backup;
        #下线,标记该服务器不可用,一般用于停机维护
        server 127.0.0.1:8081 down;
    }
    server {
        listen 8888;
        server_name localhost;
        location / {

                proxy_pass http://backend;
        }
    }


四层负载均衡:

  • 位于传输层,TCP、UDP,端到端
  • 不关心协议,直接传输数据包,主要用于处理数据库 ip:port 请求
  • 位置:与http块同级
  • 支持ip,不支持域名

nginx默认不支持,需要添加模块 ngx_stream_core_module ,通过添加配置参数 --with-stream 添加该模块;

负载均衡策略类似七层负载均衡:

        只关心 IP 和 PORT

        

stream {
    upstream mysql_backend {
        server 192.168.242.10:3306;
        server 192.168.242.11:3306;
    }
    server {
        listen 3306;
        proxy_pass mysql_backend;
    }
}

         

使用:mysql -h nginx服务器ip -P 3306 -u root -p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值