1.Nginx四层负载均衡基本概述

1.什么是四层负载均衡
四层负载均衡基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,它的组装在四层基础之上,无论四层还是七层都是指的OSI网络模型。
2.四层层负载均衡应用场景
1.四层+七层来作负载均衡,4层可以保证7层的负载均衡的高可用性。如:nginx就无法保证自己的服务高可用,需要依赖lvs或者keepalive来作。
2.,如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用4层进行端口的转发就可以了,所以使用4层负载均衡。

3.四层+七层构建大规模集群架构使用场景
08.Nginx四层负载均衡 - 图1
四层负载均衡总结
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端口在提供服务。

1.Nginx四层负载均衡配置语法

  1. stream {
  2. upstream backend {
  3. hash $remote_addr consistent;
  4. server backend1.example.com:12345 weight=5;
  5. server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
  6. server unix:/tmp/backend3;
  7. }
  8. server {
  9. listen 12345;
  10. proxy_connect_timeout 1s;
  11. proxy_timeout 3s;
  12. proxy_pass backend;
  13. }
  14. }

2.Nginx四层负载均衡实战

  1. [root@lb01 ~]# mkdir -p /etc/nginx/conf.c
  2. [root@lb01 ~]# vim /etc/nginx/nginx.conf
  3. # 在events层下面,http层上面配置include
  4. include /etc/nginx/conf.c/*.conf;
  5. # 编写四层代理配置
  6. [root@lb01 ~]# cd /etc/nginx/conf.c/
  7. [root@lb01 conf.c]# cat stream.conf
  8. stream {
  9. #1.定义虚拟资源池
  10. upstream ssh {
  11. server 172.16.1.7:22;
  12. }
  13. upstream mysql {
  14. server 172.16.1.51:3306;
  15. }
  16. #2.调用虚拟资源池
  17. server {
  18. listen 5555;
  19. proxy_connect_timeout 1s;
  20. proxy_timeout 300s;
  21. proxy_pass ssh;
  22. }
  23. server {
  24. listen 6666;
  25. proxy_connect_timeout 1s;
  26. proxy_timeout 300s;
  27. proxy_pass mysql;
  28. }
  29. }
  30. [root@lb01 conf.c]# systemctl restart nginx

3.如何记录四层负载均衡日志,四层负载均衡日志必须配置在stream模块

  1. [root@lb01 ~]# cat /etc/nginx/conf.c/tcp_proxy.conf
  2. stream {
  3. #定义日志的格式
  4. log_format proxy '$remote_addr - [$time_local] $status $protocol'
  5. '"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
  6. #调用日志,使用proxy格式
  7. access_log /var/log/nginx/tcp_proxy.log proxy;
  8. upstream ssh {
  9. server 172.16.1.7:22;
  10. }
  11. server {
  12. listen 5555;
  13. proxy_pass proxy_node1;
  14. }
  15. }