1.四层负载均衡概述

1.什么是四层负载均衡

所谓四层就是基于 IP+端口 (传输层) 的负载均衡,它通过用户请求的端口来决定将请求至哪台后端服务器。 就是通过三层的P地址并加上四层的端口号,来决定哪些流量需要做负载均衡。对需要负载均衡的流量进行NAT转换,然后转发至后端服务器节点,并记录这个TCP或者UDP的流量是由哪台后端服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理


⒉.四层层负载均衡应用**
场景1.场景一、端口转发

首先http当然是最常用的一种协议,但是还是有很多非http的应用( mysql、redis、ssh ),只能用四层代理

2场景二、四层负载均衡+七层负载均衡,实现大规模集群架构。

其次七层代理需要CPU运算,所以单台机器很难做到很高的处理能力,因此需要在七层负载均衡前面再加四层负载均衡。(提高网站的访问效率,并保证了七层负载均衡的高可用性。)

2. nginx四层负载均衡

(tcp/ip-ip:port)

    1. 图解:

image.png

Nginx:代理形式 (不是真正的四层负载均衡) 场景: 端口代理 场景: 四层结合七层(可以实现,但是和真正LVS实现差很远 )

  • 2.Nginx四层负载均衡配置语法示例:
    1. stream { #不可以出现在http层里面
    2. upstream backend i
    3. l hash $remote_addr consistent;
    4. server backend1.example.com: 12345 weight=5;
    5. server 127.0.0.1:12345 max_fai1s=3 fai1_timeout=30s;
    6. server unix: / tmp /backend3;
    7. }
    8. server {
    9. listen 12345;
    10. proxy_pass backend;
    11. }
    12. }

*3. LVS 四层负载均衡(使用最多/DR模式)

    1. 图解:

image.png

Ps: LVS的NAT模型:和路由器差不多 LVS: 转发形式 (真正实现内核级别转发 ) 场景: 端口转发 场景: 四层+多个七层实现大规模场景


4.nginx四层负载均衡实践

4.1. 场景1:实现SSH端口代理

四层代理:10.0.0.4 172.16.1.4

web节点:172.16.1.7

  • 安装nginx ( 官方源 )

[root@proxy-4 ~]# scp 172.16.1.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/
[root@proxy-4 ~]# yum install nginx -y

4.2 场景2:实现MySQL以及SSH端口代理

[root@proxy-4 ~]#vim /etc/nginx/nginx.conf

stream {                                       # 要在http层上面
        upstream ssh_web01 {
            server 172.16.1.7:22;
        }
        upstream ssh_web02 {
            server 172.16.1.8:22;
        }
        upstream mysql_01 {
            server 172.16.1.51:3306;
        }
        server {
            listen 2222;
            proxy_pass ssh_web01;        
        }
        server {
            listen 2223;
            proxy_pass ssh_web02;        
        }
        server {
            listen 3336;
            proxy_pass mysql_01;
        }
    }

[root@proxy-4 ~]# gzip /etc/nginx/conf.d/default.conf #不把默认文件压缩nginx四层负载会出现问题
[root@proxy-4 ~]# nginx -t
[root@proxy-4 ~]# systemctl start nginx
[root@proxy-4 ~]# systemctl enable nginx

4.3 场景3:实现Nginx多七层负载均衡代理

DNS—> 四层负载均衡

  • nginx四层负载均衡

    stream {
              upstream proxy_7 {
                  server 172.16.1.5:80;
                  server 172.16.1.6:80;
              }
    
              server {
                  listen 80;
                  proxy_pass proxy_7;
              }
          }
    
  • nginx七层负载均衡

    upstream web {
              server 172.16.1.7:80;
              server 172.16.1.8:80;
              server 172.16.1.9:80;
          }
    
          server {
              listen 80;
              server_name blog.etiantian.org;
    
              location / {
                  proxy_pass http://web;
                  include proxy_params;
              }
          }
    

    效果展示: image.png

4.4 Nginx:四层负载结合七层负载获取真实IP地址

...
stream {
    upstream web {
        server 172.16.1.120:80;
    }

    server {
        listen 80;
        proxy_pass web;
        proxy_protocol on;  #开启proxy_protocol协议
    }
}

七层配置:
[root@lb conf.d]# cat proxy_ip_oldxu.com.conf

upstream ip {
    server 172.16.1.130:80;
}

server {
    server_name ip.oldxu.com;
    listen 80 proxy_protocol;       #添加proxy_protocol
    set_real_ip_from 172.16.1.0/24;  #添加七层负载前经过的代理IP地址
    real_ip_header proxy_protocol;   #将proxy_protocol获取的IP赋值给$remote_addr


    location / {
        proxy_pass http://ip;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
            #将proxy_protocol真实客户端的IP地址赋值给X-Forwarded-For变量携带至后端
    }
}

后端应用配置:

server {
    listen 80;
    server_name ip.oldxu.com;
    root /code;

    location / {
        index index.html;
    }
}

* 5. 阿里云示例(SLB负载均衡 )


1、创建ECS实例

