在nginx中的负载均衡主要有两种:四层负载(IP:Port)、七层负载(http://xxx)
nginx upstream模块
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass http://backend;
}
}
1. 属性解释
- upstream: 主要是定义一个后端服务地址的集合列表,每个后端服务使用一个server命令表示
- upstream {} 和 Server {} 两部分内容属于平级关系
2. 后端常用状态
在upstream模块中,可以使用server命令指定后端服务器的地址,同时还可以设置后端服务器在负载均衡调度中的状态,常用的状态有以下几种:
- down: 逻辑宕机,表示当前server主机暂时不参与负载均衡
- backup:后备主机,当所有非backup机器出现故障或者繁忙的时候,才会请求backup机器
- max_fails:允许请求的最大失败数,默认为1,配合fail_timeout一起使用
- fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s
负载均衡调度算法:
1. 内置策略
- 雨露均沾型:轮训、加权轮训、哈希
- 定向服务型:ip_hash、least_conn、cookie、route、lean、
- 商业类型:ntlm、least_time、queue、stick
2. 扩展策略
- 扩展策略:各种结合业务场景自定义的算法或者第三方算法
- 第三方算法:fair、url_hash
常用算法简介
- 轮询(默认):请求按顺序逐一分配到不同的后端服务器
- weight:指定轮询权重,值越大,分配到的几率就越高,适用于后端服务器性能不均衡情况
- ip_hash:按访问 IP 的哈希结果分配请求,分配后访客访问固定后端服务器,有效的解决动态网页会话共享问题
- fair:基于后端服务器的响应时间来分配请求,响应时间短的优先分配
- url_hash:按访问 URL 的哈希结果分配请求,使同 URL 定向到同一台后端服务器,可提高后端缓存服务器的效率