【运维知识进阶篇】集群架构-Nginx四层负载均衡详解

简介: 【运维知识进阶篇】集群架构-Nginx四层负载均衡详解

四层负载均衡含义及应用场景

四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们介绍的的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型。我们之前介绍了七层负载均衡,这篇文章介绍下四层负载均衡。

四层负载均衡在一般企业中是用不到的,因为没有那么大的并发量,我们用七层足以,不会涉及端口限制问题。但是在大规模集群架构中也是不可或缺的,我们往往采取四层+七层来构建大规模集群架构,所以我们也需要深入学习下,具体使用场景有以下两种。

1、四层+七层做负载均衡,四层保证七层的高可用性。如:Nginx无法保证自己的高可用性,需要依赖LVS或者keepalive。

2、TCP协议的负载均衡,有些请求是TCP协议的(mysql、ssh),这些请求只需要四层转发即可。

Nginx四层负载均衡配置测试

1、前期准备

我们准备一台虚拟机LB00(10.0.0.4,172.16.1.4)

配好yum源,安装Linux,启动Linux

2、添加配置目录到主配置文件并创建该目录

1. [root@LB00 nginx]# cat /etc/nginx/nginx.conf 
2. 
3. user  nginx;
4. worker_processes  auto;
5. 
6. error_log  /var/log/nginx/error.log notice;
7. pid        /var/run/nginx.pid;
8. 
9. 
10. events {
11.     worker_connections  1024;
12. }
13. 
14. 
15. include /etc/nginx/conf.c/*.conf; #在nginx主配置文件添加配置文件路径
16. 
17. http {
18.     include       /etc/nginx/mime.types;
19. default_type  application/octet-stream;
20. 
21.     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
22. '$status $body_bytes_sent "$http_referer" '
23. '"$http_user_agent" "$http_x_forwarded_for"';
24. 
25. access_log  /var/log/nginx/access.log  main;
26. 
27.     sendfile        on;
28.     #tcp_nopush     on;
29. 
30.     keepalive_timeout  65;
31. 
32.     #gzip  on;
33. 
34.     include /etc/nginx/conf.d/*.conf;
35. }
36. [root@LB00 nginx]# mkdir /etc/nginx/conf.c

3、添加负载均衡配置文件并进行配置

1. [root@LB00 nginx]# cd /etc/nginx/conf.c
2. [root@LB00 conf.c]# vim proxy_4.conf
3. stream {
4.     upstream lb {
5.             server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;
6.             server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;
7.     }
8. 
9.     server {
10.             listen 80;
11.             proxy_connect_timeout 3s;
12.             proxy_timeout 3s;
13.             proxy_pass lb;
14.     }
15. }
16. ~                                                  
17. <4.conf" [New] 13L, 317C written 
18. [root@LB00 conf.c]# nginx -t
19. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
20. nginx: configuration file /etc/nginx/nginx.conf test is successful
21. [root@LB00 conf.c]# systemctl restart nginx

4、windows添加hosts解析,并查看nginx日志

注意:4层负载均衡没有access日志,因为在nginx.conf的配置中,access的日志格式是配置在http下的,而四层复杂均衡配置实在http以外的。

如果需要日志则需要如下配置,将日志保存到proxy.log中

1. [root@LB00 conf.c]# cat lb_domain.conf 
2. stream {
3.     log_format  proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
4. '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
5. access_log /var/log/nginx/proxy.log proxy;
6.     upstream lb {
7.             server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;
8.             server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;
9.     }
10. 
11.     server {
12.             listen 80;
13.             proxy_connect_timeout 3s;
14.             proxy_timeout 3s;
15.             proxy_pass lb;
16.     }
17. }

LB00日志

LB01日志

Web01日志

一切正常,由LB00做四层负载均衡到LB01和LB02,LB0和LB02做七层负载均衡到Web01和Web02,静态数据去访问NFS,动态数据去请求MySQL。

 

Nginx四层负载均衡端口转发

实现请求负载均衡5555转发到172.16.1.7:22,请求负载均衡6666转发到172.16.1.51:3306

配置文件

1. [root@lb4-01 ~]# cat /etc/nginx/conf.c/lb_domain.conf 
2. stream {
3.     log_format  proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
4. '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
5. access_log /var/log/nginx/proxy.log proxy;
6. 
7. 
8.     upstream ssh_7 {
9.             server 10.0.0.7:22; #定义转发ssh的22端口
10.     }
11. 
12.     upstream mysql_51 {
13.             server 10.0.0.51:3306; #定义转发mysql的3306端口
14.     }
15.     server {
16.             listen 5555;
17.             proxy_connect_timeout 3s;
18.             proxy_timeout 300s;
19.             proxy_pass ssh_7;
20.     }
21. 
22.     server {
23.             listen 6666;
24.             proxy_connect_timeout 3s;
25.             proxy_timeout 3s;
26.             proxy_pass mysql_51;
27.     }
28. }

5555端口测试

6666端口测试

 

四层负载均衡总结

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

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

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

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

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


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
10月前
|
机器学习/深度学习 人工智能 运维
云架构不是养祖宗,智能运维教你省心又省钱
云架构不是养祖宗,智能运维教你省心又省钱
251 2
|
10月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
消息中间件 负载均衡 中间件
⚡ 构建真正的高性能即时通讯服务:基于 Netty 集群的架构设计与实现
本文介绍了如何基于 Netty 构建分布式即时通讯集群。随着用户量增长,单体架构面临性能瓶颈,文章对比了三种集群方案:Nginx 负载均衡、注册中心服务发现与基于 ZooKeeper 的消息路由架构。最终选择第三种方案,通过 ZooKeeper 实现服务注册发现与消息路由,并结合 RabbitMQ 支持跨服务器消息广播。文中还详细讲解了 ZooKeeper 搭建、Netty 集群改造、动态端口分配、服务注册、负载均衡及消息广播的实现,构建了一个高可用、可水平扩展的即时通讯系统。
1207 0
|
9月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
355 8
|
10月前
|
存储 监控 NoSQL
Redis高可用架构全解析:从主从复制到集群方案
Redis高可用确保服务持续稳定,避免单点故障导致数据丢失或业务中断。通过主从复制实现数据冗余,哨兵模式支持自动故障转移,Cluster集群则提供分布式数据分片与水平扩展,三者层层递进,保障读写分离、容灾切换与大规模数据存储,构建高性能、高可靠的Redis架构体系。
|
弹性计算 负载均衡 网络协议
阿里云SLB深度解析:从流量分发到架构优化的技术实践
本文深入探讨了阿里云负载均衡服务(SLB)的核心技术与应用场景,从流量分配到架构创新全面解析其价值。SLB不仅是简单的流量分发工具,更是支撑高并发、保障系统稳定性的智能中枢。文章涵盖四层与七层负载均衡原理、弹性伸缩引擎、智能DNS解析等核心技术,并结合电商大促、微服务灰度发布等实战场景提供实施指南。同时,针对性能调优与安全防护,分享连接复用优化、DDoS防御及零信任架构集成的实践经验,助力企业构建面向未来的弹性架构。
1014 76
|
12月前
|
运维 监控 Cloud Native
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
332 1
|
11月前
|
运维 监控 安全
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
290 0
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构

热门文章

最新文章