基於nginx實現web服務器的雙機熱備


1.適用場景

對於部署重要的服務,會使用兩台服務器,互相備份,共同執行同一服務。當一台服務器出現故障時,可以由另一台服務器承擔服務任務,從而在不需要人工干預的情況下,自動保證系統能持續提供服務。雙機熱備由備用的服務器解決了在主服務器故障時服務不中斷的問題。

2.nginx

nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是占有內存少,並發能力強,事實上nginx的並發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

3.方法

前提:

  1. nginx環境

  2. 准備兩台web服務器

  • 192.168.81.146
  • 192.168.81.147
    在兩台機器上部署相同web服務,共用一套存儲設備,其中146服務器作為主服務器,147作為備用服務器。yii.nginx.com作為該web服務的域名。

步驟1. 配置nginx.conf文件
在nginx.conf文件里添加如下代碼

   #雙機熱備方式  
   upstream yii.nginx.com {  
       server 192.168.81.146:8080;  
       server 192.168.81.147:8080 backup;  
   }  
  
   #反向代理配置  
   server {  
     listen       80;  
     server_name  yii.nginx.com;  
     charset utf-8;  
     location /{  
        proxy_pass http://yii.nginx.com;  
     }  
  } 

 

說明:backup是利用nginx的熱備功能,這也是最典型的應用帶來的重要好處之一,當非backup Server能夠很好的為Client提供服務的時候,backup Server不對外界提供服務,此時backup Server處於冷狀態;當所有非backup Server不能很好的為Client提供服務的時候,backup Server為Client提供服務,做到了熱備,某台或者所有非backup Web Server宕機不會影響整個Web項目的訪問功能,Web項目仍然可以為Client提供服務。

步驟2.啟動nginx

start nginx

  

步驟3.訪問域名http://yii.nginx.com
訪問http://yii.nginx.com域名,可以看到我們部署的web服務(我們看到的是146服務器上部署的服務),如果此時192.168.81.146的服務器出現故障,服務器無法連接,nginx自動將請求轉發到備用服務器192.168.81.147:8080上。通過nginx的主備機制,使得用戶訪問的web服務不會因為主服務器的故障而無法訪問。

4.測試方法可行性

通過上述步驟,我們可以測試nginx對於雙機熱備是否可行,我們在146機器上部署tomcat7.0,在147機器上部署tomcat8.0,當146機器沒有故障時,訪問域名我們可以看到界面是tomcat7.0,當我們關閉146服務,重新訪問域名,訪問頁面是tocmat8.0,因此可以證明,當主服務器出現故障時無法提供服務時,備用服務器能代替主服務器提供服務,保證服務的不中斷。

5.其他知識點

5.1關於nginx的反向代理

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。

反向代理方式實際上就是一台負責轉發的代理服務器,貌似充當了真正服務器的功能,但實際上並不是,代理服務器只是充當了轉發的作用,並且從真正的服務器那里取得返回的數據。這樣說,其實nginx完成的就是這樣的工作。我們讓nginx監聽一個端口,譬如80端口,但實際上我們轉發給在8080端口的tomcat,由它來處理真正的請求,當請求完成后,tomcat返回,但數據此時沒直接返回,而是直接給nginx,由nginx進行返回,這里,我們會以為是nginx進行了處理,但實際上進行處理的是tomcat。

5.2關於雙機熱備

  1. 雙機熱備

從廣義上講,就是對於重要的服務,使用兩台服務器,互相備份,共同執行同一服務。當一台服務器出現故障時,可以由另一台服務器承擔服務任務,從而在不需要人工干預的情況下,自動保證系統能持續提供服務。雙機熱備由備用的服務器解決了在主服務器故障時服務不中斷的問題。

  1. 為什么使用雙機熱備

雙機熱備針對的是服務器的故障。
服務器的故障可能由各種原因引起,如設備故障、操作系統故障、軟件系統故障等等。
而對於一些重要系統而言,用戶是很難忍受這樣長時間的服務中斷的。因此,就需要通過雙機熱備,來避免長時間的服務中斷,保證系統長期、可靠的服務。
決定是否使用雙機熱備,正確的方法是要分析一下系統的重要性以及對服務中斷的容忍程度,以此決定是否使用雙機熱備。即,你的用戶能容忍多長時間恢復服務,如果服務不能恢復會造成多大的影響。

  1. 雙機熱備的三種實現方案
    組成雙機熱備的方案主要的三種方式分別為:基於共享存儲(磁盤陣列)的方式,全冗余方式和復制方式。
  • (1)基於共享存儲(磁盤陣列)的方式
    共享存儲方式主要通過磁盤陣列提供切換后,對數據完整性和連續性的保障。用戶數據一般會放在磁盤陣列上,當主機宕機后,備機繼續從磁盤陣列上取得原有數據。如下圖所示
    這種方式因為使用一台存儲設備,往往被業內人士稱為磁盤單點故障。但一般來講存儲的安全性較高。所以如果忽略存儲設備故障的情況下,這種方式也是業內采用最多的熱備方式了。

  • (2)全冗余方式
    全冗余方式就是雙機雙存儲,基於單台存儲的傳統雙機熱備方式,確實存在存儲單點故障的情況,為實現存儲冗余,存儲高可用也已經越來越多的被用戶接受。我們從理解上可以看出,雙機熱備最早是為解決服務器的計划性停機與非計划性宕機的解決方案,但是我們無法實現存儲的計划性停機與非計划性宕機帶來的服務器停機,而存儲作為雙機熱備中唯一存儲數據的設備,它一旦發生故障往往會造成雙機熱備系統全面崩潰。

  • (3)
    這種方式主要利用數據的同步方式,保證主備服務器的數據一致性。


作者:_Reality
鏈接:https://www.jianshu.com/p/db1f114182b1
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。


免責聲明!

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



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