当前位置 主页 > 服务器问题 > nginx问题汇总 >

    Nginx 实现灰度发布的三种方法总结

    栏目:nginx问题汇总 时间:2018-11-29 16:28

    这篇文章主要介绍了Nginx 实现灰度发布的三种方法总结的相关资料,需要的朋友可以参考下

    Nginx 实现灰度发布的三种方法总结

    灰度发布的主要原理是访问路由的控制,重点是保证每次访问的是同一个节点。

    方式一:通过调节负载均衡权重

            负载均衡 建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

            负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。

    简单配置如下:

    http {   upstream cluster {     ip_hash; #如果你的系统中没有使用第三方缓存管理工具 ,建议使用此方式    server 192.168.1.210:80 weight=5;     server 192.168.1.211:80 weight=3;     server 192.168.1.212:80 weight=1;   }     server {     listen 80;    location / {     proxy_next_upstream   error timeout;  proxy_redirect     off;  proxy_set_header    Host $host;  #proxy_set_header    X-Real-IP $remote_addr;  proxy_set_header    X-Real-IP $http_x_forwarded_for;  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  client_max_body_size  100m;  client_body_buffer_size 256k;  proxy_connect_timeout  180;  proxy_send_timeout   180;  proxy_read_timeout   180;  proxy_buffer_size    8k;  proxy_buffers      8 64k;  proxy_busy_buffers_size 128k;  proxy_temp_file_write_size 128k;  proxy_pass http://cluster;     }   } } 

    这种方式灰度发布通过weight来实现,但是这种方式只适合修改节点的行为,而且要求应用都是一模一样的,其实质作用是,节点增加或删除之后,对负载能力的调节,最终目的是为了让流量最终保持均衡。

    方式二.使用nginx+lua实现web项目的灰度发布

    location / { content_by_lua '      myIP = ngx.req.get_headers()["X-Real-IP"]      if myIP == nil then        myIP = ngx.req.get_headers()["x_forwarded_for"]      end      if myIP == nil then        myIP = ngx.var.remote_addr      end      if myIP == "公司出口IP" then        ngx.exec("@client")      else        ngx.exec("@client_test")      end    ';} location @client{  proxy_next_upstream   error timeout;  proxy_redirect     off;  proxy_set_header    Host $host;  #proxy_set_header    X-Real-IP $remote_addr;  proxy_set_header    X-Real-IP $http_x_forwarded_for;  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  client_max_body_size  100m;  client_body_buffer_size 256k;  proxy_connect_timeout  180;  proxy_send_timeout   180;  proxy_read_timeout   180;  proxy_buffer_size    8k;  proxy_buffers      8 64k;  proxy_busy_buffers_size 128k;  proxy_temp_file_write_size 128k;  proxy_pass http://client;}location @client_test{  proxy_next_upstream   error timeout;  proxy_redirect     off;  proxy_set_header    Host $host;  #proxy_set_header    X-Real-IP $remote_addr;  proxy_set_header    X-Real-IP $http_x_forwarded_for;  proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;  client_max_body_size  100m;  client_body_buffer_size 256k;  proxy_connect_timeout  180;  proxy_send_timeout   180;  proxy_read_timeout   180;  proxy_buffer_size    8k;  proxy_buffers      8 64k;  proxy_busy_buffers_size 128k;  proxy_temp_file_write_size 128k;  proxy_pass http://client_test;}