一、负载均衡的作用:
1. 提高系统性能:通过扩展网络设备和服务器的带宽,优化访问请求在服务器组之间的分配,提高系统的反应速度和总体性能。
2. 监控服务器的运行状态:负载均衡能够监控服务器的运行状态,提高整个服务器组的可靠性。
3. 提供服务一致性:负载均衡器具有提供服务一致性的功能,通过读取客户端所发出请求内的信息,进行重写报头程序然后将请求发送至合适的服务器上,该服务器会维护着该客户端信息。
4. 摆脱停机时间:在基于云服务器中,可以在将流量引导到另一台服务器的资源之后进行维护,前提是它们不在维护中,从而可以消除网站的停机时间。
5. 管理服务器故障:如果其中一台服务器发生故障,则可以快速移动流量,将故障服务器的流量流入到另一台服务器中。
6. 转发功能:按照一定的算法,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
7. 恢复添加:如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
8. 分发流量:分发流量、请求到不同的服务器。使流量平均分配,提高整个集群的响应速度、服务的高可用性。
二、负载均衡常用处理方式:
负载均衡分为四层负载均衡和七层负载均衡。四层负载均衡是工作在 OSI 七层协议的第四层——传输层,基于IP+PORT的负载均衡,主要工作是转发。实现四层负载均衡的方式包括硬件(如F5、BIG-IP、Radware等)和软件(如LVS、Nginx、Haproxy等)。七层负载均衡是工作在七层协议的第七层-应用层,基于虚拟的URL或主机IP的负载均衡,主要工作是代理。实现七层负载均衡的方式主要是软件(如Nginx、Hayproxy等)。
三、四层和七层负载均衡的区别:
1. 四层负载均衡数据包是在底层就进行了分发,而七层负载均衡数据包则在最顶端进行分发,所以四层负载均衡的效率比七层负载均衡的效率要高;
2. 四层负载均衡不识别域名,而七层负载均衡识别域名;
3. 除了四层和七层负载均衡以外其实还有二层、三层负载均衡。二层负载均衡是在数据链路层基于MAC地址来实现负载均衡,三层是在网络层一般采用虚拟IP地址的方式实现负载均衡;
4. 实际环境采用的方式:四层负载 (LVS) +七层负载 (Nginx)。
四、nginx 七层负载均衡配置
1、七层负载均衡基础配置:
[root@server]# vim /usr/local/nginx/conf/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http { # 七层负载均衡支持http、ftp协议
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream qicengzu { # 服务器组,组名qingcengzu
server 192.168.33.11:8080; # 组内服务器1
server 192.168.33.22:8080; # 组内服务器2
}
server { # 虚拟服务器
listen 80; # 虚拟服务器端口
server_name localhost; # 虚拟服务器名
location / { # 虚拟服务器的url跳转
proxy_pass http://qicengzu; # 当访问本机的80端口时,跳转到服务器组
}
}
}
2、负载均衡状态:
五、nginx 四层负载均衡
1. 轮询(Round Robin)
upstream backend {
server 192.168.33.11:8080;
server 192.168.33.22:8080;
}
2. 加权(Weighted)
upstream backend {
server 192.168.33.11:8080 weight=5;
server 192.168.33.22:8080 weight=2; # 权重默认为1,谁权重大,谁优先处理请求
}
3. 四层负载均衡使用 stream 模块,与七层的 http 模块同级。
首先查看版本及安装模块:
[root@localhost ~]# nginx -V
备份原有配置文件:
[root@localhost ~]# cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxbak
进入源码目录,安装指定模块:
[root@localhost nginx-1.22.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream
编译并替换新的 nginx 二进制文件:
[root@localhost nginx-1.22.1]# make
[root@localhost nginx-1.22.1]# cp ./objs/nginx/usr/local/nginx/sbin/
配置四层负载均衡:
events {
worker_connections 1024;
}
stream {
upstream dongtai {
server 192.168.33.11:8080;
server 192.168.33.22:8080;
}
server {
listen 81;
proxy_pass dongtai;
}
upstream jingtai {
server 192.168.33.33:80;
server 192.168.33.44:80;
}
server {
listen 82;
proxy_pass jingtai;
}
}