1. 程式人生 > >Nginx負載均衡的詳細配置及使用案例詳解.!

Nginx負載均衡的詳細配置及使用案例詳解.!

Nginx負載均衡的詳細配置及使用案例詳解.


感謝看過這一些列博文和評論的小夥伴, 我把自己所看到的學到的拿到這裡來分享是想和大家一起學習進步, 想聽聽園友給出的意見, 也是對自己學習過程的一個總結. 
技術無止境, 我們仍需努力!


1,話不多說, 這裡我們來說下很重要的負載均衡, 那麼什麼是負載均衡呢? 

由於目前現有網路的各個核心部分隨著業務量的提高,訪問量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的伺服器裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提升時,這又將導致再一次硬體升級的高額成本投入,甚至效能再卓越的裝置也不能滿足當前業務量增長的需求。 
針對此情況而衍生出來的一種廉價有效透明的方法以擴充套件現有網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性的技術就是負載均衡(Load Balance)。


2, 負載均衡的種類

1)一種是通過硬體來進行解決,常見的硬體有NetScaler、F5、Radware和Array等商用的負載均衡器,但是它們是比較昂貴的
2)一種是通過軟體來進行解決的,常見的軟體有LVS、Nginx、apache等,它們是基於Linux系統並且開源的負載均衡策略.

3, 這裡我們只來說Nginx(其他的大家有興趣可以自行查閱相關文件)

Nginx(發音同 engine x)是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協議下發行。由俄羅斯的程式設計師Igor Sysoev(伊戈爾·西索夫)所開發,供俄國大型的入口網站及搜尋引擎Rambler(漫步者)(俄文:Рамблер)使用。其特點是佔有記憶體少,併發能力強,事實上nginx的併發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站使用者有:新浪、網易、 騰訊等。
優點:
1:可執行linux,並有 Windows 移植版。
2:在高連線併發的情況下,Nginx是Apache伺服器不錯的替代品Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平臺之一。能夠支援高達 50,000 個併發連線數的響應

4, 建立兩臺Nginx伺服器


由於自己在自己電腦上搭建, 所以 現在只模擬搭建兩臺Nginx伺服器. 
 

負載均衡的功能:
轉發
故障移除
恢復新增
高可用 Ha

我們想要使用Nginx那麼就必須滿足上面的四個條件.
我們配置負載均衡的目的是在於當用戶訪問我們的伺服器的時候, 首先會通過 Nginx伺服器來決定轉發到哪個Tomcat伺服器上去給使用者提供服務, 當然這個概率是我們通過權重來配置的. 經過Nginx指派之後, 我們就可以處理高併發的訪問了, 這裡就能達到負載均衡的目的.


5, 搭建Nginx
首先我們需要大家兩臺機器, 兩臺機器分別安裝了Nginx和Tomcat, IP分別為: 192.168.200.129. 192.168.200.130



接著我們需要將Nginx和Tomcat包分別拷貝到CentOS01和CentOS02上, 並且解壓好, 這裡就不再複述這個過程了.
然後我們需要關閉Linux的防火牆, 否則的話啟動了Nginx也是連線不上的.


我們還是來再看下解壓吧:

解壓完之後我們需要編譯安裝:

複製程式碼

 1 ./configure \
 2 --prefix=/usr/local/nginx \
 3 --pid-path=/var/run/nginx/nginx.pid \
 4 --lock-path=/var/lock/nginx.lock \
 5 --error-log-path=/var/log/nginx/error.log \
 6 --http-log-path=/var/log/nginx/access.log \
 7 --with-http_gzip_static_module \
 8 --http-client-body-temp-path=/var/temp/nginx/client \
 9 --http-proxy-temp-path=/var/temp/nginx/proxy \
10 --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
11 --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
12 --http-scgi-temp-path=/var/temp/nginx/scgi

複製程式碼

注意:上邊將臨時檔案目錄指定為/var/temp/nginx,需要在/var下建立temp及nginx目錄
mkdir -p /var/temp/nginx

生成了資料夾後我們直接拷貝上面的編譯安裝命令進行安裝.
 

