0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Nginx四层负载均衡基本概诉

冬至子 来源:运维库 作者:运维库 2023-05-22 17:48 次阅读

1、Nginx四层负载均衡基本概诉

(1) 什么是四层负载均衡

四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层指的是应用层,它的封装在四层基础之上,无论四层还是七层都指的是OSI网络模型。

(2) 四层负载均衡应用场景

1.四层负载可以保证7层负载的高可用:四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性,如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepaive。

2、端口映射(端口转发):如:TCP协议的负载均衡,有些请求是TCP协议的(mysql,ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。

(3) 四层+七层构建大规模集群架构使用场景

图片

(4) 四层负载均衡总结

1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53

2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口)

3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)

4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;

5、通常大并发场景通常会选择使用在七层负载均衡前面增加四层负载均衡

2、Nginx四层负载均衡实战

(1) Nginx四层负载语法
Syntax: listen address:port [ssl] [udp] [proxy_protocol] [fastopen=number] [backlog=number] [rcvbuf=size] [sndbuf=size] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
    Default: —
    Context: server
#示例
    worker_processes auto;

    error_log /var/log/nginx/error.log info;

    events {
        worker_connections  1024;
    }
 
    #在events层下面,http层上面配置stream
    # stream配置多的时候,直接配置include更加简洁
 
 stream {
 #1.定义虚拟资源池
     upstream backend {
         hash $remote_addr consistent;
         server backend1.example.com:12345 weight=5;
         server 127.0.0.1:12345  max_fails=3 fail_timeout=30s;
         server unix:/tmp/backend3;
      }

     upstream dns {
         server 192.168.0.1:53535;
         server dns.example.com:53;
      }
    #2.调用虚拟资源池
     server {
         listen 12345;
         proxy_connect_timeout 1s;
         proxy_timeout 3s;
         proxy_pass backend;
      }

     server {
         listen 127.0.0.1:53 udp reuseport;
         proxy_timeout 20s;
          proxy_pass dns;
      }

     server {
         listen [::1]:12345;
         proxy_pass unix:/tmp/stream.socket;
      }
    }
(2) Nginx四层负载均衡前期准备

① 环境规划

主机名        应用环境      IP地址
    Nginx-5        Nginx+PHP   192.168.2.5
    Nginx-6        Nginx+PHP   192.168.2.6
    MySQL-7          MySQL     192.168.2.7
    7-Proxy1-8       Nginx     192.168.2.8
    7-Proxy2-9       Nginx     192.168.2.9
    4-Proxy1-10      Nginx     192.168.2.10

② 搭建第二台七层proxy服务器 7-Proxy2-9

#1、准备对应的www用户
[root@7-Proxy2-9 ~]# groupadd -g666 www
[root@7-Proxy2-9 ~]# useradd -u666 -g666 www

