最近接收了一個新的工具業務:ipublish發佈系統,剛接手這個業務的時候,發現每次發佈新的代碼 須要到羣裏告知你們,我要停服務幾分鐘,準備更新代碼啦。這尼瑪 哪一個公司都不敢這麼牛逼的和用戶說,咱們網站要停服務幾分鐘,準備發佈的。php
基於這個緣由我要對ipublish進行優化,如何優雅的發佈代碼,而用戶是無感的
html
發佈系統本身更新迭代需求的過程當中,不能中止服務,對用戶是無感知的java
其實這個問題基本都知道解決方案,我這裏就王婆賣瓜自賣自詡吧,來一張架構圖nginx
架構很是簡單,經過一個LB做爲反向代理,而後將全部請求轉發到 後端的tomat ,後端有兩個tomcat ,可是提供服務的只能是某一個tomcatgit
LB 使用的Nginx 監聽 80端口apache
配置兩個tomcat 一個 8080 端口,一個 8081端口後端
No.1 安裝tomcat
#Ubuntu sudo apt-get install nginx #Centos sudo yum install nginx
No.2 配置bash
以下配置,我給你們截圖下重點,能夠看到 upstream 中有8080 8081兩個配置,其中後面有一個down關鍵字,表示對應端口不提供服務,服務器
upstream ipublish { server 127.0.0.1:8080 weight=1 down; server 127.0.0.1:8081 weight=1 ; } server { listen 80 default_server; server_name www.54php.cn; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://ipublish; } }
其實tomcat 很是容易安裝,由於官網提供編譯後的能夠直接下載運行就好了,咱們這裏重點講解如何配置兩個tomcat 監聽不一樣的端口
No.1 下載
官網下載地址,這裏咱們下載tomcat7, http://mirrors.hust.edu.cn/apache/tomcat/tomcat-7/v7.0.78/bin/apache-tomcat-7.0.78.tar.gz
No.2 準備
下載完成後,將 壓縮文件解壓,加入解壓以後 文件夾名稱是apache_tomcat,此時咱們複製出兩個文件夾,名稱分別是tomcat_8080,tomcat_8081,這兩個目錄就是用來配置兩個端口
No.3 配置
以 tomcat_8080爲例,tomcat_8081配置邏輯同樣
修改 tomcat_8080/conf/server.xml
#找到以下地方,將port 改成7080(tomcat_8081的這個地方改成 7081) <Server port="8070" shutdown="SHUTDOWN"> #找到以下地方,將port 改成8080(tomcat_8081的這個地方改成 8081) <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改tomcat_8080/bin/start.sh
#找到以下地方,增長配置 # ----------------------------------------------------------------------------- # Start Script for the CATALINA Server # ----------------------------------------------------------------------------- export JAVA_VERSION=jdk1.8.0_101 export JAVA_HOME=/usr/local/$JAVA_VERSION export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export CATALINA_HOME=/usr/local/tomcat_8080 #此處根據各類路徑配置 export CATALINA_BASE=/usr/local/tomcat_8080 #此處根據各類路徑配置
No.4 啓動
例如開始提供服務的是tomcat_8080,而後我要更新東西的時候我就把代碼放入tomcat_8081,而後啓動8081端口的tomcat服務,因爲java啓動是須要時間的,因此等啓動好了以後,我就把nignx 中的 upstream 8080端口加上down關鍵字,而後nginx reload,這樣就是8081 對外提供服務,我在關閉8080服務,這樣對用戶就是無感更新了
主要給你們展現一下咱們風騷的ipublish系統 界面