热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

4层负载均衡

4层负载均衡什么是四层负载均衡?bash`四层负载均衡是基于传输层协议包来封装的(如:TCPIP),那我们前面使用到的七层负载均衡指的是应用层,它的组装在四层的基础之上,

4层负载均衡

什么是四层负载均衡?

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

四层负载均衡应用场景

#1.四层+七层来作负载均衡,4层可以保证7层的负载均衡的高可用性。如:nginx就无法保证自己的服务高可用,需要依赖lvs或者keepalive来作。

#2.如:tcp协议的负载均衡,有些请求是TCP协议的(mysql、ssh),或者说这些请求只需要使用4层进行端口的转发就可以了,所以使用4层负载均衡。
	比如做:mysql读的负载均衡(轮询)
	比如做:端口映射、端口转发         tcp/udp

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

c79088303d6979309ea5ca43fae0b99.png

64428638baee56fb9679c916f9c1626.png

四层负载均衡总结

`1.四层负载均衡仅能转发TCP/IP协议、UDP协议,通常用来转发端口,如: tcp/3306,tcp/22,udp/53。

`2.四层负载均衡可以用来解决七层负载均衡的端口限制问题。(七层负载均衡最大使用65535个端口号)

`3.可以用来解决七层负载均衡的高可用问题。(多台后端七层负载均衡能同时的使用)

`4.四层的转发效率比七层的高的多,但仅支持tcp/ip协议,不支持http或者https协议

`5.通常大并发场景会选择在七层负载前面加上四层负载均衡

tcp的负载均衡说的就是4层
http的负载均衡说的就是7层
7层负载均衡只能做http协议相关的
4层负载均衡只能做tcp协议相关的   ip+端口转发

四层负载均衡场景实现

lb-4层 10.0.0.3
lb-7层 10.0.0.5 172.16.1.5
lb-7层 10.0.0.6 172.16.1.6
nfs
mysql
redis

1.在lb02上面安装Nginx

[root@lb02 ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@lb02 ~]#  yum install nginx -y

2.在lb02上面拷贝lb01的所有nginx相关配置即可

保持高度一致

[root@lb02 ~]# scp -rp root@172.16.1.5:/etc/nginx /etc/

3.启动nginx

[root@lb02 conf.d]# nginx -t
[root@lb02 conf.d]# systemctl start nginx
[root@lb02 conf.d]# systemctl enable nginx

4.域名解析

10.0.0.6 php.oldboy.com zh.oldboy.com blog.oldboy.com

\'查看5能不能登录之前的网站了 php.oldboy.com  zh.oldboy.com blog.oldboy.com
\'发现知乎打不开网页了  报错502 
\'这个时候先排查是web01 还是web02有错 down一台机器就行
\'找到web02出错
[root@web02 ~]# vim /etc/php.ini 
/session
\'把之前那个auto改成0就好了
\'换成6 也能登录网页

5.配置nginx四层负载均衡

配置可以看官网 怎么配置

stream   --with-stream 这个模块必须有

[root@lb03~]# cat /etc/yum.repos.d/nginx.repo 
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
[root@lb03~]#  yum install nginx -y	
[root@lb03~]# vim /etc/nginx/nginx.conf
events {
    ....
}

include /etc/nginx/conf.c/*.conf;#在这个文件的这两行中间加上这段话

http {
	.....
}
`创建存放四层负载均衡配置的目录

[root@lb03 ~]# rm -f /etc/nginx/conf.d/default.conf   #删除http的80端口  因为四层不做http
[root@lb03 ~]# mkdir /etc/nginx/conf.c
[root@lb03 ~]# cd /etc/nginx/conf.c
[root@lb03 conf.c]# cat lb_domain.conf 
stream {    #官网配置模块
    upstream lb {
        server 172.16.1.5:80 weight=5 max_fails=3 fail_timeout=30s;
        server 172.16.1.6:80 weight=5 max_fails=3 fail_timeout=30s;
    }

    server {
        listen 80;
        proxy_connect_timeout 3s;
        proxy_timeout 3s;
        proxy_pass lb; #直接给资源池名字 不用带http://了
    }
}

[root@lb03 conf.c]# nginx -t
[root@lb03 conf.c]# systemctl restart nginx
[root@lb03 conf.c]# systemctl enable nginx

域名解析

10.0.0.4 zh.oldboy.com web.oldboy.com php.oldboy.com blog.oldboy.com

刷新

a63080242e2dec1229b5a3a92c8a8e0.png

[root@lb01 ~]# tail -f /var/log/nginx/access.log 
[root@lb02 ~]# tail -f /var/log/nginx/access.log 

\'查看日志 发现两边是轮询登录网站的

使用nginx四层负载均衡实现tcp的转发

请求负载均衡 5555 ---> 172.16.1.7:22;
请求负载均衡 6666 ---> 172.16.1.51:3306;

[root@lb03 ~]# cat /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;
    }
}

nginx四层负载均衡记录日志

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;
}

日志展示效果
10.0.0.1 59129 - [23/Jan/2019:12:11:40 +0800] 200 TCP "172.16.1.5:80" "0" "0.000"
10.0.0.1 59124 - [23/Jan/2019:12:11:41 +0800] 200 TCP "172.16.1.6:80" "1298" "0.000"
10.0.0.1 59145 - [23/Jan/2019:12:11:44 +0800] 200 TCP "172.16.1.6:80" "1316" "0.001"
10.0.0.1 59598 - [23/Jan/2019:12:22:03 +0800] 200 TCP "10.0.0.7:22" "2213" "0.001"
10.0.0.1 59672 - [23/Jan/2019:12:23:51 +0800] 200 TCP "10.0.0.7:22" "2893" "0.001"
10.0.0.1 59698 - [23/Jan/2019:12:26:43 +0800] 200 TCP "10.0.0.7:22" "3309" "0.000"


推荐阅读
author-avatar
mobiledu2502852625
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有