從零開始學 Java - 利用 Nginx 負載均衡實現 Web 服務器更新不影響訪問


還記得那些美妙的夜晚嗎

你洗洗打算看一個小電影就睡了,這個時候突然想起來今天晚上是服務器更新的日子,你要在凌晨時分去把最新的代碼更新到服務器,以保證明天大家一覺醒來打開網站,發現昨天的 Bug 都不見了。這時候你瞬間沒有了看電影的興致了,這應該就是一個運維人員的日常了吧!

為什么要在凌晨時分去更新服務器?
做過 Web 開發的應該都明白,可能盡管你開發的系統並沒有多少用戶在使用,但是,你依然不敢大白天去更新生產環境服務器,因為你並不知道服務器可能暫停兩分鍾會帶來的影響,又或者我們心目中的「生產環境」這個詞是聖神而不可隨便玷污的,所以,我們總是放在凌晨時分。

你聽過「災備」、「異地多活」、「雙機熱備」這些詞么

大家都知道「不能把雞蛋放在一個籃子里」,在我們開發中依然是如此,如果是稍微對系統數據及運行狀態有要求的項目,千萬可不能突然系統掛掉幾分鍾,這帶來的后果是不可想象的。所以,在我們開發中就會有「災備」這個詞,我們要考慮到這些不可預防的事件發生,所以,往往我們會把系統部署到多台服務器上面,這就是「雞蛋」的例子,也就是所謂的「雙機熱備」,以保證我們系統的高可用,當一個服務器掛掉,后邊的這個完全有能力頂上去!就好像一個程序員你感覺他天天沒什么事兒可干,非常氣憤的去找你領導說:xxx 天天沒事干,為什么他工資比我高?呵呵呵...

從零開始學 Java - CentOS 下 Nginx + Tomcat 配置負載均衡 這篇文章中,我們已經配置了兩台服務器實現負載均衡,並且可以自定義權重,其實這個時候 Nginx 是支持你去更新其中一個服務器的時候,它監測到這個服務器掛掉了,它把請求都轉發到另一台服務器的。但是,我在翻看 Nginx 的 upstream 配置的時候發現有種更好的方式,就是配置備份服務器。

backup 是什么鬼

當然是備份的意思了。看到官網的配置(http://nginx.org/en/docs/http/ngx_http_upstream_module.html)是這個樣子的:
nginx_example.PNG

  • backup : marks the server as a backup server. It will be passed requests when the primary servers are unavailable.(標記為備用服務器。當主服務器不可用以后,請求會被傳給這些服務器。)
    這意思就是,只有當你的服務器掛掉的時候才會使用備份服務器,正常情況下不會訪問到備份服務器,那好,我來測試一下,還記得我們上一篇負載均衡的配置么,我增加一個Tomcat服務器3,然后,里邊網頁輸出這是網站3333333333

nginx_backup.png

具體配置文字版:

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(備份服務器)

nginx_allstart.gif

接下來我把服務器1停掉,服務器2服務器3都正常啟動,我刷新頁面,這個時候所有請求都是服務器2,也並不會請求服務器3(備份服務器)

nginx_service1stop.gif

接下來我把服務器1服務器2都停掉,服務器3正常啟動,我刷新頁面,所有請求都轉發到服務器3(備份服務器),看圖片:

nginx_service1and2stop.gif

我再次依次啟動服務器1服務器2,所有請求都又按照權重規則分配了。在你所有正常服務器都掛掉時,系統依然高可用,這就是備份服務器的用處

總結:無痛更新

配置完備份服務器后,你再也不用再凌晨時分爬起床去更新服務器了,你想什么時間更新就什么時間更新,愛誰誰!真的可以做到無痛、無痛、無痛,不斷網重啟服務器。

好了,我洗洗睡覺了,我特么終於可以去看一部小電影了...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM