1. 程式人生 > >Linux學習(第十四周)

Linux學習(第十四周)

第十四周學習內容:lvs和nginx

第十四周作業:

1、簡述LVS排程方案及應用場景 。

      LVS的排程方案根據其排程時是否考慮伺服器當前的負載情況可分為靜態和動態。搭建環境,共三臺主機,其中一臺主機執行LVS作為排程器,另外兩臺作為RS。為了方便起見,模式就使用LVS-NAT,準備完畢後,訪問RS主頁情況如下。

      image.png

      靜態,僅根據演算法本身進行排程。所使用的排程規則有:RR(輪詢),按順序一個包一個主機的分配。

      image.png

      image.png

      WRR(加權輪詢),在RR的基礎上加上了權重的概念,權重大的被分配的多,權重小的被分配的少。

      image.png

      image.png

      SH(源雜湊),不管什麼使用者都根據源地址將其繫結在某臺主機上,當用戶第一次請求時依然會以輪詢的方式將其分配到某臺主機,同時會將使用者IP地址做雜湊計算,將值與伺服器的IP地址繫結記於一張雜湊表中,以後該使用者再訪問時,就將被固定分配到那臺主機上了。

      image.png

      image.png

      DH(目的雜湊),原理和SH一樣,只是將目標地址做雜湊計算,並將其與伺服器繫結,經常用於正向代理的情況,眾多客戶使用多臺正向代理伺服器訪問外網,為了提高快取命中率就將目標地址繫結在某臺正向代理伺服器上,效果顯著。

      image.png

      image.png

      動態,根據後端伺服器的負載狀態進行分配,負載值被稱為overhoad:LC(最少連線),overhoad=活動連線數*256+非活動連線數,負載值小的被分配。

      WLC(加權最少連線),overhoad=(活動*256+非活動)/權重,也是越小越容易被分配,這也是LVS預設的排程規則。

      SED(最短期望延遲),overhoad=(活動+1)*256/權重,已不在考慮費活動連線數,並且把0活動連線數的情況考慮進去了。

      NQ(不排隊),SED的升級版,從SED的公式可以看出,有可能會出現負載值差距很大的情況。基於這個問題,NQ就是在SED的基礎上,先以輪詢的方式一個一個分配,然後再看overhead,儘量不要造成排隊的情況。

      除此之外,還有兩種動靜結合的排程規則LBLC,把動態和DH相結合;LBLCR,帶複製功能的LBLC,可以吧忙的伺服器上的繫結移一部分到空閒伺服器上。

      動態的排程規則不是很好測試。

