Nginx实现四层负载均衡

Nginx实现四层负载均衡

Nginx四层负载均衡概述

什么是四层负载均衡

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

根据 OSI 七层模型,四层负载均衡,在传输层做负载均衡

四层负载均衡应用场景

  • 1、4层负载可以保证7层负载的高可用:四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性,如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepaive。
  • 2、端口映射(端口转发):如:tcp协议的负载均衡,有些请求是TCP协议的(mysql,ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。

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

img

四层负载均衡总结

  • 1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53,
  • 2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口)
  • 3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同时的使用)
  • 4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
  • 5、通常大并发场景通常会选择使用在七层负载均衡前面增加四层负载均衡

Nginx四层负载均衡实战

四层负载做端口映射

[root@lb02 ~]# vim /etc/nginx/nginx.conf(写在http上面)
stream {
        upstream web02_ssh {
                server 172.16.1.8:22;
        }

        upstream db01_ssh {
                server 172.16.1.51:22;
        }
        server {
                listen 2222;
                proxy_pass web02_ssh;
        }
        server {
                listen 2223;
                proxy_pass db01_ssh;
        }
}


### 端口映射的另一种写法
[root@lb01 conf.c]# vim lb_db01.conf
stream {
	upstream db01_ssh {
	server 172.16.1.51:22;
	}
	server {
		listen 2223;
		proxy_pass db01_ssh;
	}
}

stream做4层负载

[root@lb02 ~]# vim /etc/nginx/nginx.conf(写在http上面)
stream {
        upstream lb{
                server 172.16.1.5:80;
                server 172.16.1.6:80;
        }

        server {
                listen 80;
                proxy_pass lb;
                proxy_connect_timeout 3s;
                proxy_timeout 3s;
        }
}

## 端口映射:
- 虚拟机
- nginx stream模块
- 防火墙 CenOS 6:iptable CenOS 7:firewalld

## 四层负载添加日志
log_format proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
				'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
access_log /var/log/nginx/tcp.log proxy;
posted @ 2021-08-07 11:53  平凡的人不平凡的事  阅读(315)  评论(0)    收藏  举报