1. 程式人生 > >Nginx反向代理與負載均衡:節點伺服器單/多虛擬機器配置+實驗環境搭建+原理解析

Nginx反向代理與負載均衡:節點伺服器單/多虛擬機器配置+實驗環境搭建+原理解析

.說明

    常見的叢集架構及相關軟體,可以參考下面的導圖:

wKiom1i8K-6hUk3bAAA4KDrPhKQ340.png

    網際網路企業常用的是負載均衡叢集和高可用性叢集,負載均衡叢集強調“分擔”,通過一定的排程演算法 ,可以實現用多個節點伺服器來分擔使用者的訪問請求和資料流量;高可用性叢集強調“高可用”,即一個節點失效了,它的任務可以立刻轉移到另一個備份的節點上(即一般通過設定主備來實現)。顯然因為負載均衡叢集使用多個節點來分擔服務,即使其中一個節點失效了,其它節點也可以繼續工作,因此它也具有高可用性。

    下面介紹的是Nginx負載均衡的配置,同時也給出了實驗環境。

1.實驗環境說明

    本次實驗的測試環境使用的宿主機作業系統為Windows 7,在Vmware虛擬機器安裝CentOS 6.5(3臺),說明如下:

主機型別 作業系統 IP地址 作用
宿主機 Windows 7

10.0.0.1/24

(VMnet8的IP地址)

遠端3臺虛擬機器,進行配置,同時也作為後面測試使用的客戶端
虛擬機器1: lb01 CentOS 6.5 10.0.0.7/24 負載均衡伺服器lb01,將請求分擔到Web節點伺服器中
虛擬機器2: web01 CentOS 6.5
10.0.0.9/24 Web節點伺服器web01
虛擬機器3: web02 CentOS 6.5 10.0.0.10/24 Web節點伺服器web02

    而當使用NAT的方式進行上網時虛擬機器、宿主機之間的網路連線關係可如下所示:

wKioL1i8uLvBJKr4AABzByftaZ4557.png

    關於為什麼網路拓撲結構是這樣的,這裡不展開說明,可以參考博主的另一篇博文《在實踐中深入理解VMware虛擬機器的上網模式NAT模式》,這篇文章深入地分析了VMware虛擬機器使用NAT模式上網時的網路結構細節,相信看完這篇文章後,這裡搭建Nginx的實驗環境也就很容易理解了。

    所以首先,應該是自己先配置好網路環境,讓宿主機跟我們的虛擬機器可以通訊,實際上,如果理解了VMware虛擬機器上網方式的原理,同時對CentOS的網路配置也很熟悉,這一步是可以很輕鬆完成的,這裡就不給出過程了,這裡所用的IP地址跟上面的圖示是一樣的。

    這裡,對於Nginx的負載均衡,希望達到的效果邏輯如下:

wKiom1i8uWmSSgZLAABNqTHI_cs056.png

    當用戶訪問我們的Web Server時,實際上請求是先到達Nginx負載均衡器,這就是一個反向代理的過程了,然後Nginx負載均衡器再將請求按照一定的排程演算法分發給相應的節點伺服器。

    在整個實驗環境中,我們假定web01和web02提供bbs.xpleaf.org的網站內容服務,Nginx在web01和web02前面作為反向代理伺服器與負載均衡伺服器,當用戶訪問bbs.xpleaf.org時,Nginx負載均衡器會把請求分發到web01和web02節點伺服器上,由節點伺服器返回實際的內容資料。

2.配置與測試實戰:節點伺服器單虛擬機器場景

    這裡使用的Nginx的版本為:1.6.3,關於Nginx的安裝與基本配置,這裡不再做說明,可以參考博主前面關於Nginx的博文,同樣也是給出了詳細的實驗環境,可以去實踐一下。

    下面在每臺web伺服器上,我們只配置了一個虛擬機器,即bbs.xpleaf.org。

(1)web01配置與測試

  • web01作為節點伺服器,配置它的虛擬機器域名為bbs.xpleaf.org

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [[email protected] conf]# cat nginx.conf worker_processes  1; events { worker_connections  1024; } http { include       mime.types; default_type  application/octet-stream; sendfile        on; keepalive_timeout  65; log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; server { listen       80; server_name  bbs.xpleaf.org; location / { root   html/bbs; index  index.html index.htm; } access_log  logs/access_bbs