负载均衡
理论
ULB:ucloud
SLB:阿里云
CLB:腾讯云
QLB:七牛云
ECS-业务服务器
OSS-数据存储服务器,类似NFS
Redis-缓存
RDS-关系型数据库
CDN-内容分发网络,各地建立缓存服务器
将收到的请求,平均分配到后端服务器,当一台服务器出现问题,不影响业务
提高并发,提升响应速度,高容灾性
传输层
网络层
数据链路层
物理层
4层负载均衡只管接收请求后交给后方
应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等
会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
物理层:建立、维护、断开物理连接。
7层负载均衡会解开数据包然后根据内容交给对应的业务服务器
nginx:1.9版本之前只支持7层负载均衡,1.9版本之后支持四层和七层,因为多了一个stream模块
Haproxy:支持四层负载均衡和七层负载均衡,是一个专业的负载均衡软件
LVS:专业的四层负载均衡服务器 ipvsadm 命令 将服务器变成一台“硬件负载均衡”
F5:硬件负载均衡服务器
4层负载均衡
1、四层负载均衡仅能转发TCP/IP协议、UDP协议、通常用来转发端口,如:tcp/22、udp/53;
2、四层负载均衡可以用来解决七层负载均衡端口限制问题;(七层负载均衡最大使用65535个端口号)!!!!
3、四层负载均衡可以解决七层负载均衡单点故障问题;(多台后端七层负载均衡能同时的使用)
4、四层的转发效率比七层的高得多,但仅支持tcp/ip/udp协议,不支持http和https协议;
5、通常大并发场景通常会选择使用在七层负载前面增加四层负载均衡。
1、安装官方源Nginx
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
yum -y install nginx
[root@4lb01 ~]
nginx: [emerg] unknown directive "stream" in /etc/nginx/stream/4lb.conf:1
nginx: configuration file /etc/nginx/nginx.conf test failed
2、删除默认的7层Nginx配置文件
rm -f /etc/nginx/conf.d/default.conf
3、编辑Nginx主配置文件
vim /etc/nginx/nginx.conf
......
events {
}
include /etc/nginx/stream/*.conf;
http {
}
......
4、创建4层配置文件的目录
mkdir /etc/nginx/stream/
5、编辑4层配置文件
vim /etc/nginx/stream/4lb.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 lb {
server 10.0.0.5:80;
server 10.0.0.6:80;
}
upstream lb2 {
server 10.0.0.5:443;
server 10.0.0.6:443;
}
server {
listen 80;
proxy_pass lb;
}
server {
listen 443;
proxy_pass lb2;
}
}
6、启动并检查 nginx 开启状态
systemctl enable nginx
systemctl start nginx && systemctl status nginx
-----------------------------------------------
stream {
upstream ssh {
server 10.0.0.7:22;
}
server {
listen 7777;
proxy_pass ssh;
}
}
stream {
upstream mysql {
server 10.0.0.51:3306;
}
server {
listen 8888;
proxy_pass mysql;
}
}
-----------------------------------------------
6、访问4层负载均衡的7777和8888端口,测试端口转发是否正常
ssh 10.0.0.5 7777
10.0.0.5 8888
7、打开防火墙
[root@web01 ~]
Created symlink from /etc/systemd/system/iptables.service to /dev/null.
[root@web01 ~]
Removed symlink /etc/systemd/system/iptables.service.
systemctl start firewalld
systemctl enable firewalld
firewall-cmd --list-all
firewall-cmd --permanent --add-source=10.0.0.1 --zone=trusted
firewall-cmd --permanent --remove-s