一、nginx负载均衡中常见的算法及原理
1.1 初始环境搭建
两台后端RShttpd服务器配置
#RS1
[root@rs1 ~]# yum install -y httpd
[root@rs1 ~]# echo "10.0.0.7 web1" > /var/www/html/index.html
[root@rs1 ~]# systemctl enable --now httpd.service
[root@rs1 ~]# curl 127.0.0.1
10.0.0.7 web1
#RS2
[root@rs2 ~]# yum install -y httpd
[root@rs2 ~]# echo "10.0.0.17 web2" > /var/www/html/index.html
[root@rs2 ~]# systemctl enable --now httpd.service
[root@rs2 ~]# curl 127.0.0.1
10.0.0.17 web2
Nginx反向代理配置
#在主配置http模块中中以下语句块
upstream webservers {
#hash $request_uri consistent;
#hash $cookie_sessionid;
#ip_hash;
#least_conn;
server 10.0.0.7:80 weight=1 fail_timeout=5s max_fails=3;
server 10.0.0.17:80 weight=1 fail_timeout=5s max_fails=3;
server 127.0.0.1:80 weight=1 fail_timeout=5s max_fails=3 backup;
}
#子配置文件夹
[root@Centos8 conf]# vim conf.d/pc.conf
server {
listen 80;
proxy_cache off;
#listen 443 ssl;
#ssl_certificate /apps/nginx/certs/www.pc.com.pem;
#ssl_certificate_key /apps/nginx/certs/www.pc.com.key;
#ssl_session_cache shared:sslcache:20m;
#ssl_session_timeout 10m;
server_name www.pc.com;
location / {
index index.html index.php;
root /data/nginx/html/pc;
}
location /web {
index index.html
root /data/nginx/html/mobile;
proxy_pass http://webservers/;
}
}
#重启Nginx,访问并测试
[root@openEuler21 ~]# curl http://www.pc.com/web
10.0.0.7 web1
[root@openEuler21 ~]# curl http://www.pc.com/web
10.0.0.17 web2
#关闭10.0.0.7和10.0.0.17的http服务,测试nginx backup服务器可用性。
[root@openEuler21 ~]# curl http://www.pc.com/web
sorry server
1.2 Nginx调度算法介绍
Nginx 可以基于ngx_http_upstream_module模块提供服务器分组转发、权重分配、状态监测、调度算法等高级功能。
server address [parameters];
#配置一个后端web服务器,配置在upstream内,至少要有一个server服务器配置。
#server支持的parameters如下:
weight=number #设置权重,默认为1,实现类似于LVS中的WRR,WLC等
max_conns=number #给当前后端server设置最大活动链接数,默认为0表示没有限制
max_fails=number #后端服务器的下线条件,当客户端访问时,对本次调度选中的后端服务器连续进行检测多少次,如果都失败就标记为不可用,默认为1次,当客户端访问时,才会利用TCP触发对探测后端服务器健康性检查,而非周期性的探测。
fail_timeout=time #后端服务器的上线条件,对已经检测到处于不可用的后端服务器,每隔此时间间隔再次进行检测是否恢复可用,如果发现可用,则将后端服务器参与调度,默认为10秒。
backup #设置为备份服务器,当所有后端服务器不可用时,才会启用此备用服务器。
down #标记为down状态,可以平滑下线后端服务器
resolve #当server定义的是主机名的时候,当A记录发生变化会自动应用新IP而不用重启Nginx
hash KEY [consistent];
#基于指定请求报文中首部字段或者URI等key做hash计算,使用consistent参数,将使用ketama一致性hash算法,适用于后端是Cache服务器(如varnish)时使用,co