1.Nginx
定义
Nginx 是开源的轻量级 Web 服务器、反向代理服务器,以及负载均衡器和 HTTP 缓存器。
优势
- 高并发,高性能和低内存。
- Master/Worker结构:一个 master 进程,生成一个或多个 worker 进程
功能
- 1.反向代理
- 2.正向代理
- 3.负载均衡
将原先请求集中到单个服务器上的情况改为增加服务器的数量,然后将请求分发到各个服务器上,将负载分发到不同的服务器,即负载均衡。
Nginx 负载均衡主要是对七层网络通信模型中的第七层应用层上的 http、https 进行支持。
- 4.动静分离
为了加快网站的解析速度,可以把静态页面和动态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
- 5.高可用性
为了提高系统的可用性和容错能力,可以增加nginx服务器的数量,当主服务器发生故障或宕机,备份服务器可以立即充当主服务器进行不间断工作。
缺点
- 适用范围小:Nginx 仅能支 持http、https 和 Email 协议
- 对后端服务器的健康检查,只支持通过端口来检测,不支持通过 ur l来检测。不支持 Session 的直接保持,但能通过 ip_hash来解决。
负载均衡原理:
1.负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。一个最基本的upstream模块是这样的,模块内的server是服务器列表:
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
2.在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
#其他页面反向代理到tomcat容器
location ~ .*$ {
index index.jsp index.html;
proxy_pass http://dynamic_zuoyu;
}
支持调度算法(6种)
轮询
特点:
1.每个请求会按时间顺序逐一分配到不同的后端服务器。
2.在轮询中,如果服务器down掉了,会自动剔除该服务器。
3.此策略适合服务器配置相当,无状态且短平快的服务使用。
- weight
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
特点:
1.权重方式,在轮询策略的基础上指定轮询的几率。
2.权重越高分配到需要处理的请求越多。
3.此策略比较适合服务器的硬件配置差别比较大的情况
- IP_hash
#动态服务器组
upstream dynamic_zuoyu {
ip_hash; #保证每个访客固定访问一个后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
特点:
- 1.基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话,可以解决session不能跨服务器的问题。
- 2.此策略适合有状态服务,比如session。
- 3.当有服务器需要剔除,必须手动down掉。
least_conn:最少连接数
#动态服务器组
upstream dynamic_zuoyu {
least_conn; #把请求转发给连接数较少的后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
特点:
1.把请求转发给连接数较少的后端服务器
2.此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况
- fair(第三方策略)
#动态服务器组
upstream dynamic_zuoyu {
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
fair; #实现响应时间短的优先分配
}
特点:按照服务器端的响应时间来分配请求,响应时间短的优先分配。
url_hash(第三方策略):依据URL分配方式
#动态服务器组
upstream dynamic_zuoyu {
hash $request_uri; #实现每个url定向到同一个后端服务器
server localhost:8080; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082; #tomcat 8.5
server localhost:8083; #tomcat 9.0
}
特点:
1.按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。
2.HAProxy
定义:
HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。
它提供L4(TCP)和L7(HTTP)两种负载均衡能力
核心功能
- 负载均衡:L4和L7两种模式
- 健康检查:支持TCP和HTTP两种健康检查模式
- 会话保持
- SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
- 监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。
优点
- 如支持 Session 的保持,Cookie 的引导;同时支持通过获取指定的 url 来检测后端服务器的状态。
- HAProxy 支持 TCP 协议的负载均衡转发,可以对 MySQL 读进行负载均衡,对后端的 MySQL
节点进行检测和负载均衡,大家可以用 LVS+Keepalived 对 MySQL 主从做负载均衡。
支持的负载调度策略
- Round-robin(轮循)
- Weight-round-robin(带权轮循)、
- source(原地址保持)
- RI(请求URL)
- rdp-cookie(根据cookie)
。