Nginx进阶-不停服更新
前言
7*24小时不间断的提供对外服务和产品快速迭代是互联网行业的特征,基于需求所有的发布都不能停止当前对外的服务。本文围绕此话题衍生出,不停服上下线工具实现。
看本文前请先看
作案工具
站点部署
源码下载后,分别部署在两台不同的IIS中,部署不做解释,直接上图
Tengine配置
本文演示直接使用淘宝开源Tengine进行配置,而不使用Nginx官网原生加入淘宝开源插件进行配置,如需要使用官网插件形式部署,可以查看开源配置,送飞机票:https://github.com/yaoweibin/nginx_upstream_check_module;
常规配置在Nginx初识中已经说明了,其他不做解释,开始上干货
#删除原有默认配置 rm -rf /usr/local/nginx/conf/nginx.conf #新建空白配置文件 vim /usr/local/nginx/conf/nginx.conf
插入如下(主要看upstream节点中的check,其他节点不做说明,查看nginx初识文章)
#user nginx; worker_processes 2; error_log /usr/local/nginx/logs/error.log warn; pid /usr/local/nginx/logs/nginx.pid; events { worker_connections 1024; } http { include /usr/local/nginx/conf/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; #include /etc/nginx/conf.d/*.conf; upstream iis_pool { server 10.2.1.111:8011 weight=4 max_fails=2 fail_timeout=10s; server 10.2.1.144:8011 weight=4 max_fails=2 fail_timeout=10s; check interval=3000 rise=2 fall=2 timeout=20000 type=http;#每隔三秒检查,检查两次失败则整个宕机,检查两次成功则机器正常 check_http_send "HEAD / HTTP/1.1\r\nConnection: keep-alive\r\nHost:ng.zhoudemo.com\r\n\r\n";#检查地址 / 斜杠表示根域名,访问http://ng.zhoudemo.com
#当为/ngcheck 表示访问http://ng.zhoudemo/ngcheck检查 check_http_expect_alive http_2xx;#表示httpresponse中响应吗为2xx开头则为正常 keepalive 300;#最大缓存连接数 按需设置 } server { listen 80; server_name ng.zhoudemo.com; location / { proxy_pass http://iis_pool; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
保存后,重启ng服务 service nginx restart
最终效果
正常情况如下
此时输入实际IP加端口访问站点后,点击开启/停止服务(开启/停止服务为修改站点静态变量,当为停止时,则访问该路径返回统一的非2xx编码)
此时nginx存活检测中每隔3秒自动检测到10.2.1.111:8011服务器响应码错误,将不再提供流量至10.2.1.111服务器,我们可以刷新ng.zhoudemo.com站点,此时流量只会打到10.2.1.144站点,说明停止服务成功。
结尾
流量已经不到10.2.1.111服务器了,我们就是对服务器不管做什么都不影响实际生产平台,我们在实现发布,发布后进行接口或站点校验是否发布正确,如正确在开启服务,至此不停服更新完成,不停服更新在实际使用情况,不可能去记忆如此多生产环境IP端口,可做一个内部管理工具,使用管理工具来操作。