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;
}
}

最新文章

  1. 转载:C#中的Invoke理解一
  2. 消息框用法MessageBox
  3. MYSQL基础--学习笔记
  4. no.4 抽奖测试
  5. 【leetcode❤python】Move Zeroes
  6. 【转】javascript变量作用域、匿名函数及闭包
  7. 创业不要在IT业内创(市场太小,而且都喜欢自己折腾、没有花钱的习惯)
  8. windows平台发消息到非UI线程.
  9. 转: seajs手册与文档之 -- require规则
  10. windows接口被占用
  11. css中的float和position
  12. 功能强大的swagger-editor的介绍与使用
  13. 【Python 05】Python开发环境搭建
  14. 题解-CodeChef IOPC14L Sweets Problem
  15. 关于ASP.NET 服务器报错 Server Error in '/' Application Runtime Error 错误及解决方法
  16. Django项目配置日志
  17. Windows 下获取硬盘序列号
  18. English trip V1 - B 17. Giving Information 提供信息 Teacher:Taylor Key: Person Information
  19. Java中多线程访问冲突的解决方式
  20. Linux kernel AIO

热门文章

  1. 加密算法之 MD5算法
  2. Postman系列之发送请求(一)
  3. 阶段3 3.SpringMVC·_05.文件上传_2 文件上传之传统方式上传代码回顾
  4. kvm简介及创建虚拟化安装(1)
  5. 恒生投资交易系统性O3性能测量
  6. JavaScript(2):函数
  7. Intervals and Timeouts
  8. MSSQL字符串分割
  9. 惊讶!我定的日志规范被CTO在全公司推广了
  10. 重学Python - Day 07 - python基础 -> linux命令行学习 -- 常用命令 一