nginx upstream 配置實現多伺服器無感知切換
在開發過程中,開發完成,完成測試階段,修復bug後都要重啟後臺服務,測試又在測試,每次重啟都要一兩分鐘,平凡的重啟,測試不幹了;所以想到就是部署兩臺伺服器;用nginx upstream 模組實現 無感知部署,發現一個bug,修復;直接部署不會打斷測試;
原來的測試環境部署的jenkins部署的,在一臺機器中部署了,現在要需要增加一個部署一臺機器;我們在jenkins的專案中部署指令碼中再部署一個專案;
部署思想:打時間差,就是先後部署這兩臺機器,控制好時間,保證有一臺機器可以使用;我在jenkins在部署的時候,用了一個sleep 100 來啟動間隔,間隔是100秒,100秒後臺,重新啟動第二臺伺服器;
伺服器1 : 192.168.1.120:7851
伺服器2 : 192.168.1.121:7851
廢話不多說,直接上配置檔案 test.conf (配置檔案直接上)
upstream adminProxy{
server 192.168.1.120:7851 weight=2 max_fails=3 fail_timeout=100s;
server 192.168.1.121:7851 weight=2 max_fails=3 fail_timeout=100s;
}
server {
listen 80;
server_name dev.manage.com;
root /home/work/app/dist;
index index.html;
location /sys {
proxy_pass http://adminProxy;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
}
max_fails = 3 fail_timeout=100s 表示 ${fail_timeout}(100秒)時間內出現${max-fails}(3次)次失敗,就會把這個機器狀態置為down(下線),就是失敗$(fail_timeout)(100秒)時間後,會重新嘗試啟用這伺服器;
這樣就配置好一個兩臺伺服器負載均衡的配置了;
但是這還是不夠的;因為這樣的話,一個伺服器要被請求3次才會被下線,也就是說,會有3次錯誤的請求;返回502或者是error;
所以我們還要啟用proxy_next_upstream 功能: 在伺服器返回502,504,錯誤,超時 的時候;允許轉發到其他伺服器;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
啟用該功能需要在nginx.conf中新增
proxy_next_upstream on
注:就是在部署這兩臺伺服器的時候,最好能夠和這邊nginx配置的伺服器失敗重試時間一致;這樣nginx失敗轉發就不會出錯,使用者也會無感知;
附上怎麼在jenkins中部署程式碼到另外一臺機器上:
步驟: 1、兩臺伺服器新增信任(ssh的互相信賴,這樣在遠端copy檔案執行指令碼的時候就不用密碼連線,不知道的可以百度)
2、把jenkins編譯好的檔案遠端copy到第二臺伺服器中
3、用jenkins遠端呼叫啟動指令碼
直接上指令碼:
jenkins 部署指令碼:
sleep 100
scp ./admin/target/admin.jar [email protected]:/home/work/withhold-feature/admin7851.jar
ssh [email protected] "/home/work/withhold-feature/start-jar.sh"
注:這個指令碼是在啟動第一臺伺服器(192.168.1.120)的時候執行,先停頓100s 在第一臺伺服器(192.168.1.120)啟動完成後,再重新啟動第二臺伺服器(129.168.1.121);
scp是把本地檔案拷貝到遠端伺服器中,然後用 ssh 遠端執行start-jar.sh 指令碼
在第二臺伺服器中的start-jar.sh 指令碼
pid=`ps -ef | grep admin7851.jar | grep -v grep | awk '{print $2}'`
if [ -n "$pid" ]
then
#!kill -9 強制終止
echo "kill -9 的pid:" $pid
kill -9 $pid
fi
cd /home/work/withhold-feature
nohup java -jar admin7851.jar --server.port=7851 --spring.profiles.active=test >/dev/null &
相關推薦
nginx upstream 配置實現多伺服器無感知切換
在開發過程中,開發完成,完成測試階段,修復bug後都要重啟後臺服務,測試又在測試,每次重啟都要一兩分鐘,平凡的重啟,測試不幹了;所以想到就是部署兩臺伺服器;用nginx upstream 模組實現 無感知部署,發現一個bug,修復;直接部署不會打斷測試; 原來的測試環境部
nginx實現多伺服器共用一個80埠
一、下載nginx。 我使用的版本是1.7.2 二、部署專案 下面我有兩個專案A和B,分別使用兩個tomcat:tomcatA和tomcatB,分別把專案A部署到tomcatA和專案B部署到tomcatB裡面去。 1. 找到tomcatA下的conf資料夾,找到server.xml檔案。修改埠號
nginx實驗---lnmp實現多個虛擬主機,部署wordpress和phpmyadmin,並為後一個主機提供https
nginx php mariadb ca httpslnmp實現多個虛擬主機,部署wordpress和phpmyadmin,並為後一個主機提供https。 一、安裝nginx 方法一:編譯安裝1.下載nginx程序包,傳導至CentOS主機中,並解壓。2.進入解壓目錄3.~]# ./configure -
Nginx+Tomcat 配置實現負載均衡(附安裝包)
jsp color 一個 網頁 管理 密碼 bin pcr 解壓 實驗目的: Nginx 是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。 其特點是占有內存少,並發能力強,事實上nginx的
memcache通過hash取模演算法,實現多伺服器存取值
<?php //封裝一個hash演算法類 class Mem{ //儲存memcache的伺服器個數 private $hostCount=''; //多個伺服器 private $host=[]; //構造方法用來給接收值,給屬性賦值 publi
nginx upstream的實現
很多其他模組會呼叫該模組完成對後端伺服器的訪問 upstream模組還是一個http模組,所有它自己必須要實現一些特定的介面: 1.static ngx_command_t ngx_http_upstream_commands[] = { { ngx_string("upstream
Nginx反向代理實現多個域名指向同一個ip的不同網站解決方法
一個伺服器需要掛載多個專案【重點是都能通過域名訪問】 實現原理: 1.當前市面上看到的一些伺服器,開放的埠一般都要求為 '80' 埠 所以80埠成了商用埠 2.域名的繫結是繫結一個一般是繫結你的伺服器ip地址 3.使用伺服器的80埠攔截訪問的域名是什麼跳轉至伺服器的其他 舉例 只有一臺伺服器
TP3.2 Nginx下配置ThinkPhp多入口訪問
thinkphp多入口配置後,入口index.php指向應用目錄=>app,入口admin.php指向後臺管理目錄=>admin在nginx下設定偽靜態(在nginx的配置檔案中): #ThinkPHP REWRITE支援if (!-e $request_filename) {rewrit
TP3.2 Nginx下配置ThinkPhp多入口訪問
目錄 一個 .com request www. 配置 tp3.2 $1 last thinkphp多入口配置後,入口index.php指向應用目錄=>app,入口admin.php指向後臺管理目錄=>admin在nginx下設置偽靜態(在nginx的配置文件中)
nginx利用try_files實現多個源
col 作用 視頻 pre cep files 是否 err data 比如一個視頻網站,視頻資源分散在幾臺機器上,但是給用要提供統一的IP,路徑,端口。就需要nginx,先檢查本機是否有改文件,如果沒有就代理其他地方 location / { root /da
nginx upstream配置
2018年11月08日 18:19:26 chas_xing 閱讀數:8 標籤: nginx upstream
Python通過Manager方式實現多個無關聯程序共享資料
Python實現多程序間通訊的方式有很多種,例如佇列,管道等。但是這些方式只適用於多個程序都是源於同一個父程序的情況。如果多個程序不是源於同一個父程序,只能用共享記憶體,訊號量等方式,但是這些方式對於複雜的資料結構,例如Queue,dict,list等,使用起來比較麻煩,不夠靈活。Manager是一種較為高階
PHP+ffmpeg+nginx的配置實現視訊轉碼
最近專案中需要實現上傳視訊過程中自動轉碼MP4格式的功能,想到了用FFmpeg來實現它,但從來沒有操作過,查閱了很多資料,遇到了好多問題,現在終於安裝成功,覺得應該寫下來與人分享一下,以免有人遇到和我一樣的困境。 首先我是CentOs 6.7版本 環境是LNMP 我需要用P
在SpringBoot中配置多個cache,實現多個cacheManager靈活切換
SpringBoot配置多個cache,實現多個cacheManager靈活切換 注:本文所用的springBoot版本號為1.5.6.6 目的&效果 在springBoot中同時配置了RedisCache和ehCache,當使用@Cacheable註解
springboot+Mybatis配置實現多資料來源
簡述 應公司需求,結合網上的許多資料和公司專案配置實現多資料來源。在此記錄一下配置過程,以供大家參考。 專案簡介 框架用的是SpringBoot+Mybatis,初始資料庫是MySQL,具體MySQL的整合在這裡不做詳細說明,要求是新增一個Oracle
nginx 基礎配置:多個location轉發任意請求或訪問靜態資原始檔
2018-08-10更新 server { #監聽的埠 listen 80; #監聽的域名 server_name l
Nginx 整合 FastDFS 實現檔案伺服器
上一篇文章《[FastDFS 分散式檔案系統詳解](https://www.cnblogs.com/mrhelloworld/p/fastdfs.html)》中帶大家詳細瞭解它的核心概念,架構體系及 FastDFS 環境的搭建與使用。但是此時還無法通過 HTTP 對檔案進行訪問,這篇文章將帶大家解決這個問
基於spring實現多資料來源通過註解切換
主要使用spring的AbstractRoutingDataSource實現,先簡單瞭解下AbstractRoutingDataSource 我們配置的多個數據源會放在AbstractRoutin
Android新增Activity,並實現多Activity之間的切換
開啟 AndroidManifest.xml 找到節點 application 並增加 activity <activity android:name="TestActivity" android:theme="@style/AppTheme">
MFC實現多TAB頁的切換
1. 新建一個MFC工程, 取名MyTab, 選擇Dialog based, 然後Finish. 2. 刪除對話方塊上預設新增的三個控制元件. 新增Tab Control控制元件並在Property屬性中設定ID為IDC_TABTEST 在More Styles裡勾上Bottom. 調速尺寸使其佈滿整個