nginx转发post数据丢失_Nginx的reload真的很平滑吗

这篇文章主要讨论下,对于分布式服务,站点如何平滑的上下线问题。

在分布式服务下,我们会用nginx做负载均衡, web站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一定的轮询策略,将请求路由到后端的服务器上。

5924db0e878225fa6b8973fabb4ecb9f.png

这样的架构是没问题的,但是我们这里考虑以下两个问题:

  1. 网站上下线问题:我们网站平时更新服务的时候是直接覆盖文件,然后重启,这样就会造成一些请求中断,如果是非核心逻辑还好, 但如果是核心逻辑,那请求中断将会影响一些数据一致性,比如资金、交易、订单等。

  2. 动态加减机器,比如某个站点访问量突然变大,要新增机器,那就需要修改nginx的配置,然后reload,这样会中断连接。虽然reload很快,但是还是会有一瞬间的请求中断。


为了解决以上问题,我们就需要动态管理upstream,这样就不需要修改和重启nginx来达到平滑上线的目的。

「nginx_http_dyups_module」是第三方开源软件,它提供API动态修改upstream的配置,我们通过示例来学习下


upstream test_upstream {
         server 192.168.20.20:8000;
         server 192.168.20.20:8001;
     }
  
server {
     listen 8888;
     location / {
      allow 127.0.0.1;
      deny all;
      dyups_interface;
    }
  
   }
  
  
server {
  listen       80;
  server_name  localhost;

  location / {
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     set $ups  test_upstream;
     proxy_pass http://$ups;
       }
  }

dyups支持的接口说明表:

请求方法HTTP接口用途
GET/detail获取所有upsteam清单明细
GET/list获取所有upsteam的name
GET/upstream/name获取指定的upstream内的后端服务器的IP地址和端口
POST/upstream/name覆盖指定的upstream的内容,包括IP地址、端口号、权重等信息
DELETE/upstream/name删除指定的upstream

获取upstream的详情

curl 127.0.0.1:8888/detail
#输出显示
server 127.0.0.1:8000 weight=1 max_fails=1 fail_timeout=10 backup=0 down=0
server 127.0.0.1:8001 weight=1 max_fails=1 fail_timeout=10 backup=0 down=0

动态添加upstream

#动态切换upstream到如下两个端口
curl -d "server 127.0.0.1:9000;server 127.0.0.1:9001;" 127.0.0.1:8888/upstream/test_upstream

这样我们后端服务有变化到时候就可以通过dyups动态更新upstream从而达到平滑上线。

让我们一起探索未知的世界~,如果对你有启发和帮助,帮忙点赞和转发。感谢~

想要学习更多干货,赶紧关注公众号噢~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值