還記得那些美妙的夜晚嗎
你洗洗打算看一個小電影就睡了,這個時候突然想起來今天晚上是服務器更新的日子,你要在凌晨時分去把***的代碼更新到服務器,以保證明天大家一覺醒來打開網站,發現昨天的 Bug 都不見了。這時候你瞬間沒有了看電影的興致了,這應該就是一個運維人員的日常了吧!
為什么要在凌晨時分去更新服務器?
做過 Web 開發的應該都明白,可能盡管你開發的系統并沒有多少用戶在使用,但是,你依然不敢大白天去更新生產環境服務器,因為你并不知道服務器可能暫停兩分鐘會帶來的影響,又或者我們心目中的「生產環境」這個詞是圣神而不可隨便玷污的,所以,我們總是放在凌晨時分。
你聽過「災備」、「異地多活」、「雙機熱備」這些詞么
大家都知道「不能把雞蛋放在一個籃子里」,在我們開發中依然是如此,如果是稍微對系統數據及運行狀態有要求的項目,千萬可不能突然系統掛掉幾分鐘,這帶來的后果是不可想象的。所以,在我們開發中就會有「災備」這個詞,我們要考慮到這些不可預防的事件發生,所以,往往我們會把系統部署到多臺服務器上面,這就是「雞蛋」的例子,也就是所謂的「雙機熱備」,以保證我們系統的高可用,當一個服務器掛掉,后邊的這個完全有能力頂上去!就好像一個程序員你感覺他天天沒什么事兒可干,非常氣憤的去找你領導說:xxx 天天沒事干,為什么他工資比我高?呵呵呵...
在 從零開始學 Java - CentOS 下 Nginx + Tomcat 配置負載均衡 這篇文章中,我們已經配置了兩臺服務器實現負載均衡,并且可以自定義權重,其實這個時候 Nginx 是支持你去更新其中一個服務器的時候,它監測到這個服務器掛掉了,它把請求都轉發到另一臺服務器的。但是,我在翻看 Nginx 的 upstream 配置的時候發現有種更好的方式,就是配置備份服務器。
backup 是什么鬼
當然是備份的意思了??吹焦倬W的配置是這個樣子的:
backup : marks the server as a backup server. It will be passed requests when the primary servers are unavailable.(標記為備用服務器。當主服務器不可用以后,請求會被傳給這些服務器。)
這意思就是,只有當你的服務器掛掉的時候才會使用備份服務器,正常情況下不會訪問到備份服務器,那好,我來測試一下,還記得我們上一篇負載均衡的配置么,我增加一個Tomcat服務器3,然后,里邊網頁輸出這是網站{{3333333333:0}}。
具體配置文字版:
我這里先做一個必要的小說明:
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,所有請求都又按照權重規則分配了。在你所有正常服務器都掛掉時,系統依然高可用,這就是備份服務器的用處!
總結:無痛更新
配置完備份服務器后,你再也不用再凌晨時分爬起床去更新服務器了,你想什么時間更新就什么時間更新,愛誰誰!真的可以做到無痛、無痛、無痛,不斷網重啟服務器。
好了,我洗洗睡覺了,我特么終于可以去看一部小電影了...