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的服務就完成了。
常用模組:(1)基於IP地址的訪問控制模組,利用allow和deny,放行指定地址、拒絕指定地址訪問。
表示僅允許10.0.0.7訪問,其他的全拒絕
10.0.0.7不受影響
10.0.0.8主機訪問就被拒絕
(2)基於使用者的訪問控制模組:auth_basic+“名字”或off,表示開啟或關閉基於用的訪問控制;auth_basic_user_file指明使用者認證檔案所在位置。檔案的建立方式可使用htpasswd。
安裝httpd-tools
使用htpasswd命令建立認證檔案
修改配置檔案
再次訪問就要輸入使用者名稱和密碼了
(3)狀態頁模組:stub_status,指明在哪個URL向外輸出即可。
修改配置檔案
訪問網頁時,後面新增/status/,即可訪問狀態頁。狀態頁顯示的內容:active connections,當前活動連線數;accept,接受請求數;handled,處理請求數;requests,收到請求數;reading,正在接受請求過程中的連線數;writing,正在傳送響應過程中的連線數;waiting,正在等待客戶端發出請求的空閒連線數。
(4)日誌模組:log_format,指明日誌格式。在主配置檔案中,預設定義了main格式,其中main後面跟的所有以“$”號開頭的是內建變數,標識要記錄的資訊。access_log,定義訪問日誌儲存路徑和具體名字。
(5)壓縮模組:gzip on/off,壓縮開關。gzip_comp_level,壓縮級別,預設是1。gzip_disable,禁用壓縮的地方,一般用來針對瀏覽器,後可跟正則表示式。gzip_type,壓縮型別。
修改配置檔案
請求稍大一些的靜態資源,開啟瀏覽器自帶的除錯功能,可以看到是以gzip格式傳送的。
(6)SSL模組:ssl on/off,SSL開關;ssl_certificate,知名證書檔案;ssl_protocols,支援的ssl協議版本;ssl_sesstion-cache,ssl的內建快取,建議使用share格式;ssl_session_timeout,有效時長;ssl_certificate_key,指明私鑰。
搞定證書檔案,包括生成私鑰、生成證書、給CA簽名等。
修改配置檔案
使用https進行訪問
(7)重寫模組:當用戶訪問某URL時,將其重寫或重定向文另一個路徑,還可以把使用者的http請求重寫為https。rewrite+正則表示式+替換內容,將訪問正則表示式的請求,替換為替換內容中的內容。在重寫配置命令的最後還可以加上標誌位,共有四種:當有多條重寫語句時,流程是依次執行的,標誌位last表示匹配到並重寫後將返回到最外面,重新進行一次匹配,若匹配到其他location,則剩餘的rewrite都不會在執行;break表示跳過餘下所有的重寫配置,以此url執行其他非重寫的配置語句;redirect表示重寫此url,並把報文發還給客戶端,客戶端再向新url重新發起請求,已重定向的方式定義此rewrite配置,不過是臨時重定向;permanent,意義和上一條一樣,只是變成了永久重定向。
修改配置檔案,將所有對png檔案發起的請求,都會被重寫為jpg。
這樣在沒有png資源的情況下,對png檔案發起請求,也會被訪問到。
(8)引用模組:用來防盜鏈的,valid_referers,定義合法引用。後面可以跟上none表示只有報文首部沒有referer報頭才是合法的,其他情況都是不合法的;後面還可以跟block表示referer報頭為空也是合法的;還可以跟具體主機名,表示只有該主機引用才是合法的。
定義配置檔案
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
主機2:rip:192.168.10.10
主機3:rip:192.168.10.12
主機2,3都準備好一張測試頁,並且啟動web服務。
主機1上使用ipvsadm命令,配置規則。表示新增服務,目標地址為10.0.0.9:80,排程規則使用rr;再新增兩臺rs進此規則中,配置就完成了。
使用簡單的迴圈語句做測試。
lvs-dr:準備三臺主機,一臺vs,兩臺rs,vip都配置在虛擬介面上,rip和dip都配置在物理介面上,且都位於同一網段。
主機1:vip:10.0.0.100/dip:10.0.0.9
主機2:vip:10.0.0.100/rip:10.0.0.8
主機3:vip:10.0.0.100/rip:10.0.0.10
主機2、3上關閉arp請求和arp響應。
主機2、3上配置路由,所有訪問10.0.0.100的報文都經由lo:0出。
主機2、3上配置測試頁。
準備工作完畢,接著就是主機1上的ipvs配置了。
還是使用迴圈命令進行測試,但必須再換臺主機。