是按微信朋友圈一跳并发400的标准 选择ECS配置的,计费方式一定要选择 按量付费,这样可以随意增加删除ECS,推广期过后可以释放掉ECS(SLB和RDS同样是按量付费),避免不必要的资源浪费。
Nginx四层负载均衡 - 图4

2. 创建负载均衡实例

本文介绍如何创建一个公网负载均衡实例。负载均衡实例创建后,系统会自动分配一个服务地址,您可以将您的域名解析到该负载均衡实例的服务地址。

背景信息
一个负载均衡实例可以添加多个监听和后端服务器。

操作步骤

  1. 登录负载均衡管理控制台。
  2. 在左侧导航栏,单击实例 > 实例管理
  3. 实例管理页面,单击创建负载均衡
  4. 负载均衡SLB购买页面,根据需要配置负载均衡实例。本教程中的负载均衡实例配置如下:图 1. 负载均衡SLBNginx四层负载均衡 - 图5
    • 付费模式:选择一种付费模式。本示例中选择按量付费
    • 地域和可用区:由于负载均衡不支持跨地域部署,因此创建负载均衡实例时应选择与ECS实例相同的地域。本教程选择华北1(青岛)
    • 可用区类型:负载均衡在大部分地域都开通了多可用区功能,实现同城容灾。当主可用区的机房故障、不可用时,负载均衡仍然有能力在非常短的时间内(大约30s中断)切换到另外一个备可用区的机房恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区的机房提供服务。本教程中的主可用区为华北1 可用区C,备可用区为华北1 可用区B
    • 实例名称:输入实例名称,或者使用系统自动创建的实例名称。
    • 实例规格:选择简约型(slb.s1.small)。该规格最大可以支持连接数为5000,新建连接数(CPS)为3000,每秒查询数 (QPS)为1000。
    • 实例类型:选择公网
    • IP版本:选择IPv4
    • 后端服务器类型:选择本地域,允许挂载本地域后端服务器。
    • 计费方式:选择按使用流量计费
  5. 单击立即购买
  6. 确认订单页面,选择我已阅读并同意《负载均衡SLB(按量付费)服务协议》,然后单击去支付。您可以将域名解析到负载均衡实例的公网服务地址上,提供服务,详情参考域名解析

3.配置负载均衡实例

创建负载均衡实例后,您需要对负载均衡实例进行配置才能进行流量转发,您需要添加至少一个监听和一组后端服务器。本指南指引您配置一个TCP监听并添加部署了静态网页的两个ECS实例(ECS01和ECS02)作为后端服务器。

操作步骤
登录负载均衡管理控制台。
在实例管理页面,单击要配置监听的实例操作列的监听配置向导。Nginx四层负载均衡 - 图6

  1. 协议&监听页签下,根据如下信息,配置监听规则,其它配置保持默认选项。
    • 选择负载均衡协议:本教程选择TCP协议。
    • 监听端口:用来接收请求并向后端服务器进行请求转发的负载均衡系统的前端协议和端口。本教程端口设置为80
  2. 高级配置
    • 开启监听带宽限速:设定不同的带宽峰值来限定后端ECS实例的不同应用所能对外提供的服务能力。本教程创建的公网负载均衡实例是按流量计费的,不受带宽峰值限制,所以不进行配置。
    • 调度算法:负载均衡支持如下三种调度算法,本教程选择轮询
      • 加权轮询模式:将访问请求依序分发后端服务器,后端服务器的权重越高,被分发的几率也越大。
      • 加权最小连接数模式:除了根据每台后端服务器设定的权重值来进行轮询,同时还考虑后端服务器的实例连接数。当权重值相同时,当前连接数越小的后端服务器被轮询到的次数也越高。
      • 轮询模式:按照访问顺序将访问请求分发给后端服务器。
    • Nginx四层负载均衡 - 图7
  3. 单击下一步,在后端服务器页签下,选择默认服务器组,单击继续添加,添加后端服务器。
    1. 我的服务器页面,勾选之前创建的ECS01和ECS02实例,单击下一步
    2. 配置权重,权重越大转发的请求越多,默认为100,保持默认值即可。
    3. 单击添加
    4. 默认服务器页签下,配置后端协议端口,ECS实例上开放的用来接收请求的后端端口,在同一个负载均衡实例内可重复。本教程端口设置为80
  4. Nginx四层负载均衡 - 图8
  5. 单击下一步,配置健康检查,本教程使用默认值。开启健康检查功能后,当后端某个ECS健康检查出现问题时,负载均衡服务会将请求转发到其它健康检查正常的ECS上,而当该ECS恢复正常运行时,负载均衡会自动恢复它的请求转发。
  6. 单击下一步,进入配置审核页签,单击提交Nginx四层负载均衡 - 图9
  7. 单击知道了,返回实例管理页面,单击。当后端ECS的健康检查状态为正常时,表示后端ECS可以正常处理负载均衡转发的请求了。
    Nginx四层负载均衡 - 图10
  8. 在浏览器中输入负载均衡实例的服务地址,测试负载均衡服务。Nginx四层负载均衡 - 图11Nginx四层负载均衡 - 图12