nginx做负载均衡
当一个插入操作被其中一台服务执行时,刚插入数据库后,服务立刻停止。
nginx会将该请求转发给另外一台服务器执行,导致数据被重复插入。
有没有什么好的方法,可以解决这种场景问题。谢谢。
nginx做负载均衡
当一个插入操作被其中一台服务执行时,刚插入数据库后,服务立刻停止。
nginx会将该请求转发给另外一台服务器执行,导致数据被重复插入。
有没有什么好的方法,可以解决这种场景问题。谢谢。
初步判断应该是接口报错或者接口返回慢,导致触发nginx超时转发机制。由于接口在单体服务上调用过,接口是通的,而且1s以内是可以返回的,所以上面2中情况排除。
好吧,既然找不到原因,那就从nginx配置上想办法,于是我添加了一些参数:
Location下增加
porxy_connect_timeout 600;
porxy_read_timeout 600;
porxy_send_timeout 600;
在server节点下增加
keepalive_timeout 600;
超时时间600s,我不信还有超过5分钟的接口(几乎没有人可以忍受),想来这样应该可以了,但是现实很残酷。
经过多轮的修改参数,重新加载,调用…
还是请求2次(nginx就配了2台服务,我增加了一台,怀疑是每台调用一次,但还是调用2次)。上网一顿搜,参数一顿改,一番操作下来还是不行。好吧,我承认我当时已经有点焦躁了。。。
后来我冷静下来,想到了还有个重要的地方没有看,那就是nginx的报错日志,也就是开头的那个截图。网上一查,是http版本的问题,location添加参数:
proxy_http_version 1.1;
问题解决。