事件回溯

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是否可以配置,要根据接口是否能够支持幂等重试来决定,不能全部配置

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

  1. 2008r2文件服务器高可用,Windows Server 2012 R2 文件服务器安装与配置07 之文件服务器高可用配置DFS...

    今天和大家分享的是关于文件服务器高可用配置,简单一点说就是当一台机宕机的时候,另一台文件服务器可以继续为你提供文件服务,以保证业务的正常使用. 分布式文件系统是作为文件服务角色的一种角色服务而实现的. ...

  2. [菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造...

    前言 欢迎来到菜鸟SpringCloud实战入门系列(SpringCloudForNoob),该系列通过层层递进的实战视角,来一步步学习和理解SpringCloud. 本系列适合有一定Java以及Sp ...

  3. Keepalived v1.3.5 高可用配置参数总结

    Keepalived v1.3.5 高可用配置参数总结 前言 官网介绍 gratuitous ARP包 VRRP包 VRRP实例 1 全局配置 1.1 全局定义(global_defs ) 1.2 静 ...

  4. 路由器snmp配置_基于keepalived配置数据库主从实现高可用

    基于keepalived配置数据库主从实现高可用 使用keepalived来监听端口,实现数据库的高可用.实现效果,其中一台数据库服务器突然出故障或关机时,应该不影响应用正常运行,等待服务器启动之后, ...

  5. 二进制搭建kubernetes多master集群【三、配置k8s master及高可用】

    前面两篇文章已经配置好了etcd和flannel的网络,现在开始配置k8s master集群. etcd集群配置参考:二进制搭建kubernetes多master集群[一.使用TLS证书搭建etcd集 ...

  6. RabbitMQ高级指南:从配置、使用到高可用集群搭建

    本文大纲: 1. RabbitMQ简介 2. RabbitMQ安装与配置 3. C# 如何使用RabbitMQ 4. 几种Exchange模式 5. RPC 远程过程调用 6. RabbitMQ高可用 ...

  7. RedHat 7配置keepalived+LVS实现高可用的Web负载均衡

    上一篇博文中我们使用keepalived实现了haproxy的高可用,但keepalived问世之初却是为LVS而设计,与LVS高度整合,LVS与haproxy一样也是实现负载均衡,结合keepali ...

  8. 白话SpringCloud | 第三章:服务注册与发现-高可用配置(Eureka)-下

    2019独角兽企业重金招聘Python工程师标准>>> 前言 上一章节,讲解了在单机模式下的服务注册与发现的相关知识点及简单示例.而在实际生产或者在这种微服务架构的分布式环境中,需要 ...

  9. RabbitMQ 高级指南:从配置、使用到高可用集群搭建

    博主说:在项目中,通过 RabbitMQ,咱们可以将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 正文 1 Rab ...

最新文章

  1. leetcode--删除排序数组中的重复项--python
  2. 微信小程序在开发中遇到的问题与解决方法
  3. 数据结构和算法之——跳表
  4. Hadoop Shell命令
  5. 1号店Interview小结
  6. linux关闭沙盒模式,打开或关闭沙盒模式以禁用宏
  7. 突破100万年薪《多线程服务器端架构》
  8. SQLAlchemy 教程 —— ORM 方式使用示例
  9. 如今谁在使用Python
  10. vue隐藏和显示元素
  11. NeurIPS 2020 | AI编程:如何从复制粘贴走向推理合成(文末附论文及代码)
  12. 判别模型、生成模型和朴素贝叶斯模型
  13. Android API 级别
  14. 【好用的Mac分屏软件】Magnet for Mac 2.3
  15. aiml java_AIML实现智能聊天机器人
  16. 使用网络数据采集的好处
  17. 简单的php表单制作
  18. css text-transform实现英文字母或拼音大小写转换
  19. Python012--python3.7在本地及虚拟机上的安装与配置
  20. 软件测试面试该如何谈薪

热门文章

  1. 解决启动Distributed Transaction Coordinator服务出错的问题
  2. (转)深入理解Javascript闭包(closure)
  3. 小结SQL Server连接失败错误及解决[引用]
  4. 第四章:react ajax
  5. 关于那些表单的验证码
  6. git-底层-高层指令
  7. CSS3 calc() 函数,height: calc(100% - 70px);
  8. HTMLCSS--使用CSS完成页面布局及排版(附案例代码)
  9. LeetCode--64. 最小路径和(动态规划)
  10. NG ChangeDetectorRef(变更检测)