Nginx负载均衡以及常用的7层协议和4层协议的介绍

一、引言

明人不说暗话,下面来解析一下 Nginx 的负载均衡。需要有 Linux 和 Nginx 环境哈。

二、nginx负载均衡的作用

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等

三、upstream配置

首先给大家说下 upstream 这个配置,写一组被代理的服务器地址,然后配置负载均衡的算法。这里的被代理服务器地址有两种写法。

第一种方式

upstream testapp { 
      server ip:端口;        #需要代理的服务器地址ip
      server ip:端口;        #需要代理的服务器地址ip
    }
 server {
        listen 80;
        server_name localhost;
        location / {         
           proxy_pass  http://testapp;      #请求转向 testapp 定义的服务器列表         
        } 
}

第二种方式

upstream mysvr { 
      server  http://ip:端口;     #需要代理的服务器ip和端口
      server  http://ip:端口;     #需要代理的服务器ip和端口
    }
 server {
        listen 80;
        server_name localhost;
        location  / {         
           proxy_pass  http://mysvr;     #请求转向mysvr 定义的服务器列表         
        } 
}

示例

我们使用第一种方法准备三台机器

代理器 :10.12.153.41

服务器1 :10.12.153.222

服务器2:10.12.153.140

首先保证服务器1和2能够正常访问到web页面

现在配置代理端的nginx配置文件

配置完成后重新加载就可以进入浏览器测试了

我们通过访问代理器10.12.153.41访问到了两个服务器的页面

默认访问页面是轮询的,什么是轮询下面会讲到哈

四、负载均衡算法

upstream 支持4种负载均衡调度算法:

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

2、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

3、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。后台服务器为缓存的时候提高效率。

4、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。 

负载均衡调度算法配置示例

1、热备backup

当一台服务器发生事故时,才启用第二台服务器给提供服务

服务器处理请求的顺序为 001 001 001 001 001 001 突然001出现故障这是访问页面则会是002 002 002 002 ....

2、轮询weight

nginx默认就是轮询其权重默认为1,服务器处理请求的顺序:001 002 001 002 001 002....

weight的默认值为1可以不写。上面的upstream配置实例中使用的就是普通轮询。

3、加强轮询weight

即可以使用weight修改轮询次数,下面的配置轮询访问显示为001 001 001 002 002 001 001 001 002 002 ...

4、ip_hash

nginx会让相同的客户端ip请求相同的服务器,使用ip_hash这种负载均衡以后,可以保证用户的每一次会话都只会发送到同一台服务器上

注意事项

  • 一旦使用了ip_hash,当我们需要移除一台服务器的时候,不能直接删除这个配置项,而是需要在这台服务器配置后面加上关键字down,表示不可用;
  • 因为如果直接移除配置项,会导致hash算法发生更改,后续所有的请求都会发生混乱;

5、nginx负载均衡配置状态参数

down,表示当前的server暂时不参与负载均衡。
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。 
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误   
fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。

10.12.153.222 轮循两次且请求2次后失败,失败后暂停服务2秒

10.12.153.140 轮循三次且请求2次后失败,失败后暂停服务1秒

五、7层协议和4层协议介绍

7层负载和4层负载的区别

四层负载与七层负载最大的区别就是效率与功能的区别。

四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会相对比较高,

而七层负载均衡的优势则体现在功能多,控制灵活强大。

在具体业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑。

七层协议

OSI(Open System Interconnection)是一个开放性的通行系统互连参考模型,他是一个定义的非常好的协议规范,共包含七层协议

如图显示

4层协议

TCP/IP协议 之所以说TCP/IP是一个协议族,是因为TCP/IP协议包括TCP、IP、UDP、ICMP、RIP、TELNETFTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。

从协议分层模型方面来讲,TCP/IP由四个层次组成:网络接口层、网络层、传输层、应用层。

nginx在1.9.0的时候,增加了一个 stream 模块,用来实现四层协议(网络层和传输层)的转发、代理、负载均衡等。stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议的监听,然后通过proxy_pass来转发我们的请求,通过upstream添加多个后端服务,实现负载均衡

扩展

TCP (传输控制协议)和 UDP (用户数据报协议) 是两种不同的网络通信协议,它们在传输数据的方式可靠性、传输速度和应用场景等方面存在一些区别。
1.传输方式
TCP 是一种面向连接的协议,它在传输数据之前需要先建立连接,然后才能传输数据。而 UDP 是一种无连接的协议,它不需要建立连接就可以直接传输数据。

2.可靠性:
TCP 是一种可靠的协议,它可以保证数据的传输不会出现丢失、重复或乱序等问题。它通过确认机制.超时重传和滑动窗口等技术来保证数据的可靠性。而 UDP 是一种不可靠的协议,它不能保证数据的传输不会出现丢失、重复或乱序等问题。
3.传输速度:
TCP 的传输速度相对较慢,因为它需要建立连接、确认数据的传输和进行流量控制等操作。而 UDP 的传输速度相对较快,因为它不需要建立连接和进行流量控制等操作。
4.应用场景:
TCP 适用于需要可靠传输数据的应用场景,例如文件传输、电子邮件、远程登录等。而 UDP 适用于对传输速度要求较高,但对数据可靠性要求不高的应用场景,例如视频会议、实时游戏、DNS 解析等。
总的来说,TCP 和 UDP 都有各自的优缺点,需要根据具体的应用场景来选择使用哪种协议。

好了今天就分享到这里了!感谢大家观看!希望能够帮助到大家!

  • 41
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

藻头男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值