天天看點

Linux學習(第十四周)

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

第十四周作業:

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

      LVS的排程方案根據其排程時是否考慮伺服器目前的負載情況可分為靜态和動态。搭建環境,共三台主機,其中一台主機運作LVS作為排程器,另外兩台作為RS。為了友善起見,模式就使用LVS-NAT,準備完畢後,通路RS首頁情況如下。

Linux學習(第十四周)

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

Linux學習(第十四周)
Linux學習(第十四周)

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

Linux學習(第十四周)
Linux學習(第十四周)

      SH(源哈希),不管什麼使用者都根據源位址将其綁定在某台主機上,當使用者第一次請求時依然會以輪詢的方式将其配置設定到某台主機,同時會将使用者IP位址做哈希計算,将值與伺服器的IP位址綁定記于一張哈希表中,以後該使用者再通路時,就将被固定配置設定到那台主機上了。

Linux學習(第十四周)
Linux學習(第十四周)

      DH(目的哈希),原理和SH一樣,隻是将目标位址做哈希計算,并将其與伺服器綁定,經常用于正向代理的情況,衆多客戶使用多台正向代理伺服器通路外網,為了提高緩存命中率就将目标位址綁定在某台正向代理伺服器上,效果顯著。

Linux學習(第十四周)
Linux學習(第十四周)

      動态,根據後端伺服器的負載狀态進行配置設定,負載值被稱為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伺服器主機。

Linux學習(第十四周)
Linux學習(第十四周)

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

Linux學習(第十四周)
Linux學習(第十四周)

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

Linux學習(第十四周)

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

Linux學習(第十四周)

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

Linux學習(第十四周)

      可以通過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表示非活動時間最少活動次數。

Linux學習(第十四周)
Linux學習(第十四周)

      nginx的動态反代:nginx和httpd一樣,自身隻能處理靜态資源,要響應動态請求需要借助工具,其無法像httpd那樣把php做成子產品,是以隻能用反代的方式,把動态資源請求反代到fpm伺服器。這要用到fastcgi子產品,配置指令是fastcgi_pass。搭建環境,一台主機運作nginx作為反代伺服器,一台主機運作php-fpm作為fpm伺服器,并準備好一個php測試頁。

Linux學習(第十四周)
Linux學習(第十四周)

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

Linux學習(第十四周)
Linux學習(第十四周)

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

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

      配置nginx配置檔案

Linux學習(第十四周)
Linux學習(第十四周)

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

Linux學習(第十四周)
Linux學習(第十四周)

      在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。

Linux學習(第十四周)
Linux學習(第十四周)

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

      配置nginx配置檔案

Linux學習(第十四周)

      作為四層反代就成功了

Linux學習(第十四周)

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