nginx的负载均衡集群是通过upstream实现,但是它的健康状态检测功能弱,是基于端口的,并且它适合后端10台以下主机的负载,因为并发太多容易造成请求拥堵。
nginx支持的负载均衡调度算法
轮询(默认):按时间顺序逐一分发请求,当后端某主机宕机,立马将其踢出
weight:指定轮询权值,值越大得到分发请求越多,适合后端主机性能不均衡的情况
ip_hash:根据客户端请求的IP做hash运算,同一个IP的用户固定访问后端某个主机,适合需要session共享的情况
fair:根据后端主机返回的页面大小和返回时间,也就是响应时间,来分发请求,优先给响应时间短的后端主机分发请求。需要upstream_fair模块的支持
url_hash:根据URL做hash运算,同一个地址的请求分发到同一台后端主机,适合提升后端缓存服务器效率。需要hash模块支持。
nginx负载的状态
down:该后端主机不作为负载成员
backup:当所有负载成员主机都宕机时,启用该备份主机继续提供服务
max_fails:最大请求失败次数,当达到此失败次数,返回proxy_next_upsteam所定义的错误
fail_timeout:经历了max_fails次失败后暂停服务的时间。
HTTP段配置:
#定义负载均衡器
upstream myserver {
server 172.16.0.7:8081 weight=1 max_fails=2 fail_timeout=20s;
server 172.16.0.7:8082 weight=4 max_fails=2 fail_timeout=20s;
server 172.16.0.7:8083 weight=3 max_fails=2 fail_timeout=20s;
server 172.16.0.7:8084 backup;
}
#定义代理服务器
server{
listen 80;
server_name www.tb.com;
index index.html index.htm
root /mysite/web/
location / {
proxy_pass http://myserver ;
proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
}
}
#定义各后端服务器主机
server{
listen 8081;
server_name www.tb.com;
location / {
root /mysite/backen1/
}
}
server{
listen 8082;
server_name www.tb.com;
location / {
root /mysite/backen1/
}
}
server{
listen 8083;
server_name www.tb.com;
location / {
root /mysite/backen1/
}
}
server{
listen 8084;
server_name www.tb.com;
location / {
root /mysite/backen1/
}
}
upstream指令用于定义负载均衡集群文件名,在upstream块内,使用server定义每一台后端主机
proxy_next_upstream指令用于定义后端主机遇到什么问题不能提供服务,转而请求下一个后端主机继续提供服务。
补充:
实验时由于后端主机和负载均衡反向代理在同一台服务器,模拟后端服务器主机故障时可以设置iptables的禁用规则,例如
# iptables -t filter -I INPUT 1 -d 172.16.0.7 -p tcp --dport 8081 -j REJECT