天天看點

Linux學習(第十三周)

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

第十三周作業:

1、較長的描述常見nginx常用子產品和子產品的使用示例。

      nginx的三大主要功能:http服務、反代服務以及郵件服務。作為http服務其性能要優于httpd,可以用來解決c10k問題,利用了信号驅動和異步I/0架構,在很小記憶體消耗的情況下,承載了大量的并發連接配接。而作為反代服務其可以基于七層做判斷,做到負載均衡,性能也非常優越。

      nginx的架構是由主程式(master)管理子程序(worker),然後每個worker都能處理多個請求,有通過http協定調用本地磁盤的靜态資源,有通過fast cgi向fpm server調用動态資源,還可以通過cache loader和cache manager管理本地緩存等。nginx也是高度子產品化的,支援動态裝解除安裝,子產品分為三大類:核心子產品、标準子產品和第三方子產品。

      nginx的主配置檔案/etc/nginx/nginx.conf。和httpd一樣,也支援/etc/nginx/conf.d/*.conf這種自定義的配置檔案,配置指令都是“名稱 值”得格式,結尾必須加“;”。主配置檔案可分為四部分:主配置段,用來定義nginx程序自身的特性;http配置段,用http{}框起來,用來定義http服務的相關配置,預設網頁路徑為/usr/share/nginx/html;郵件配置段,用mail{}框起來;反代配置段,用stream{}框起來。

      安裝nginx,修改配置檔案,建立測試首頁,啟動服務,最簡單的nginx關于http的服務就完成了。

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

      常用子產品:(1)基于IP位址的通路控制子產品,利用allow和deny,放行指定位址、拒絕指定位址通路。

Linux學習(第十三周)

      表示僅允許10.0.0.7通路,其他的全拒絕

Linux學習(第十三周)

      10.0.0.7不受影響

Linux學習(第十三周)

      10.0.0.8主機通路就被拒絕

      (2)基于使用者的通路控制子產品:auth_basic+“名字”或off,表示開啟或關閉基于用的通路控制;auth_basic_user_file指明使用者認證檔案所在位置。檔案的建立方式可使用htpasswd。

      安裝httpd-tools

Linux學習(第十三周)

      使用htpasswd指令建立認證檔案

Linux學習(第十三周)

      修改配置檔案

Linux學習(第十三周)

      再次通路就要輸入使用者名和密碼了

Linux學習(第十三周)

      (3)狀态頁子產品:stub_status,指明在哪個URL向外輸出即可。

Linux學習(第十三周)

      通路網頁時,後面添加/status/,即可通路狀态頁。狀态頁顯示的内容:active connections,目前活動連接配接數;accept,接受請求數;handled,處理請求數;requests,收到請求數;reading,正在接受請求過程中的連接配接數;writing,正在發送響應過程中的連接配接數;waiting,正在等待用戶端送出請求的空閑連接配接數。

Linux學習(第十三周)

      (4)日志子產品:log_format,指明日志格式。在主配置檔案中,預設定義了main格式,其中main後面跟的所有以“$”号開頭的是内置變量,辨別要記錄的資訊。access_log,定義通路日志存儲路徑和具體名字。    

Linux學習(第十三周)

      (5)壓縮子產品:gzip on/off,壓縮開關。gzip_comp_level,壓縮級别,預設是1。gzip_disable,禁用壓縮的地方,一般用來針對浏覽器,後可跟正規表達式。gzip_type,壓縮類型。

Linux學習(第十三周)

      請求稍大一些的靜态資源,打開浏覽器自帶的調試功能,可以看到是以gzip格式發送的。

Linux學習(第十三周)

      (6)SSL子產品:ssl on/off,SSL開關;ssl_certificate,知名證書檔案;ssl_protocols,支援的ssl協定版本;ssl_sesstion-cache,ssl的内建緩存,建議使用share格式;ssl_session_timeout,有效時長;ssl_certificate_key,指明私鑰。

      搞定證書檔案,包括生成私鑰、生成證書、給CA簽名等。

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

      使用https進行通路

Linux學習(第十三周)

      (7)重寫子產品:當使用者通路某URL時,将其重寫或重定向文另一個路徑,還可以把使用者的http請求重寫為https。rewrite+正規表達式+替換内容,将通路正規表達式的請求,替換為替換内容中的内容。在重寫配置指令的最後還可以加上标志位,共有四種:當有多條重寫語句時,流程是依次執行的,标志位last表示比對到并重寫後将傳回到最外面,重新進行一次比對,若比對到其他location,則剩餘的rewrite都不會在執行;break表示跳過餘下所有的重寫配置,以此url執行其他非重寫的配置語句;redirect表示重寫此url,并把封包發還給用戶端,用戶端再向新url重新發起請求,已重定向的方式定義此rewrite配置,不過是臨時重定向;permanent,意義和上一條一樣,隻是變成了永久重定向。

      修改配置檔案,将所有對png檔案發起的請求,都會被重寫為jpg。

Linux學習(第十三周)

      這樣在沒有png資源的情況下,對png檔案發起請求,也會被通路到。

Linux學習(第十三周)

      (8)引用子產品:用來防盜鍊的,valid_referers,定義合法引用。後面可以跟上none表示隻有封包首部沒有referer報頭才是合法的,其他情況都是不合法的;後面還可以跟block表示referer報頭為空也是合法的;還可以跟具體主機名,表示隻有該主機引用才是合法的。

      定義配置檔案

Linux學習(第十三周)

2、簡述Linux叢集類型、系統擴充方式及排程方法 。

      在生産環境中,單台主機的并發響應能力有限,若不能滿足服務的需求,一般有兩種解決方案,一是scale up向上擴充,也就是更新主機的配置;另一種是scale out向外擴充,是使用多台主機捆綁起來提供相同的服務,讓并發能夠分散處理,進而達到提高響應能力的效果,這種解決方案也叫作lb cluster,負載均衡叢集。在這種叢集中,有多台主機提供相同服務,共用同一個資料庫,共用一個網絡存儲,甚至還會用同一個緩存伺服器等,需要有個排程器去統一協調,按照統一的排程方法把封包合理的配置設定至各台主機。然而這個排程器,資料庫,網絡存儲伺服器等都隻使用一台的話,會造成壓力很大,發生故障會導緻整個服務當機,這也叫單點故障風險。是以引入了高可用叢集,可以做到多台主機之間互為備援備份,有主有備,定時傳遞心跳資訊,一旦主伺服器發生故障,備用伺服器會搶占主伺服器的位置,為使用者或其他主機提供相同服務。除此之外,還有一種叫高性能叢集,是依靠推擠硬體來提升單台主機的性能能,也就是scale up,在生産環境中使用的不多,但在實驗環境中有可能會用得到,top500每季度會評一次的超級計算機就是其運用。

      負載均衡叢集的排程方法:根據其排程時是否考慮伺服器目前的負載情況可分為靜态和動态。靜态,僅根據算法本身進行排程:RR(輪詢),按順序一個包一個主機的配置設定;WRR(權重輪詢),在RR的基礎上加上了權重的概念,權重大的被配置設定的多,權重小的被配置設定的少;SH(源哈希),不管什麼使用者都根據源位址将其綁定在某台主機上,當使用者第一次請求時依然會以輪詢的方式将其配置設定到某台主機,同時會将使用者IP位址做哈希計算,将值與伺服器的IP位址綁定記于一張哈希表中,以後該使用者再通路時,就将被固定配置設定到那台主機上了;DH(目的哈希),原理和SH一樣,隻是将目标位址做哈希計算,并将其與伺服器綁定,經常用于正向代理的情況,衆多客戶使用多台正向代理伺服器通路外網,為了提高緩存命中率就将目标位址綁定在某台正向代理伺服器上,效果顯著。動态,根據後端伺服器的負載狀态進行配置設定,負載值被稱為overhoad:LC(最少連接配接),overhoad=活動連接配接數*256+非活動連接配接數,負載值小的被配置設定;WLC(權重最少連接配接),overhoad=(活動*256+非活動)/權重,也是越小越容易被配置設定,這也是LVS預設的排程規則;SED(最短期望延遲),overhoad=(活動+1)*256/權重,已不在考慮費活動連接配接數,并且把0活動連接配接數的情況考慮進去了;NQ(不排隊),SED的更新版,從SED的公式可以看出,有可能會出現負載值差距很大的情況。基于這個問題,NQ就是在SED的基礎上,先以輪詢的方式一個一個配置設定,然後再看overhead,盡量不要造成排隊的情況。除此之外,還有兩種動靜結合的排程規則LBLC,把動态和DH相結合;LBLCR,帶複制功能的LBLC,可以吧忙的伺服器上的綁定移一部分到空閑伺服器上。

3、簡述lvs四種叢集有點及使用場景  。

      lvs(Linux Virtual Server),是工作在四層的負載均衡程式,由于在四層無需進入使用者空間,是以也就無需監聽套接字,不受端口數量的限制,對于用不起F5,但并發數又很大的企業可以使用。lvs的工作類型公有四種:lvs-nat;lvs-dr;lvs-tun;lvs-fullnat。lvs中的術語:排程器叫VS,後端伺服器叫RS,VS有兩個位址:面向用戶端的位址叫VIP,面向後端主機的位址叫DIP,RS的位址叫RIP,用戶端的位址叫CIP。

      lvs-nat:多目标IP的DNAT,最簡單的一種結構,最簡單的一種結構,根據iptables中提到過的架構netfilter,使用者封包到達INPUT鍊,檢視是否比對得到ipvs中的規則,比對到的話轉換其目标IP位址并發送給後端伺服器,後端伺服器處理完畢後必須将封包發回給排程器,是以排程器的DIP必須為後端主機的網關,排程器會再次改變源IP位址并發給使用者,整個過程中使用者預設是不知道任何關于後端伺服器的資訊的,其中VIP一般為公網位址,而DIP和RIP是位于同一網段的私網位址。

      lvs-dr:在前一種工作類型中,排程器的壓力極大,因為所有的封包都要通過其中專,lvs-dr類型通過特殊結構,讓後端伺服器在回包時可以直接找到客戶。首先RS與VS在同一交換機上,RIP與DIP位于同一網段且都是公網位址,然後将VIP設定于各台主機的虛拟接口上,如lo0、實體接口:0等,再關閉RS的ARP通告和ARP響應,這樣當客戶把封包發給VIP并到交換機時,自然會找到VS了,因為隻有VS響應此ARP請求。VS檢視ipvs規則,不會去修改目的IP位址,而是修改源目MAC位址将其轉發給後端伺服器,由于後端服務的虛拟接口上有VIP,是以其也會接受封包并做出響應,此響應封包是要直接發給客戶的,是以一定要讓回包的源位址為RS的VIP,這樣就有效減輕了排程器的負擔了。

      lvs-tun:在前兩種類型中,DIP與RIP必須在同一網段,這在實體上就限制了RS與VS必須在同一機房。而lvs-tun類型是通過隧道技術,讓分隔兩地的主機也能作為叢集工作。和lvs-dr類型相似,也是請求封包經過vs,響應封包有後端伺服器直接發給使用者,但不用限制ARP了。在使用者封包到達VS後,VS會在二層幀頭和三層報頭之間添加一個IP報頭,将源目位址設為DIP與RIP并發給RS,RS收到後先拆開第一層IP報頭,知道是lvs-tun模型,再拆第二層,也就是真正的IP報頭,獲得客戶CIP,做出響應時就以源VIP,目CIP發送封包,此模型在生産環境中不多見。

      lvs-fullnat:在無需大費周章的使用隧道技術的情況下,跨越網段部署lvs。其不是标準類型,需要編譯安裝。工作原理和nat一樣,隻是vs在轉換時,不僅能改變目标位址,也能改變源位址,把源位址改為DIP,這樣RS在回包時會按圖索骥找到DIP,VS再将其轉換回CIP并發送給客戶,這樣就可以在客戶和RS都不知道對方的情況下,在VS的掌控下進行通信了。但VS的壓力依然巨大,而且安裝起來不是很友善,是以使用的也不多。

總結:NAT/FULLNAT:響應封包都是經由VS的;DR/TUN:僅請求封包經由VS。NAT:隻修改目的IP位址;FULLNAT:修改源和目的IP位址;DR:dip與rip在同一網段;TUN:dip與rip不在同一網段。

4、描述LVS-NAT、LVS-DR的工作原理并實作配置。

      lvs由兩部分組成ipvsadm和ipvs,ipvs是核心功能,一般是系統安裝時已編譯進核心了。而ipvsadm是一個程式包,用來配置規則的指令行工具。配置指令其實非常簡單,但要準備好環境。

      lvs-nat:準備三台主機,一台作為排程器,擁有兩塊網卡,一塊配置vip,一塊配置dip;兩台作為後端伺服器,配置rip,與dip在同一網段,但與vip不在同一網段,并且兩台伺服器上都準備好相同的web服務,為了測試,準備兩張名字相同,内容不同的頁面。

      主機1:vip:10.0.0.9/dip:192.168.10.11

Linux學習(第十三周)

      主機2:rip:192.168.10.10

Linux學習(第十三周)

      主機3:rip:192.168.10.12

Linux學習(第十三周)

      主機2,3都準備好一張測試頁,并且啟動web服務。

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

      主機1上使用ipvsadm指令,配置規則。表示添加服務,目标位址為10.0.0.9:80,排程規則使用rr;再添加兩台rs進此規則中,配置就完成了。

Linux學習(第十三周)

      使用簡單的循環語句做測試。

Linux學習(第十三周)

      lvs-dr:準備三台主機,一台vs,兩台rs,vip都配置在虛拟接口上,rip和dip都配置在實體接口上,且都位于同一網段。

      主機1:vip:10.0.0.100/dip:10.0.0.9

Linux學習(第十三周)

      主機2:vip:10.0.0.100/rip:10.0.0.8

Linux學習(第十三周)

    主機3:vip:10.0.0.100/rip:10.0.0.10

Linux學習(第十三周)

      主機2、3上關閉arp請求和arp響應。

Linux學習(第十三周)

      主機2、3上配置路由,所有通路10.0.0.100的封包都經由lo:0出。

Linux學習(第十三周)

      主機2、3上配置測試頁。

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

      準備工作完畢,接着就是主機1上的ipvs配置了。

Linux學習(第十三周)

      還是使用循環指令進行測試,但必須再換台主機。

Linux學習(第十三周)