14、Nginx四层负载均衡
2024-09-01 11:25:57
1.Nginx四层负载均衡基本概述
1.1.什么是四层负载均衡
四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都是指的OSI网络模型。
1.2.四层层负载均衡应用场景
- 1.四层+七层来作负载均衡,4层可以保证7层的负载均衡的高可用性。如:nginx就无法保证自己的服务高可用,需要依赖lvs或者keepalive来作。
- 2.如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用4层进行端口的转发就可以了,所以使用4层负载均衡。
1.3.四层+七层构建大规模集群架构使用场景
1.4四层负载均衡总结
- 1.四层负载均衡仅能转发TCP/IP协议、UDP协议,通常用来转发端口,如: tcp/3306,tcp/22,udp/53。
- 2.四层负载均衡可以用来解决七层负载均衡的端口限制问题。(七层负载均衡最大使用65535个端口号)
- 3.可以用来解决七层负载均衡的高可用问题。(多台后端七层负载均衡能同时的使用)
- 4.四层的转发效率比七层的高的多,但仅支持tcp/ip协议,不支持http或者https协议
2.Nginx四层负载均衡场景实践
Nginx如何配置四层负载均衡
- 1.通过访问负载均衡的5555端口,实际是后端的web01的22端口在提供服务。
- 2.通过访问负载均衡的6666端口,实际是后端的mysql的3306端口在提供服务。
2.1.Nginx四层负载均衡配置语法
stream {
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;
}
server {
listen 12345;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass backend;
}
}
2.2.Nginx四层负载均衡实战
[root@lb01 ~]# mkdir -p /etc/nginx/conf.c
[root@lb01 ~]# vim /etc/nginx/nginx.conf
# 在events层下面,http层上面配置include
include /etc/nginx/conf.c/*.conf;
# 编写四层代理配置
[root@lb01 ~]# cd /etc/nginx/conf.c/
[root@lb01 conf.c]# cat stream.conf
stream {
#1.定义虚拟资源池
upstream ssh {
server 172.16.1.7:22;
}
upstream mysql {
server 172.16.1.51: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@lb01 conf.c]# systemctl restart nginx
2.3.如何记录四层负载均衡日志,四层负载均衡日志必须配置在stream模块
[root@lb01 ~]# cat /etc/nginx/conf.c/tcp_proxy.conf
stream {
#定义日志的格式
log_format proxy '$remote_addr - [$time_local] $status $protocol'
'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
#调用日志,使用proxy格式
access_log /var/log/nginx/tcp_proxy.log proxy;
upstream ssh {
server 172.16.1.7:22;
}
server {
listen 5555;
proxy_pass proxy_node1;
}
}
最新文章
- 转载:C#中的Invoke理解一
- 消息框用法MessageBox
- MYSQL基础--学习笔记
- no.4 抽奖测试
- 【leetcode❤python】Move Zeroes
- 【转】javascript变量作用域、匿名函数及闭包
- 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)
- windows平台发消息到非UI线程.
- 转: seajs手册与文档之 -- require规则
- windows接口被占用
- css中的float和position
- 功能强大的swagger-editor的介绍与使用
- 【Python 05】Python开发环境搭建
- 题解-CodeChef IOPC14L Sweets Problem
- 关于ASP.NET 服务器报错 Server Error in '/' Application Runtime Error 错误及解决方法
- Django项目配置日志
- Windows 下获取硬盘序列号
- English trip V1 - B 17. Giving Information 提供信息 Teacher:Taylor Key: Person Information
- Java中多线程访问冲突的解决方式
- Linux kernel AIO
热门文章
- 加密算法之 MD5算法
- Postman系列之发送请求(一)
- 阶段3 3.SpringMVC·_05.文件上传_2 文件上传之传统方式上传代码回顾
- kvm简介及创建虚拟化安装(1)
- 恒生投资交易系统性O3性能测量
- JavaScript(2):函数
- Intervals and Timeouts
- MSSQL字符串分割
- 惊讶!我定的日志规范被CTO在全公司推广了
- 重学Python - Day 07 - python基础 ->; linux命令行学习 -- 常用命令 一