Nginx 进阶详解

Nginx 配置进阶

负载均衡实现

业务说明

需要搭建tomcat服务器集群(应用集群),共同抗击高并发.这时需要使用反向代理服务器.同时配置负载均衡.

集群搭建

说明:准备3台tomcat服务器.端口号分别为8001/8002/8003.

负载均衡策略

轮询策略

说明:根据配置文件的顺序,依次访问服务器.

配置服务集群(默认是轮询策略)

java 复制代码
#配置服务列表,服务的ip地址为自己服务器的真实ip
upstream gateways{ 
server 192.168.1.130:8001;
server 192.168.1.130:8002;
server 192.168.1.130:8003;
}
#配置后台管理服务器
server {
listen 80;
server_name localhost;
location  / {
#实现http请求的转发
proxy_pass http://gateways;
}
}
权重策略

说明:可以为某些服务器添加权重,让该服务器处理能力更强的,可以处理更多的请求。

配置应用服务列表,本次配置采用默认是轮循策略,再给一个权重值;(让能者多劳)

java 复制代码
upstream gateways{
server 192.168.227.131:10001 weight=3;
server 192.168.227.131:10002 weight=2;
server 192.168.227.131:10003 weight=1;
}

备注,一但修改了配置文件(nginx.conf),要重新加载配置文件.(/usr/local/nginx/sbin/nginx -s reload)

IPHASH策略

问题说明:如果采用集群的部署,假如要做敏感操作,要求用户必须登录.但是由于nginx实现了负载均衡的操作,导致用户的Session数据不同共享.从而导致用户频繁登录.用户体验较差.

问题: nginx实现了tomcat负载均衡. 导致用户每次访问都是不同的服务器,但是用户的登录信息是存储在一台应用服务器上的,其它服务器没有这个登录信息,所以在访问到其它服务器时还需要重新登录。

解决方案: 能否让用户每次访问同一台服务器?答案是可以的,我们可以采用IPHASH策略,对请求进行负载均衡。

这样,同一个IP执行hash操作的结果肯定是相同。

IPHASH调用原理 如图所示:

IPHASH的配置如下:

java 复制代码
#配置服务应用列表
upstream geteways {
ip_hash;
server 192.168.227.131:10001 weight=6;
server 192.168.227.131:10002 weight=3;
server 192.168.227.131:10003 weight=1;
}
  • IPHASH存在的问题
  1. IPHASH如果一旦服务器出现异常,导致业务请求失效.
  2. 可能会出现负载不均的现象.负载有高有低(可在测试中试用).
    一般不会使用IPHASH,有时只是在测试中使用一下。
    3.3 NGINX常用属性
    3.3.1 Down属性
    说明:如果服务器宕机,可以在配置文件中标识为down.这样以后不会再访问故障机.
java 复制代码
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002;
server 192.168.227.131:10003;
}
BACKUP设计

说明:备用机设置,正常情况下该服务器不会被访问.当主机全部宕机或者主机非常忙时,该服务器才会访问.

java 复制代码
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 down;
server 192.168.227.131:10002:8082;
server 192.168.227.131:10003 backup;
}
宕机服务器高可用实现

说明:当服务器宕机时,如果访问的失败次数达到最大失败次数,则标识为down.自动完成.在一定的周期之内,如果服务器恢复正常,则还会尝试访问故障机.

java 复制代码
max_fails=1 最大的失败次数 
fail_timeout=60s; 设定周期为60秒
upstream geteways {
#ip_hash;
server 192.168.227.131:10001 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10002 max_fails=1 fail_timeout=60s;
server 192.168.227.131:10003 max_fails=1 fail_timeout=60s;
}
相关推荐
乘云数字DATABUFF1 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--3 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森3 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜4 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB5 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode6 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220707 天前
如何搭建本地yum源(上)
运维
ping某8 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8810 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠10 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql