一、四层负载均衡概述
1、四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;如:nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。
2、tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。
3.四层可以做:
mysql读从库的负载均衡
跳板机的端口映射
二、四层负载均衡+七层负载均衡大规模集群架构
四层负载均衡总结
1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)
3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用)
4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议;
5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。
三、Nginx四层负载均衡配置
1.环境准备
| 主机 | 外网IP | 内网IP | 身份 |
| lb4 | 10.0.0.3 | 172.16.1.3 | 四层负载均衡 |
| lb01 | 10.0.0.4 | 172.16.1.4 | 七层负载均衡 |
| lb02 | 10.0.0.5 | 172.16.1.5 | 七层负载均衡 |
注意:两个七层负载均衡要一模一样,根据上节内容进行配置,这里就不一一概述了。
四、配置四层负载均衡
1.创建四层负载配置的目录
[root@lb4 nginx]# mkdir /etc/nginx/conf.c
2.配置四层负载均衡
四层负载均衡stream模块跟http模块同级别,不能配置在http里面。
nginx配置主配置文件里面一个include包含的语句。
events {
worker_connections 1024;
}
include /etc/nginx/conf.c/*.conf;
http {
...
}
编写配置文件
[root@lb4 nginx]# vim /etc/nginx/conf.c/lb_proxy.conf
stream {
upstream lbserver {
server 172.16.1.4:80;
server 172.16.1.5:80;
}
server {
listen 80;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass lbserver;
}
}
重启nginx
[root@lb4 nginx]# systemctl restart nginx
如果重启报错
[root@lb4 nginx]# rm -rf /etc/nginx/conf.d/*
3.配置四层负载均衡日志
[root@lb4 nginx]# vim /etc/nginx/conf.c/lb_proxy.conf
stream {
log_format main '$remote_addr $remote_port - [$time_local] $status $protocol '
'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
access_log /var/log/nginx/lb4_access.log main;
upstream lbserver {
server 172.16.1.4:80;
server 172.16.1.5:80;
}
server {
listen 80;
proxy_connect_timeout 1s;
proxy_timeout 3s;
proxy_pass lbserver;
}
}
五、nginx四层负载均衡端口转发
1.使用nginx四层负载均衡实现tcp转发
请求负载均衡 5555 —> 172.16.1.7:22; web01
请求负载均衡 6666 —> 172.16.1.51:3306;
2.配置nginx四层负载均衡实现tcp的转发
[root@lb03 conf.c]# vim /etc/nginx/conf.c/lb_domain.conf
stream {
log_format proxy '$remote_addr $remote_port - [$time_local] $status $protocol '
'"$upstream_addr" "$upstream_bytes_sent" "$upstream_connect_time"' ;
access_log /var/log/nginx/proxy.log proxy;
#定义转发ssh的22端口
upstream ssh_7 {
server 10.0.0.7:22;
}
#定义转发mysql的3306端口
upstream mysql_51 {
server 10.0.0.51:3306;
}
server {
listen 5555;
proxy_connect_timeout 3s;
proxy_timeout 300s;
proxy_pass ssh_7;
}
server {
listen 6666;
proxy_connect_timeout 3s;
proxy_timeout 3s;
proxy_pass mysql_51;
}
}
3.验证配置文件。重新加载服务
[root@lb03 conf.c]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@lb03 conf.c]# nginx -s reload



