什么是四层负载均衡
1 |
四层负载均衡是基于传输层协议包来封装的(如:TCP/IP),那我们前面使用到的七层是指的应用层,他的组装在四层的基础之上,无论四层还是七层都是指的OSI网络模型。 |
应用场景
1 2 3 4 |
1.四层+七层来做负载均衡,四层可以保证七层的负载均衡的高可用性;nginx就无法保证自己的服务高可用,需要依赖LVS或者keepalive。 2.tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用四层进行端口的转发就可以了,所以使用四层负载均衡。 3.数据库读写分离负载 4.跳板机端口映射 |
四层负载均衡特点
1 2 3 4 5 |
1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53; 2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号) 3、四层负载均衡可以解决七层负载均衡高可用问题;(多台后端七层负载均衡能同事的使用) 4、四层的转发效率比七层的高得多,但仅支持tcp/ip协议,不支持http和https协议; 5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。 |
四层负载均衡实践
环境准备
主机 | IP | 身份 |
---|---|---|
lb03 | 10.0.0.6 | 四层负载均衡 |
lb01 | 10.0.0.4 | 七层负载均衡 |
lb02 | 10.0.0.5 | 七层负载均衡 |
配置四层负载均衡
四层负载均衡语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Syntax: stream { ... } Default: — Context: main #示例:四层负载均衡stream模块跟http模块时同一级别,不能配置在http层里面 stream { upstream backend { server backend1.example.com:12345 weight=5; server 127.0.0.1:12345 max_fails=3 fail_timeout=30s; } server { listen 12345; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass backend; } } |
配置nginx配置文件
1 2 3 4 5 6 7 8 |
[root@lb03 ~]# vim /etc/nginx/nginx.conf events { worker_connections 1024; } include /etc/nginx/conf.c/*.conf; http { ... } |
配置四层负载均衡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@lb03 ~]# mkdir /etc/nginx/conf.c [root@lb03 ~]# vim /etc/nginx/conf.c/4lb.conf stream { upstream lbserver { server 10.0.0.4:80; server 10.0.0.5:80; } server { listen 80; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass lbserver; } } #检查配置并启动 [root@lb03 ~]# nginx -t [root@lb03 ~]# systemctl restart nginx #如果启动失败,则删除httpc层内容或者删除conf.d的配置文件 |
配置四层负载均衡日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#四层负载均衡是没有access的日志的,因为在nginx.conf的配置中,access的日志格式是配置在http下的,而四层负载均衡配置时在http以外的; #如果需要日志则需要配置在stream下面 [root@web03 conf.c]# cat 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; upstream lbserver { server 10.0.0.4:80; server 10.0.0.5:80; } server { listen 80; proxy_connect_timeout 1s; proxy_timeout 3s; proxy_pass lbserver; } } |
四层负载均衡做端口转发
请求负载均衡的5555端口,转发至172.16.1.7的22端口
1 2 3 4 5 6 7 8 9 10 11 |
[root@lb03 /etc/nginx/conf.c]#vim 4lb.conf stream { upstream web_7 { server 172.16.1.7:22; } server { listen 5555; proxy_pass web_7; } } |
请求负载均衡的6666端口,转发至172.16.1.51的3306端口
1 2 3 4 5 6 7 8 9 10 11 |
stream { upstream mysql { server 172.16.1.51:3306; } server { listen 6666; proxy_pass mysql; } } |