nginx负载均衡后端节点时可以实现后端服务的高可用状态避免单机故障带来的安全隐患
但是存在问题的是当批量更新后端会造成业务的短暂不可用,可以增加backup参数来保障更新带来的暂时可用性
搭配tengine健康参数(这种方式在业务大量使用期间可能也会存在故障,没有过多的压测和落地
)只是简单记录
节点 | 端口 |
---|
nginx1(node1) | 8888 |
nginx2(backup) | 9999 |
nginx3 (node2) | 7777 |
nginx4(代理服务) | 81 |
容器模拟环境
- 运行节点
[root@00fb4b8e82cf ~]# docker run -itd --name nginx1 -p 8888:80 harbor.od.com/public/nginx:v1.20
[root@00fb4b8e82cf ~]# docker run -itd --name nginx2 -p 9999:80 harbor.od.com/public/nginx:v1.20
[root@00fb4b8e82cf ~]# docker run -itd --name nginx3 -p 7777:80 harbor.od.com/public/nginx:v1.20
- 配置页面
[root@00fb4b8e82cf ~]# docker exec -it nginx1 bash -c "echo "node1" > /usr/share/nginx/html/index.html"
[root@00fb4b8e82cf ~]# docker exec -it nginx2 bash -c "echo "backup" > /usr/share/nginx/html/index.html"
[root@00fb4b8e82cf ~]# docker exec -it nginx3 bash -c "echo "node2" > /usr/share/nginx/html/index.html"
- 访问正常,端口节点
[root@00fb4b8e82cf ~]# for i in {8888,9999,7777};do curl http://10.1.7.109:${i};done
node1
backup
node2
- 启动代理节点
4.1 本地创建配置文件挂载目录
[root@00fb4b8e82cf ~]# mkdir conf.d/
4.2 编辑配置文件(以下配置比较简单只是单纯为了实现方式)
[root@00fb4b8e82cf ~]# vi conf.d/default.conf
upstream back {
server 10.1.7.109:7777 weight=1;
server 10.1.7.109:8888 weight=1;
server 10.1.7.109:9999 backup;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
check_http_send "HEAD / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://back;
}
location /status {
check_status;
}
}
4.3 启动容器并挂载配置文件,方便后续修改
[root@00fb4b8e82cf ~]# docker run -itd --name nginx4 -p 81:80 -v /root/conf.d/:/etc/nginx/conf.d/ harbor.od.com/public/tengine
4.4 负载均衡正常
[root@00fb4b8e82cf ~]# for i in {1..5};do curl http://10.1.7.109:81;done
node2
node1
node2
node1
node2
- 简单压测方式:每秒循环请求
5.1 手动停止nginx1 nginx3,最终结果两节点下线后,转发将完全请求到backup节点
[root@00fb4b8e82cf ~]# while true;do curl http://10.1.7.109:81 ;sleep 1 ;done
node1
node2
node1
node2
node1
...
node2
node2
node2
node2
node2
...
backup
backup
backup
backup
5.2 等手动启动nginx1 nginx3后又会被重新调度到,backup节点不再受理。当然不能避免大并发访问,调度检查中存在的失败请求