tnsnames.ora配置未生效_nginx高可用配置未生效问题跟踪

本文记录了一次Nginx配置引发的问题及其解决过程,包括upstream配置、proxy_next_upstream设置及日志分析技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

6c1f7703576ae2029d87d7968af6c29f.png

事件回溯

1.nginx默认配置upstream时,会有失败检测,超过失败次数,则会在一定时间内不进行转发

2.参考我们线上配置为30秒内1次失败不再对该服务提供者进行转发

upstream preview {

server s1:20000 weight=2 fail_timeout=30s max_fails=1;

server s2:20000 weight=2 fail_timeout=30s max_fails=1;

server s3:20000 weight=1 fail_timeout=30s max_fails=1;

}

3.基于我们的配置,还是会有一次失败会透露给用户,因此再次基础上增加了proxy_nexy_upstream

location / {

proxy_set_header Host $http_host;

proxy_set_header X-Forwarded-Proto https;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

proxy_pass http://preview;

}

4.结果我们还是收到了用户反馈的出现502的情况

5.基于反馈问题,我们拉取了nginx的日志,拉取日志的过程也出现了两次错误

# 错误的日期,错误的状态码

cat /opt/log/preview_access.log|grep 07/Apr/2020:10|grep "/dcs.web"|awk '{if($9=502) print $0}'|grep -v "/dcs.web/onlinefile"

# 错误的状态码复写

cat /opt/log/preview_access.log|grep 08/Jul/2020:|grep "/dcs.web"|awk '{if($9=502) print $0}'

# 正确的日志命令

cat /opt/log/preview_access.log|grep 08/Jul/2020:10 | grep "/dcs.web"|awk '{if($9==502) print $0}'

6.跟开发确认,哪些是对我们的请求,得到的回复是[GET /dcs.web/$id]这样的数据格式,对比拿到的错误日志,发现无论哪台服务器均会收到502的错误

7.再次跟前端业务要求反馈用户请求数据,拿到数据对比也没有找到具体数据

8.中午之后,善军重新查找日志,发现所有的nginx的502总共只有5条数据,多次对比拉取日志命令发现,获取数据时,命令错误,误将http状态码重新赋值为502

9.再次重新拉取请求日志,以及对比错误日志,发现502日志均为POST请求,错误日志中出现的get请求均正常返回200给到客户端

10.再次跟开发确认,到底哪个是我们提供的接口,需要做数据对比检查的,反馈两个接口均需要。

11.此时,已经真相大白了,出错的POST请求响应502均为服务挂掉的ip,则可知服务挂掉时候的POST请求未重试转发,且已知proxy_next_upstream不会对非幂等请求进行转发

12.修改proxy_next_upstream配置,针对【/dcs.web/onlinefile】接口,增加【non_idempotent】配置

总结

1.确认受影响范围([GET /dcs.web/$id],[POST /dcs.web/onlinefile]),遗漏接口跟踪,导致忽略重点问题POST请求

2.日志抓取,一定要确认抓到到正确的日志,否则一切都是徒劳

3.一定要猜想之后,找到证据,证明猜想,才能定位正确问题,否则一切始终都是猜想

4.proxy_next_upstream的non_idempotent是否可以配置,要根据接口是否能够支持幂等重试来决定,不能全部配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值