#2、在7-Proxy2-9上面安装Nginx
[root@7-Proxy2-9 ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0       
enabled=1
[root@7-Proxy2-9 ~]#  yum install nginx -y

#3、在7-Proxy2-9上面拷贝7-Proxy1-8的所有nginx相关配置即可。
[root@7-Proxy2-9 ~]# scp -rp root@192.168.2.8:/etc/nginx /etc/

#4、启动nginx
[root@7-Proxy2-9 conf.d]# nginx -t
[root@7-Proxy2-9 conf.d]# systemctl start nginx
[root@7-Proxy2-9 conf.d]# systemctl enable nginx
#注:注销7-Proxy1-8的域名解析,换成7-Proxy2-9,再访问网站是否游泳,成功即可。

③ 搭建四层proxy服务器 4-Proxy1-10

#1、准备对应的www用户
[root@4-Proxy1-10 ~]# groupadd -g666 www
[root@4-Proxy1-10 ~]# useradd -u666 -g666 www

#2、在4-Proxy1-10上面安装Nginx
[root@4-Proxy1-10 ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0       
enabled=1
[root@4-Proxy1-10 ~]#  yum install nginx -y
#3、查看是否有四层模块
[root@4-Proxy1-10 ~]# nginx -V
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module
`--with-stream`(这个四层负载模块是nginx>=1.9.0才有) --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'

#4、启动nginx
[root@4-Proxy1-10 conf.d]# nginx -t
[root@4-Proxy1-10 conf.d]# systemctl start nginx
[root@4-Proxy1-10 conf.d]# systemctl enable nginx
(3) Nginx四层负载均衡实战

① 需求

1.通过访问负载均衡的5555端口,实际是后端的Nginx-522端口在提供服务。
 2.通过访问负载均衡的6666端口,实际是后端的mysql-73306端口在提供服务。

② 4-Proxy1-10配置

#如果监听了80端口,要删除/etc/nginx/conf.d/default.conf
[root@4-Proxy1-10 ~]# rm -f /etc/nginx/conf.d/default.conf   #删除http的80端口
#配置四层负载均衡(这里采用文件方式,后面直接用include就行)
[root@4-Proxy1-10 ~]# mkdir -p /etc/nginx/conf.c
[root@4-Proxy1-10 ~]# vim /etc/nginx/nginx.conf
# 在events层下面,http层上面配置include
include  /etc/nginx/conf.c/*.conf;

# 编写四层代理配置
[root@4-Proxy1-10 ~]# cd /etc/nginx/conf.c/
[root@4-Proxy1-10 conf.c]# cat stream.conf 
stream {
    #1.定义虚拟资源池
    upstream ssh {
        server 192.168.2.5:22;
    }

    upstream mysql {
        server 192.168.2.7:3306;
    }
    #2.调用虚拟资源池
    server {
        listen 5555;
        proxy_connect_timeout 1s;
        proxy_timeout 300s;
        proxy_pass ssh;
    }
    server {
        listen 6666;
        proxy_connect_timeout 1s;
        proxy_timeout 300s;
        proxy_pass mysql;
    }
}
[root@4-Proxy1-10 conf.c]# systemctl restart nginx
#1.打开访问 Nginx-5、Nginx-67-Proxy1-87-Proxy2-94-Proxy1-10的访问日志
#2.可以用ssh 192.168.2.105555 登入到Nginx-5 
#3.可以用navicat 登入192.168.2.106666登入到mysql-7上 
#4.命令tail -f /var/log/nginx/access.log查看到是分摊到7-Proxy1-87-Proxy2-9上
#5.可以正常访问wordpress、wecenter、eduSoho
#6.4-Proxy1-10上并没有产生日志
(4) nginx四层负载均衡记录日志
① 四层负载均衡日志必须配置在stream模块
[root@4-Proxy1-10 ~]# cat /etc/nginx/conf.c/tcp_proxy.conf
stream {

#定义日志的格式
log_format  proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
                  '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;

    #调用日志,使用proxy格式
    access_log /var/log/nginx/tcp_proxy.log proxy;

......其他配置省略......

#查看日志 tail -f /var/log/nginx/tcp_proxy.log 可以看见日志
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MySQL
    +关注

    关注

    1

    文章

    789

    浏览量

    26301
  • SSH
    SSH
    +关注

    关注

    0

    文章

    179

    浏览量

    16232
  • LVS
    LVS
    +关注

    关注

    1

    文章

    35

    浏览量

    9897
  • nginx
    +关注

    关注

    0

    文章

    139

    浏览量

    12127
  • TCP通信
    +关注

    关注

    0

    文章

    146

    浏览量

    4184
收藏 人收藏

    评论

    相关推荐

    负载均衡器的诞生和工作机制

    今天我们来深度揭秘一下负载均衡器 LVS 的秘密,相信大家看了你管这破玩意儿叫负载均衡?这篇文章后,还是有不少疑问,比如 LVS 看起来只有类似路由器的转发功能,为啥说它是
    的头像 发表于 01-04 12:26 829次阅读
    <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>器的诞生和工作机制

    高性能负载均衡Tomcat集群的实现

    Nginx+Tomcat搭建高性能负载均衡集群
    发表于 08-21 14:31

    使用nginx实现tomcat负载均衡

    Nginx+tomcat+memcached实现负载均衡及session(交叉存储)
    发表于 08-28 08:52

    nginx实现的负载均衡

    nginx实现负载均衡
    发表于 05-04 13:42

    16nginx+keepalived +zuul如何实现高可用及负载均衡

    学习笔记微服务-16 nginx+keepalived +zuul 实现高可用及负载均衡
    发表于 05-22 10:16

    基于应用负载均衡策略的分析

    基于应用负载均衡策略的分析
    发表于 03-26 08:28 8次下载

    Nginx和Tomcat负载均衡实现session共享

    Nginx和Tomcat负载均衡实现session共享
    发表于 09-05 10:40 9次下载
    <b class='flag-5'>Nginx</b>和Tomcat<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>实现session共享

    构建实战:Nginx+IIS构筑Web服务器集群负载均衡

    构建实战:Nginx+IIS构筑Web服务器集群负载均衡
    发表于 09-05 10:56 4次下载
    构建实战:<b class='flag-5'>Nginx</b>+IIS构筑Web服务器集群<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>

    f5负载均衡Nginx负载均衡有什么区别

    负载均衡是分摊到多个操作单元上进行执行,建立在现有网络结构之上,提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。市场上有很多的负载
    发表于 01-01 18:41 8873次阅读
    f5<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>和<b class='flag-5'>Nginx</b><b class='flag-5'>负载</b><b class='flag-5'>均衡</b>有什么区别

    一文读懂Nginx、Apache工作原理

    在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7负载均衡服务器来使用。根据我的测试结果,
    发表于 04-26 11:33 2456次阅读

    详解Nginx负载均衡配置误区

    之前有很多朋友问关于Nginx的upstream模块中max_fails及fail_timeout,这两个指令,分别是配置关于负载均衡过程中,对于上游(后端)服务器的失败尝试次数和不可用时间,很多人
    的头像 发表于 05-13 14:36 1606次阅读
    详解<b class='flag-5'>Nginx</b><b class='flag-5'>负载</b><b class='flag-5'>均衡</b>配置误区

    负载均衡能否能直接从LVS打到站点

    改成下面的架构 答案是不行,为什么?其实我在上文中有提到一些点已经暗示了,只不过不那么明显而已,我再单独把这些点拎出来 LVS 是负载均衡N
    的头像 发表于 08-17 10:29 1329次阅读
    <b class='flag-5'>负载</b><b class='flag-5'>均衡</b>能否能直接从LVS打到站点<b class='flag-5'>层</b>

    聊聊Nginx作为负载均衡器它支持的算法都有哪些?

    Nginx作为一款最流行WEB服务器软件,同时也是一款反向代理和负载均衡软件。毫不夸张地说,Nginx负载
    的头像 发表于 02-14 17:50 665次阅读

    如何使用Nginx作为应用程序的负载均衡器?

    Nginx因其高性能和可扩展性而广受欢迎。它是排名第一的开源Web 服务器。在本教程中,我们将学习如何使用Nginx作为应用程序的负载均衡器? 要将
    的头像 发表于 03-23 14:52 1010次阅读

    搭建Keepalived+Lvs+Nginx高可用集群负载均衡

      一、Nginx安装 二、配置反向代理 三、配置负载均衡 、upstream指令参数 五、配置ssl证书提供https访问 六、配置ha ngi
    的头像 发表于 06-25 15:39 2628次阅读
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b>高可用集群<b class='flag-5'>负载</b><b class='flag-5'>均衡</b>