一、四层负载均衡概述
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