前言
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端口,可做一個內部管理工具,使用管理工具來操作。