執行完上訴步驟後, 我們可以看到nginx目錄下生成了Makefile檔案,我們接著往下: 


然後使用Make命令, 執行結束後在使用Make install命令進行安裝, 最後是啟動Nginx:

檢視是否啟動成功:



配置反向服務代理器:

什麼是反向服務呢? 首先說下正向服務, 例如爬蟲程式, 我們主動出擊去獲取資源. 而反向服務我們是等待使用者來訪問. 區別在於主動和被動.
配置檔案Nginx/conf/nginx.conf


配置Nginx轉發條件


重啟Nginx伺服器



為了測試, 我們在兩個Tomcat 伺服器的index.jsp中分別加了這是來自於哪個ip下的Tomcat. 如下圖所示:




重啟好Nginx後, 我們再來訪問192.168.200.129 這臺機器, 我麼可以發現其實訪問的是129.168.200.130這臺機器.



負債均衡的配置, 配置轉發的權重: (另一臺CentOS02 依然按照CentOS01的配置)


我們在這裡配置了兩臺轉發機器: 192.168.200.129和192.168.200.130, 它們的權重分別是2/3 和1/3, 也就是說訪問三次192.168.200.129, 有兩次是192.168.200.129上的Tomcat來處理, 有一次是192.168.200.130上的Tomcat來處理. 如果我們的Tomcat伺服器更多 那麼就需要在這裡配置更多, 權重根據實際需求來劃分.

同上, 搭建另一臺機器192.168.200.130的負載均衡:



搭建Keepalived:(Keepalived需要依賴openssl)
這裡如果我們的機器192.168.200.129 出現故障了呢? 那麼怎麼使用192.168.200.130上的Nginx進行轉發呢? 怎麼設定主機和備機呢? 如果主機死了怎麼進行故障移除呢? 如果主機從不可用到可用狀態又怎麼進行恢復新增呢? 這些功能都是可以通過Keepalived來進行設定的.


Keepalived原理:

首先Keepalived可以在主機上產生一個虛擬的ip, 這裡叫做vip(v是virtual的意思):192.168.200.150, keepalived會將這個vip繫結到交換機上.
當用戶訪問主機:192.168.200.129時, 交換機會通過這個ip和vip的對應找到192.168.200.129上的Nginx進行處理.
如果當有一天192.168.200.129上的Nginx掛掉的時候, Keepalived會立即在備機上生成一個相同的vip: 192.168.200.150, 當用戶繼續訪問192.168.200.129時, 交換機上已經綁定了vip, 這時發現這個vip是存在於192.168.200.130上面的, 所以直接將請求轉發到了備機上. 
如果主機被修復好能夠繼續對外提供服務時, 這時keepalived會將主機上繼續生成這個vip, 同時回收在備機上生成的vip. 這個是通過心跳檢查來判斷主機已恢復使用.


我這裡已經提前安裝好了oppenssl, 關於具體安裝方法大家可以自行百度.
檢查openssl 是否安裝成功: 


Keepalived的安裝命令:


檢視Keepalived的安裝目錄:


編輯Keepalived的配置檔案:

首先我們來清空配置檔案(清空後會自動再生成一個keepalived.conf, 但是裡面的內容為空)
關於為什麼要清空, 因為我們已經配置好了一些相關內容, 直接使用即可.

 

這裡是來設定虛擬IP和eth1:
因為我的CentOS是拷貝過來的, 所以這裡是eth1, 關於怎麼檢視, 我們在文章開頭有檢視本機ip: ifconfig, 那裡面有顯示我們的網絡卡就是eth1.




配置完成之後, 啟動keepalived:


檢測Keepalived是否啟動成功:

這裡檢視 我們的機器多了兩個ip, 其實這兩個ip都是虛擬ip

設定備機:|
這裡的權重只要低於主機的100就好.


啟動備機的Keepalived:



當主機停止服務時, 備機即可接管繼續服務:


關於Nginx的內容大概就是這麼多了, 我這裡是一步步配置且通過驗證的, 如果大家哪裡有疑問都可以回覆留言.