avatar

30.Nginx学习之路之四层负载均衡

上篇我们聊了聊Nginx的七层负载均衡,我们大致对Nginx的负载均衡搭建有点小印象,至少知道负载均衡的基本概念,以及怎么使用upstream配置负载均衡。到最后,我们还介绍了下如何使用Consul+upsync+nginx搭建动态负载均衡,也动手实现了下。那么今天我们将带来如何使用Nginx搭建四层负载均衡(虽然很少这么做,但还是要学习下)
今天的内容如下:
  1. 什么是四层负载均衡,什么又是七层负载均衡。区别是什么?(这点上次没说,专门留着这里说)
  2. 如何搭建Nginx四层负载均衡
  3. 常见的四层负载均衡器
不说了,进入正题

0x01 四层负载均衡和七层负载均衡

  1. 从OSI开放互联参考模型说起
    • 我们都知道OSI有七层,从下往上,依次是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,这些相信都在网络课背过,这里也不多说。那么问题来了,为啥要谈到OSI呢?因为我们这里的四层,指的就是OSI模型中的第四层(从下往上数),也就是传输层。而七层呢?没错,就是应用层。也就是说:
      • 四层负载均衡:基于传输层做的负载均衡
      • 七层负载均衡:基于应用层做的负载均衡
  2. 既然对四层和七层负载均衡有了一定的了解,那么他们有啥不同呢?
    • 四层负载均衡:
      • 我们都知道,四层的传输协议是啥?TCP、UDP。那么在四层做负载均衡,面向的就是TCP协议。我们也知道,OSI上层协议都是需要下层做支撑,也就是说,在四层做负载均衡,相当于可以运用所有请求。
    • 七层负载均衡:
      • 七层,也就是应用层,我们负载均衡面向的是HTTP协议,我们可以在Nginx的配置中看到,配置的就是一个Http块。
  3. 有哪些四层负载均衡器?
    1. LVS:软负载,即使用软件做负载均衡。在企业中用的最多。已经集成到了Linux上面。
    2. F5:硬负载,即使用硬件设备做负载均衡。
    3. Nginx(版本1.9以后)

0x02 使用Nginx搭建四层负载均衡

  1. 下载Nginx1.9以后版本。emm,这个现在最新版本都是1.17.1了。我这里使用的版本是1.14.0

  2. 解压文件

  3. 进入到解压目录。执行命令./configure --with-stream,这里我们只带--with-stream参数。

  4. 命令执行完后,执行make && make install命令。安装Nginx

  5. 好了,现在我们的Nginx可以做四层负载均衡了。那么现在我们来说说,为啥要带--with-stream这个参数?

    • 在Nginx里,使用一个stream块来实现四层负载均衡,而这个模块默认是不会带的。所以需要加上这个模块。
  6. 安装好了,那么就来配置吧。照样是编辑conf/nginx.conf文件。在里面定义如下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    worker_processes  1;

    events {
    worker_connections 1024;
    }

    ###定义stream块,和http块同级。我这里直接把http块删除了。
    ###和http块一样,可以在里面定义server、upstream等,也可以使用proxy_pass转发我们的请求
    stream{
    ## 定义上游服务器,用于负载均衡
    upstream server{
    server 192.168.25.1:6000;
    server 192.168.25.1:6001;
    }
    ## 定义server块,监听我们的请求
    server{
    ## 监听1234端口
    listen 1234;
    ## 转发到上游服务器
    proxy_pass server;
    }

    }
  7. 配置没毛病,相信都能看懂。那么就启动下Nginx看下效果吧。

  8. 搭建配置说明:

    1. 使用TCP&UDP测试工具,新建两台服务器。一台端口为6000,一台为60001,也就是上面配置的两台上游服务器。
    2. 使用TCP&UDP测试工具,新建一个连接。目标ip和端口填写我们Linux的地址和Nginx监听地址。我这里的目标ip为192.168.25.201,端口为1234.图如下:
    3. 目标效果:
      • 当客户端每连接一次,都会连接到不同的服务器上。注意,这里的负载均衡是针对每次连接,而不是收发消息。
  9. 实际效果说明:

    1. 首次连接,连接服务器端口为6000.可以相互收发消息
    2. 断开后再次连接,连接服务器端口为6001.
    3. 说明可以Nginx四层负载均衡已经搭建成功,并且默认的负载均衡算法也是为轮询。

0x03 总结

  1. 以上就是我们使用Nginx做四层负载均衡的内容了,使用Nginx做四层负载均衡比使用LVS做四层负载均衡配置更加简单、更加轻量级。下面就让我们总结下该篇说了啥吧。
    1. 首先我们通过OSI七层互联参考模型来解释了什么是四层负载均衡,什么又是七层负载均衡,并且也说了两者之间的区别。
    2. 其次我们自己动手使用Nginx搭建了四层负载均衡,并且达到了我们负载均衡的目的。
    3. 最后,我们来谈谈配置文件。nginx中使用stream块来实现四层负载均衡,默认Nginx是不带的,需要在执行./configure命令时添加参数。stream块与http块平级,同样可以和http块一样,在里面定义upstream进行负载均衡,也可以proxy_pass对请求进行转发。
  2. 以上就是我们所有的内容。下面会带来使用LVS+keepalived+Nginx实现双机主从热备,敬请期待。谢谢观看~拜拜~~

评论