Nginx系列四:Nginx负载均衡

前言:nginx负载均衡往往配合高可用一起使用,解决代理服务器故障导致整个负载均衡全挂掉!关于高可用参考Nginx系列六:Keepalived+Nginx高可用集群

一:为什么要使用负载均衡?

随着业务的不断发展壮大,网站访问量和数据量也随之急剧增长,单机负载达到性能瓶颈,网站访问速度下降,为了提升网站访问速度,就需要对服务器进行水平扩充,负载均衡策略的出现和发展成为缓解上述问题的有效途径。

负载均衡的核心是将之前一台设备处理不完的请求,分摊到多台设备从而增加吞吐量、加强网络数据处理能力、提高网络的灵活性!

负载均衡结构如下:

二:负载均衡的几种算法策略

   1:轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
upstream backserver {
    server 192.168.8.201;
    server 192.168.8.202;
}

特点:由于该算法中每个请求按时间顺序逐一分配到不同的服务器处理,因此适用于服务器性能相近的集群情况,其中每个服务器承载相同的负载。
但对于服务器性能不同的集群而言,该算法容易引发资源分配不合理等问题。

   2:weight 加权轮询

在默认轮询的基础上为每台服务器设置权重,解决服务器性能不同引发资源分配不合理的问题!
weight值越大分配到的任务也就越多

upstream backserver {
    server 192.168.8.201 weight=3;
    server 192.168.8.202 weight=7;
}

  3:IP 哈希(IP hash)

默认轮询和加权轮询虽然可以解决任务分发的问题,但是如果网站需要用户登录才能访问,而http又是无状态的,为了解决用户cookie的问题可以使用ip哈希的方式。
依据发出请求的客户端 IP 的 hash 值来分配服务器,该算法可以保证同 IP 发出的请求映射到同一服务器,解决cookie问题。

upstream backserver {
    ip_hash;
    server 192.168.8.201;
    server 192.168.8.202;
}

  4:fair

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backserver {
    server 192.168.8.201;
    server 192.168.8.202;
    fair;
}

总结:在实际开发中这几种方式往往是结合在一起使用的

三:负载均衡的具体配置

     1:在nginx.conf里添加负载服务器

http {
	....
    upstream myServer {
        ip_hash;
        server 192.168.8.200:8080 weight=1 max_fails=1 fail_timeout=10;
        server 192.168.8.201:8080 weight=1 max_fails=1 fail_timeout=10;
        server 192.168.8.202:8080 weight=1 max_fails=1 fail_timeout=10;
    }
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'  '$connection $upstream_addr '  'upstream_response_time $upstream_response_time request_time $request_time ';
   access_log  /var/log/nginx/access.log  main;
   ....
} 

   2:在单个server块添加反向代理

server {
    #access_log /var/log/nginx/test/access.log;
    ....
    location / {   # 请求全部跳转
        proxy_pass http://myServer;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    ....
}

   3:重启nginx

    负载均衡常遇到的问题:
    如果其中一台server挂了会不会影响系统请求?

    解释:nginx默认配置max_fails和fail_timeout参数,当某台upstream server挂了,表示在10s(fail_timeout)之内,有1(max_fails)个请求打到这台挂了的服务器,nginx就会把这台upstream server设为down机的状态,时长是10s,在这10s内如果又有请求进来,就不会被转到这台server上,过了10s重新认为这台server又恢复了

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iwester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值