還記得那些美妙的夜晚嗎 你洗洗打算看一個小電影就睡了,這個時候突然想起來今天晚上是伺服器更新的日子,你要在凌晨時分去把最新的代碼更新到伺服器,以保證明天大家一覺醒來打開網站,發現昨天的 Bug 都不見了。這時候你瞬間沒有了看電影的興緻了,這應該就是一個運維人員的日常了吧! 為什麼要在凌晨時分去更新服 ...
還記得那些美妙的夜晚嗎
你洗洗打算看一個小電影就睡了,這個時候突然想起來今天晚上是伺服器更新的日子,你要在凌晨時分去把最新的代碼更新到伺服器,以保證明天大家一覺醒來打開網站,發現昨天的 Bug 都不見了。這時候你瞬間沒有了看電影的興緻了,這應該就是一個運維人員的日常了吧!
為什麼要在凌晨時分去更新伺服器?
做過 Web 開發的應該都明白,可能儘管你開發的系統並沒有多少用戶在使用,但是,你依然不敢大白天去更新生產環境伺服器,因為你並不知道伺服器可能暫停兩分鐘會帶來的影響,又或者我們心目中的「生產環境」這個詞是聖神而不可隨便玷污的,所以,我們總是放在凌晨時分。
你聽過「災備」、「異地多活」、「雙機熱備」這些詞麽
大家都知道「不能把雞蛋放在一個籃子里」,在我們開發中依然是如此,如果是稍微對系統數據及運行狀態有要求的項目,千萬可不能突然系統掛掉幾分鐘,這帶來的後果是不可想象的。所以,在我們開發中就會有「災備」這個詞,我們要考慮到這些不可預防的事件發生,所以,往往我們會把系統部署到多台伺服器上面,這就是「雞蛋」的例子,也就是所謂的「雙機熱備」,以保證我們系統的高可用,當一個伺服器掛掉,後邊的這個完全有能力頂上去!就好像一個程式員你感覺他天天沒什麼事兒可乾,非常氣憤的去找你領導說:xxx 天天沒事幹,為什麼他工資比我高?呵呵呵...
在 從零開始學 Java - CentOS 下 Nginx + Tomcat 配置負載均衡 這篇文章中,我們已經配置了兩台伺服器實現負載均衡,並且可以自定義權重,其實這個時候 Nginx 是支持你去更新其中一個伺服器的時候,它監測到這個伺服器掛掉了,它把請求都轉發到另一臺伺服器的。但是,我在翻看 Nginx 的 upstream
配置的時候發現有種更好的方式,就是配置備份伺服器。
backup 是什麼鬼
當然是備份的意思了。看到官網的配置(http://nginx.org/en/docs/http/ngx_http_upstream_module.html)是這個樣子的:
- backup : marks the server as a backup server. It will be passed requests when the primary servers are unavailable.(標記為備用伺服器。當主伺服器不可用以後,請求會被傳給這些伺服器。)
這意思就是,只有當你的伺服器掛掉的時候才會使用備份伺服器,正常情況下不會訪問到備份伺服器,那好,我來測試一下,還記得我們上一篇負載均衡的配置麽,我增加一個Tomcat伺服器3
,然後,裡邊網頁輸出這是網站3333333333
。
具體配置文字版:
upstream backend {
server 192.168.198.128:8080 weight=1;
server 192.168.198.128:8090 weight=4;
server 192.168.198.128:8091 backup;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://backend;
}
我這裡先做一個必要的小說明:
192.168.198.128:8080
伺服器下麵會稱為伺服器1
,每五次請求會到這裡一次;192.168.198.128:8090
伺服器下麵會稱為伺服器2
,每五次請求會到這裡四次;192.168.198.128:8091
伺服器下麵會稱為伺服器3
,即備份伺服器。
這個時候伺服器1
、伺服器2
和伺服器3
都正常啟動,我刷新頁面,會按照權重規則請求伺服器1
和伺服器2
,並不會請求伺服器3(備份伺服器)
。
接下來我把伺服器1
停掉,伺服器2
和伺服器3
都正常啟動,我刷新頁面,這個時候所有請求都是伺服器2
,也並不會請求伺服器3(備份伺服器)
。
接下來我把伺服器1
、伺服器2
都停掉,伺服器3
正常啟動,我刷新頁面,所有請求都轉發到伺服器3(備份伺服器)
,看圖片:
我再次依次啟動伺服器1
和伺服器2
,所有請求都又按照權重規則分配了。在你所有正常伺服器都掛掉時,系統依然高可用,這就是備份伺服器的用處!
總結:無痛更新
配置完備份伺服器後,你再也不用再凌晨時分爬起床去更新伺服器了,你想什麼時間更新就什麼時間更新,愛誰誰!真的可以做到無痛、無痛、無痛,不斷網重啟伺服器。
好了,我洗洗睡覺了,我特麽終於可以去看一部小電影了...