2、詳細描述nginx模組並舉例說明。

      上一週的作業中已經介紹過了,nginx作為http服務的常用模組,這裡寫一下nginx作為反代所使用的模組。

      nginx的靜態反代:利用了ngx_http_proxy_module模組。有許多配置指令,最基礎的是proxy_pass,將其放在location中表示將此location匹配到的請求反代給後端伺服器,在反代的過程中會轉換其源目IP地址,所在在跨越網路的環境中也依然可以正常使用。搭建環境:兩臺主機,一臺執行nginx作為反代伺服器,一臺執行httpd作為web伺服器,要求所有對反代伺服器的訪問會被反代至web伺服器。

      定義nginx配置檔案,為了不產生衝突,換一個監聽埠。表示所有對xiaomao2主機8080埠的訪問,都會被反代至身後web伺服器主機。

      image.png

      image.png

      再增加一臺主機,提供.txt檔案。通過配置檔案,讓反代伺服器將.txt結尾的請求反代至這臺新的伺服器上。

      image.png

      image.png

      可以通過proxy_set_header命令修改發往後端主機的請求報文中的某項請求首部的值,約定俗成的兩個可新增的首部為X-Real-IP,表示真正的使用者主機IP地址和X-Forwarded-For表示轉發主機的IP地址。

      image.png

      再在後端web伺服器上,修改日誌格式,使其能夠記錄X-Real-IP這個值。

      image.png

      真正的使用者主機IP地址就被記錄下來了。

      image.png

      可以通過proxy_cache定義快取,在http配置段中使用proxy_cache_path定義快取路徑,並且要設定三級目錄;keys_zone定義快取名字和雜湊表佔記憶體大小;max_size定義快取大小;inactive定義快取項的非活動時間,被定義為非活動的快取將被自動清除。在server配置段中使用proxy_cache加上快取名字表示啟用快取;proxy_cache_key表示應用快取的鍵,也就是遇到哪種報文使用快取,後面可以跟$request_uri表示遇到請求報文呼叫快取;proxy_cache_methods表示遇到哪種方法會呼叫快取;proxy_cache_min_uses表示非活動時間最少活動次數。

      image.png

      image.png

      nginx的動態反代:nginx和httpd一樣,自身只能處理靜態資源,要響應動態請求需要藉助工具,其無法像httpd那樣把php做成模組,所以只能用反代的方式,把動態資源請求反代到fpm伺服器。這要用到fastcgi模組,配置指令是fastcgi_pass。搭建環境,一臺主機執行nginx作為反代伺服器,一臺主機執行php-fpm作為fpm伺服器,並準備好一個php測試頁。

      image.png

      image.png

      配置檔案新增fastcgi_pass指令,將對.php資源的訪問反代至fpm伺服器;還有include fastcgi_params,這是個非常重要的配置檔案,表示反代時要把部分引數傳遞給後端fpm伺服器,此配置檔案的大多數配置選項使用預設即可,個別要改的可單獨列出,也可以直接在配置檔案中修改,位置是/etc/nginx/fastcgi_params;必須改的一條是fastcgi_param SCRIPT_FILENAME+php檔案所在路徑。

      image.png

      image.png

      此配置即是使用nginx完成動靜分離的操作。

      nginx的七層負載均衡:前面所說的是nginx的反代功能,真正要實現負載均衡,還要藉助upstream模組。依靠定義upstream組,將多臺伺服器放入組中,這個組有組名、排程規則等,然後在使用反代命令時,後面跟上的是upstream組,而不是主機名,就可以實現負載均衡叢集了。搭建環境:一臺主機執行nginx作為反代伺服器,兩臺主機作為web伺服器,並做負載均衡叢集。

      配置nginx配置檔案

      image.png

      image.png

      在server配置命令後還可以新增指令:(1)weight:指明權重,預設為1,一旦配置了權重規則就自然變為wrr,否則就是rr;(2)max-conns:指明最大併發連線數;(3)max-fails和fail-timeout:用來做健康狀態檢測,表示失敗幾次和失敗多久則判定其為故障不可用,預設為1此和10秒且開啟;(4)backup:在組內其他主機都down掉時,由帶有此選項的主機提供web服務,一般用作報錯頁面;(5)down:在做新版本釋出時,要讓叢集中某臺主機慢慢下線,可以把權重設為0,也可以用此選項。

      image.png

      image.png

      在upstream配置段中還可以新增指令:(1)ip_hash:類似sh排程規則,基於ip地址做使用者與後端主機的繫結;(2)hash+鍵:以哪個引數為鍵做繫結,如:hash $cookie,以cookie作繫結使用者與後端主機;hash $remote_addr,以ip地址做繫結,效果與ip_hash一樣;hash $request_uri,表示無論那個使用者的請求,只要是相同的URI都繫結到固定的後端伺服器上,也就是DH排程規則;(3)keepalive:由於nginx基於7層,也就是要通過套接字進行負載均衡,所以響應速度會慢一些,使用此配置可以做到,無論哪個使用者請求,調到後臺某主機只使用一個連線,而這個值定義得失最多可維持多少個長連線;(4)least_conn:表示使用lc排程規則,server後加了weight的話就是wlc。

      image.png

      image.png

      nginx的四層負載均衡:四層的負載均衡是lvs的長項,nginx是初涉此領域。要使用nginx的stream模組,因為是四層的負載均衡,所以http配置段就可以不用了,取而代之的是stream配置段。其中依然由server段來做面向客戶的配置,要指明監聽在哪個埠,代理至哪個upstream組。搭建環境:依然是一臺主機執行nginx作為反代伺服器,兩臺主機作為web伺服器,並做負載均衡叢集。

      配置nginx配置檔案

      image.png

      作為四層反代就成功了

      image.png

      當然upstream的指令也都可以使用,可以調整為不同調度規則。