linux學習第十二週總結

linux學習第十二週總結

本週學習兩個內容 Linux防火牆和企業級調度LVS

一、Linux防火牆

一、防火牆的分類

(一)、包過濾防火牆。
數據包過濾(packet Filtering)技術是在網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,稱爲訪問控制表(access control lable,ACL)。通過檢查數據流中每個數據包的源地址和目的地址,所用的端口號和協議狀態等因素,或他們的組合來確定是否允許該數據包通過。
包過濾防火牆的優點是它對用戶來說是透明的,處理速度快且易於維護。缺點是:非法訪問一旦突破防火牆,即可對主機上的軟件和配置漏洞進行***;數據包的源 地址、目的地址和IP的端口號都在數據包的頭部,可以很輕易地僞造。“IP地址欺騙”是***針對該類型防火牆比較常用的***手段。

(二)、代理服務型防火牆
代理服務(proxy service)也稱鏈路級網關或TCP通道。它是針對數據包過濾和應用網關技術存在的缺點而引入的防火牆技術,其特點是將所有跨躍防火牆的網絡通信鏈路 分爲兩段。當代理服務器接收到用戶對某個站點的訪問請求後就會檢查請求是否符合控制規則。如果規則允許用戶訪問該站點,代理服務器就會替用戶去那個站點取 回所需的信息,再轉發給用戶,內外網用戶的訪問都是通過代理服務器上的“鏈接”來實現的,從而起到隔離防火牆內外計算機系統的作用。
此外,代理服務也對過往的數據包進行分析和註冊登記,並形成報告,同時當發現有被***跡象時會向網絡管理員發出警告,並保留***記錄,爲證據收集和網絡維護提供幫助。

二、防火牆的工作原理
(一)、包過濾防火牆的工作原理
包過濾是在IP層實現的,因此,它可以只用路由器來完成。包過濾根據包的源IP地址、目的IP地址、源端口、目的端口及包傳遞方向等報頭信息來判斷是否允 許包通過,過濾用戶定義的內容,如IP地址。其工作原理是系統在網絡層檢查數據包,與應用層無關。包過濾器的應用非常廣泛,因爲CPU用來處理包過濾的時 間可以忽略不計。而且這種防護措施對用戶透明,合法用戶在進出網絡時,根本感覺不到它的存在,使用起來很方便。這樣系統就具有很好的傳輸性能,易擴展。
但是這種防火牆不×××全,因爲系統對應用層信息無感知--也就是說,它們不理解通信的內容,不能在用戶級別上進行過濾,即不能識別不同的用戶和防止地址的 盜用。如果***者把自己主機的IP地址設成一個合法主機的IP地址,就可以很輕易地通過包過濾器,這樣更容易被***攻破。基於這種工作機制,包過濾防火牆 有以下缺陷:
1、通信信息:包過濾防火牆只能訪問部分數據包的頭信息。
2、通信和應用狀態信息:包過濾防火牆是無狀態的,所以它不可能保存來自於通信和應用的狀態信息。
3、信息處理:包過濾防火牆處理信息的能力是有限的。

(二)、代理服務型防火牆工作原理
代理服務型防火牆在應用層上實現防火牆功能。它能提供部分與傳輸有關的狀態,能外圈提供與應用相關的狀態和部分傳輸的信息,它還能處理和管理信息。

三、使用iptables實現包過濾防火牆

(一)、iptables概述及原理
從內核2.4之後使用全新的內核包過慮管理工具--iptables,這個工具使用戶更易於理解其工作原理,更容易被使用,也具有更強大的功能。
iptables只是一個管理內核包過濾的工具,可以加入、插入或刪除核心包過濾表格(鏈)中的規則。實際上真正執行這些過濾規則的是netfilter(linux核心中一個通用架構)及其相關模塊(如iptables模塊和nat模塊)。
netfilter是linux核心中一個通用架構,它提供一系列的“表”(tables),每個表由若干“鏈”(chains)組成,而每條鏈中可以由一條或數條規則(rule)組成。可以這樣理解,netfilter是表的容器,表是鏈的容器,鏈是規則的容器。
系統缺省的表爲“filter”,該表中包含了INPUT、FORWARD和OUTPUT 3個鏈。每一條鏈中可以有一條或數條規則,每一條規則都是這樣定義的:“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。當一個數據包到達一個鏈 時,系統就會從第一條規則開始檢查,看是否符合該規則所定義的條件,如果滿足,系統將根據該條規則所定義的方法處理該數據包;如果不滿足則繼續檢查下一條 規則;最後,如果數據包不符合該鏈中任何一條規則,系統就會根據該鏈預先定義的策略(policy)來處理該數據包。

(二)、iptables傳輸數據包的過程
當數據包進入系統時,系統首先根據路由表決定將數據包發給哪一條鏈,則可能有以下3種情況:
1、數據包的目的地址是本機,則系統將數據包送往INPUT鏈,如果通過規則檢查,則該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
2、數據包的上的地址不是本機,也就是說這個包將被轉發,則系統將數據包送往FORWARD鏈,如果通過規則檢查,該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
3、數據包是由本地系統進程產生的,則系統將其送往OUTPUT鏈,如果通過規則檢查,則該包被髮給相應的本地進程處理;如果沒有通過規則檢查,系統將丟棄該包。
用戶可以給各鏈定義規則,當數據包到達其中的每一條鏈,iptables就會根據鏈中定義的規則來處理這個包。iptables將數據包的頭信息與它所傳 遞到的鏈中的每條規則進行比較,看它是否和每條規則完全匹配。如果數據包與某條規則匹配,iptables就對該數據包執行由該規則指定的操作。例如某條 鏈中的規則決定要丟棄(DROP)數據包,數據包就會在該鏈處丟棄;如果鏈中規則接受(ACCEPT)數據包,數據包就可以繼續前進;但是,如果數據包與 這條規則不匹配,那麼它將與鏈中的下一條規則進行比較。如果該數據包不符合該鏈中的任何一條規則,那麼iptables將根據該鏈預先定義的默認策略來決 定如何處理該數據包,理想的默認策略應該告訴iptables丟棄(DROP)該數據包。

(三)、iptables的優點
netfilter/iptables的最大優點是它可以配置有狀態的防火牆,這是ipfwadm和ipchains等以前的工具都無法提供的一種重要功 能。有狀態的防火牆能夠指定並記住爲發送或接收信息包所建立的連接的狀態。防火牆可以從信息包的連接跟蹤狀態獲得該信息。在決定新的信息包過濾時,防火牆 所使用的這些狀態信息可以增加其效率和速度。這裏有4種有效狀態,名稱分別爲ESTABLISHED、INVALID、NEW和RELATED。
狀態ESTABLISHED指出該信息包屬於已經建立的連接,該連接一直用於發送和接收信息包並且完全有效。INVALID狀態指出該信息包與任何已知的 流或連接都不相關聯,它可能包含錯誤的數據或頭。狀態NEW表示該信息包已經或將啓動新的連接,或者它與尚未用於發送和接收信息包的連接相關聯。最 後,RELATED表示該信息包正在啓動新連接,以及它與已建立的連接想關聯。
netflter/iptables的另一個重要優點是,它使用戶可以完全控制防火牆配置和信息包過濾。可以定製自己的規則來滿足特定需求,從而只允許想要的網絡流量進入系統。

(四)、iptables的基礎知識
1、規則(rule)
規則(rule)就是網絡管理員預定的條件,規則一般定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表 中,這些規則分別指定了源地址、目的地址、傳輸協議(TCP、UDP、ICMP)和服務類型(如HTTP、FTP、SMTP)。當數據包與規則匹配 時,iptables就根據規則所定義的方法來處理這些數據包,如放行(ACCEPT)、拒絕(REJECT)、或丟棄(DROP)等。配置防火牆的主要 規則就是添加、修改和刪除這些規則。
2、鏈(chains)
鏈(chains)是數據包傳播的路徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個數據包到達一個鏈 時,iptables就會從鏈中的第一條規則開始檢查,看該數據包是否滿足規則所定義的條件,如果滿足,系統就會根據該條規則所定義的方法處理該數據包, 否則iptables將繼續檢查下一條規則。如果該數據包不符合鏈中任何一何況規則,iptables就會根據該鏈預先定義的默認策略來處理該數據包。
3、表(tables)
表(tables)提供特定的功能,iptables內置3個表,即filter表、nat表和mangle表,分別用於實現包過濾,網絡地址轉換和包重構的功能。
(1)filter表。filter表主要用於過濾數據包,該表根據系統管理員預定義的一組規則過濾符合條件的數據包。對防火牆而言,主要利用filter表中指定一系列規則來實現對數據包進行過濾操作。
filter表是iptables默認的表,如果沒有指定使用哪個表,iptables就默認使用filter表來執行所有的命令。filter表包含了 INPUT鏈(處理進入的數據包)、FORWARD鏈(處理轉發的數據包)和OUTPUT鏈(處理本地生成的數據包)。在filter表中只允許對數據包 進行接受或丟棄的操作,而無法對數據包進行更改。
(2)nat表。nat青主要用於網絡地址轉換NAT,該表可以實現一對一、一對多和多對多的NAT工作,iptables就是使用該表實現共享上網功能 的。nat表包含了PREROUTING鏈(修改即將到來的數據包)、OUTPUT鏈(修改在路由之前本地生成的數據包)和POSTROUTING鏈(修 改即將出去的數據包)。
(3)mangle表。mangle表主要用於對指定的包進行修改,因爲某些特殊應用可能去改寫數據包的一些傳輸特性,例如理性數據包的TTL和TOS等,不過在實際應用中該表的使用率不高。

(五)、關閉系統防火牆
由於系統的防火牆功能也是使用iptables實現的,如果用戶在系統的iptables之上設置規則,很容易發生衝突,所以在進行iptables學習之前,建議關閉系統的防火牆功能。

(六)、iptables命令格式
iptables的命令格式較爲複雜,一般格式如下:
#iptables [-t 表] -命令 匹配 操作
注:iptables對所有選項和參數都區分大小寫!
1、表選項
表選項用於指定命令應用於哪個iptables內置表。iptables內置表包括filter表、nat表和mangle表。
2、命令選項
命令選項用於指定iptables的執行方式,包括插入規則、刪除規則和添加規則等:
-P 或--policy 定義默認策略
-L 或--list 查看iptables規則列表
-A 或--append 在規則列表的最後增加一條規則
-I 或--insert 在指定的位置插入一條規則
-D 或--delete 在規則列表中刪除一條規則
-R 或--replace 替換規則列表中的某條規則
-F 或--flush 刪除表中的所有規則
-Z 或--zero 將表中所有鏈的計數和流量計數器都清零
3、匹配選項
匹配選項指定數據包與規則匹配所應具有的特徵,包括源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和端口號(如80、21、110)等:
-i 或--in-interface 指定數據包是從哪個網絡接口進入
-o 或--out-interface 指定數據包是從哪個網絡接口輸出
-p 或--porto 指定數據包匹配的協議,如TCP、UDP
-s 或--source 指定數據包匹配的源地址
--sport 指定數據包匹配的源端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口
-d 或--destination 指定數據包匹配的目標地址
--dport 指定數據包匹配的目標端口號,可以使用“起始端口號:結束端口號”的格式指定一個範圍的端口
4、動作選項
動作選項指定當數據包與規則匹配時,應該做什麼操作,如接受或丟棄等。
ACCEPT 接受數據包
DROP 丟棄數據包
REDIRECT 將數據包重新轉向本機或另一臺主機的某個端口,通常用此功能實現透明代理或對外開放內網的某些服務
SNAT 源地址轉換,即改變數據包的源地址
DNAT 目標地址轉換,即改變數據包的目的地址
MASQUERADE IP僞裝,即常說的NAT技術。MASQUERADE只能用於ADSL等撥號上網的IP僞裝,也就是主機的IP地址是由ISP動態分配的;如果主機的IP地址是靜態固定的,就要使用SNAT
LOG 日誌功能,將符合規則的數據包的相關信息記錄在日誌中,以便管理員進行分析和排錯

(七)、iptables命令的使用
1、查看iptables規則
初始的iptables沒有規則,但是如果在安裝時選擇自動安裝防火牆,系統中會有默認的規則存在,可以先查看默認的防火牆規則:
#iptables [-t 表名]
[-t 表名]:定義查看哪個表的規則列表,表名可以使用filter、nat和mangle,如果沒有定論表名,默認使用fliter表
:列出指定表和指定鏈的規則
:定義查看指定表中哪個鏈的規則,如果不指明哪個鏈,將查看某個表中所有鏈的規則
#iptables -L -n (查看filter表所有鏈的規則)
注:在最後添加-n參數,可以不進行IP與HOSTNAME的轉換,顯示的速度會快很多。
#iptables -t nat -L OUTPUT (查看nat表OUTPUT鏈的規則)
2、定義默認策略
當數據包不符合鏈中任何一條規則時,iptables將根據該鏈默認策略來處理數據包,默認策略的定義方法如下
#iptables [-t 表名]
[-t 表名]:定義查看哪個表的規則,表名可以使用filter、nat和mangle,如果沒有寶,默認使用filter表
:定義默認策略
:定義查看指定表中哪個鏈的規則,如果不指明,將查看某個表中所有鏈的規則
:處理數據包的動作,可以使用ACCEPT(接受)和DROP(丟棄)
#iptables -P INPUT ACCEPT (將filter表INPUT鏈的默認策略定義爲接受)
#iptables -t nat -P OUTPUT DROP (將nat表OUTPUT鏈的默認策略定義爲丟棄)
創建一個最簡單的規則範例。對於沒有經驗和時間的用戶而言,設置一個簡單而又實用的規則是必要的,最基本的原則是“先拒絕所有數據包,然後再允許需要的數 據包”,也就是說通常爲filter表的鏈定義。一般都將INPUT定義爲DROP,這樣就可以阻止任何數據包進入,其他項目定義爲ACCEPT,這樣對 外發送的數據就可以出去。
#iptables -P INPUT DROP
#iptables -P FORWARD ACCEPT
#iptables -P OUTPUT ACCEPT
3、增加、插入、刪除和替換規則
#iptables [-t 表名] 鏈名 [規則編號] [-i | o 網卡] [-p 協議類型] [-s 源IP | 源子網] [--sport 源端口號] [-d 目標IP | 目標子網] [--dport 目標端口號]
[-t 表名]:定義查看哪個表的規則,表名可以使用filter、nat和mangle,如果沒有定義,默認使用filter表
-A:新增一條規則,該規則將增加到規則列表的最後一行,該參數不能使用規則編號
-I:插入一條規則,原來該位置上的規則就會身後順序移動,如果沒有指定規則編號,則在第一條規則前插入
-D:刪除一條規則,可以輸入完整規則,或直接指定規則編號
-R:替換某條規則,規則被替換並不會改變順序,必須要指定替換的規則編號
:指定查看指定表中某條鏈的規則,可以使用INPUT、OUTPUT、FORWARD、PREROUTING、OUTPUT、POSTROUTIN
[規則編號]:規則編號是在插入、刪除和替換規則時用,編號是按照規則列表的順序排列,第一條規則編號爲1
[-i | o 網卡名稱]:i是指數據包從哪塊網卡輸入,o是批數據包從哪塊網卡輸出
[-p 協議類型]:可以指定規則應用的協議,包含TCP、UDP、ICMP等
[-s 源IP | 源子網]:數據包的源IP或子網
[--sport 源端口號]:數據包的源端口號
[-d 目標IP | 目標子網]:數據包的目標IP或子網
[--dport 目標端口號]:數據包的目標端口號
:處理數據包的動作
#iptables -A INPUT -i lo -j ACCEPT (追加一條規則,接受所有來自lo接口的數據包)
#iptables -A INPUT -s 192.168.0.44 -j ACCEPT (追加一條規則,接受所有來自192.168.0.44的數據包)
#iptables -A INPUT -s 192.168.0.44 -j DROP (追加一條規則,丟棄所有來自192.168.0.44的數據包)
注:iptables的按照順序讀取規則的,如果兩條規則衝突,以排在前面的規則爲準。
#iptables -I INPUT 3 -s 192.168.1.0/24 -j DROP (在INPUT鏈中的第3條規則前插入一條規則,丟棄所有來自192.168.1.0/24的數據包)
注:-I參數如果沒有指定插入的位置,將插入到所有規則的最前面
#iptables -D INPUT 2 (刪除filter表中INPUT鏈中的第2條規則)
#iptables -R INPUT 2 -s 192.168.10.0/24 -p tcp --dport 80 -j DROP (替換filter表INPUT鏈中第2條規則爲,禁止192.168.10.0/24訪問TCP的80端口)
4、清除規則和計數器
在新建規則時,往往需要清除原有的或舊的規則,以免影響新規則。如果規則較多,逐條刪除比較麻煩,可以使用清除規則參數快速刪除所有規則。
#iptables [-t 表名]
[-t 表名]:指定策略將應用於哪個表,可以使用filter、nat和mangle,如果沒有指定,默認爲filter表
-F:刪除指定表中所有規則
-Z:將指定表中數據包計數器和流量計數器歸零
#iptables -Z (將filter表中數據包計數器和流量計數器請零)
#iptables -F (刪除filter表中的所有規則)
5、記錄與恢復防火牆規則
可以使用記錄與恢復防火牆規則命令,將現有防火牆機制複製下來,在需要恢復時直接恢復即可。
#iptables-save > 文件名 (記錄當前防火牆規則)
#iptables-restore > 文件名 (將防火牆規則恢復到當前主機環境)

三、企業級調度LVS

Cluster概念

Scale UP:垂直擴展,向上擴展,增強,性能更強的計算機運行同樣的服務

Scale Out:水平擴展,向外擴展,增加設備,並行地運行多個服務調度分配問題,Cluster

Cluster:集羣,爲解決某個特定問題將多臺計算機組合起來形成的單個系統

Linux Cluster類型:
LB:Load Balancing,負載均衡
HA:High Availiablity,高可用,SPOF(single Point Of failure)
MTBF:Mean Time Between Failure 平均無故障時間
MTTR:Mean Time To Restoration( repair)平均恢復前時間
A=MTBF/(MTBF+MTTR) (0,1):99%, 99.5%, 99.9%, 99.99%, 99.999%
HPC:High-performance computing,高性能 www.top500.org

分佈式系統:
分佈式存儲:雲盤
分佈式計算:hadoop,Spark

集羣:同一個業務系統,部署在多臺服務器上。集羣中,每一臺服務器實現的功能沒有差別,數據和代碼都是一樣的

分佈式:一個業務被拆成多個子業務,或者本身就是不同的業務,部署在多臺服務器上。分佈式中,每一臺服務器實現的功能是有差別的,數據和代碼也是不一樣的,分佈式每臺服務器功能加起來,纔是完整的業務

分佈式是以縮短單個任務的執行時間來提升效率的,而集羣則是通過提高單位時間內執行的任務數來提升效率。

對於大型網站,訪問用戶很多,實現一個羣集,在前面放一個均衡服務器,後面幾臺服務器完成同一業務,如果有業務訪問的時候,響應服務器看哪臺服務器的負載不是很重,就將給哪一臺去完成,並且一臺服務器垮了,其它的服務器可以頂上來。分佈式的每一個節點,都完成不同的業務,如果一個節點垮了,那這個業務可能就會失敗

集羣設計原則
可擴展性—集羣的橫向擴展能力
可用性—無故障時間(SLA)
性能—訪問響應時間
容量—單位時間內的最大併發吞吐量(C10K 併發問題)

基礎設施層面:
提升硬件資源性能—從入口防火牆到後端web server均使用更高性能的硬件資源
多域名—DNS 輪詢A記錄解析
多入口—將A記錄解析到多個公網IP入口
多機房—同城+異地容災
CDN(Content Delivery Network)—基於GSLB(Global Server Load Balance)實現全局負載均衡,如DNS

業務層面:
分層:安全層、負載層、靜態層、動態層、(緩存層、存儲層)持久化與非持久化
分割:基於功能分割大業務爲小服務
分佈式:對於特殊場景的業務,使用分佈式計算

Cluster分類
LB Cluster的實現

硬件

F5 Big-IP
Citrix Netscaler
A10 A10

軟件

lvs:Linux Virtual Server,阿里四層SLB (Server Load Balance)使用
nginx:支持七層調度,阿里七層SLB使用Tengine
haproxy:支持七層調度
ats:Apache Traffic Server,yahoo捐助給apache
perlbal:Perl 編寫
pound

基於工作的協議層次劃分:

傳輸層(通用):DPORT
LVS:
    nginx:stream
    haproxy:mode tcp

應用層(專用):針對特定協議,自定義的請求模型分類
    roxy server:
        http:nginx, httpd, haproxy(mode http), ...
        fastcgi:nginx, httpd, ...
        mysql:mysql-proxy, ...

會話保持:負載均衡

(1) session sticky:同一用戶調度固定服務器
Source IP:LVS sh算法(對某一特定服務而言)
Cookie
(2) session replication:每臺服務器擁有全部session
session multicast cluster
(3) session server:專門的session服務器
Memcached,Redis

LVS介紹
LVS:Linux Virtual Server,負載調度器,內核集成,章文嵩(花名 正明)
官網:http://www.linuxvirtualserver.org/
VS: Virtual Server,負責調度
RS: Real Server,負責真正提供服務
L4:四層路由器或交換機
阿里的四層LSB(Server Load Balance)是基於LVS+keepalived實現

工作原理:
VS根據請求報文的目標IP和目標協議及端口將其調度轉發至某RS,根據調度算法來挑選RS

iptables/netfilter:

iptables:用戶空間的管理工具
netfilter:內核空間上的框架
流入:PREROUTING --> INPUT
流出:OUTPUT --> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
DNAT:目標地址轉換; PREROUTING

lvs集羣類型中的術語:

VS:Virtual Server,Director Server(DS)
    Dispatcher(調度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx)

backend server(haproxy)
    CIP:Client IP
    VIP: Virtual serve IP VS外網的IP
    DIP: Director IP VS內網的IP
    RIP: Real server IP
訪問流程:CIP <--> VIP == DIP <--> RIP

lvs: ipvsadm/ipvs

ipvsadm:用戶空間的命令行工具,規則管理器
    用於管理集羣服務及RealServer
ipvs:工作於內核空間netfilter的INPUT鉤子上的框架

lvs集羣的類型:

lvs-nat:修改請求報文的目標IP,多目標IP的DNAT
lvs-dr:操縱封裝新的MAC地址
lvs-tun:在原請求IP報文之外新加一個IP首部
lvs-fullnat:修改請求報文的源和目標IP

lvs-nat:
本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改爲某挑出的RS的RIP和PORT實現轉發
(1)RIP和DIP應在同一個IP網絡,且應使用私網地址;RS的網關要指向DIP
(2)請求報文和響應報文都必須經由Director轉發,Director易於成爲系統瓶頸
(3)支持端口映射,可修改請求報文的目標PORT
(4)VS必須是Linux系統,RS可以是任意OS系統

LVS-DR模式

LVS-DR:Direct Routing,直接路由,LVS默認模式,應用最廣泛,通過爲請求報文重新封裝一個MAC首部進行轉發,源MAC是DIP所在的接口的MAC,目標MAC是某挑選出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目標IP/PORT均保持不變

(1) Director和各RS都配置有VIP
(2) 確保前端路由器將目標IP爲VIP的請求報文發往Director
在前端網關做靜態綁定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改內核參數以限制arp通告及應答級別
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
(3)RS的RIP可以使用私網地址,也可以是公網地址;RIP與DIP在同一IP網絡;RIP的網關不能指向DIP,以確保響應報文不會經由Director
(4)RS和Director要在同一個物理網絡
(5)請求報文要經由Director,但響應報文不經由Director,而由RS直接發往Client
(6)不支持端口映射(端口不能修敗)
(7)RS可使用大多數OS系統

lvs-tun模式

轉發方式:不修改請求報文的IP首部(源IP爲CIP,目標IP爲VIP),而在原IP報文之外再封裝一個IP首部(源IP是DIP,目標IP是RIP),將報文發往挑選出的目標RS;RS直接響應給客戶端(源IP是VIP,目標IP是CIP)

(1) DIP, VIP, RIP都應該是公網地址
(2) RS的網關一般不能指向DIP
(3) 請求報文要經由Director,但響應不經由Director
(4) 不支持端口映射
(5) RS的OS須支持隧道功能

lvs-fullnat模式

lvs-fullnat:通過同時修改請求報文的源IP地址和目標IP地址進行轉發
CIP --> DIP
VIP --> RIP

(1) VIP是公網地址,RIP和DIP是私網地址,且通常不在同一IP網絡;因此,RIP的網關一般不會指向DIP
(2) RS收到的請求報文源地址是DIP,因此,只需響應給DIP;但Director還要將其發往Client
(3) 請求和響應報文都經由Director
(4) 支持端口映射
注意:此類型kernel默認不支持

LVS工作模式總結

lvs-nat與lvs-fullnat:請求和響應報文都經由Director
lvs-nat:RIP的網關要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP網絡,但要能通信

lvs-dr與lvs-tun:請求報文要經由Director,但響應報文由RS直接發往Client
lvs-dr:通過封裝新的MAC首部實現,通過MAC網絡轉發
lvs-tun:通過在原IP報文外封裝新IP頭實現轉發,支持遠距離通信

ipvs scheduler

ipvs scheduler:根據其調度時是否考慮各RS當前的負載狀態
兩種:靜態方法和動態方法

靜態方法:僅根據算法本身進行調度
1、RR:roundrobin,輪詢
2、WRR:Weighted RR,加權輪詢
3、SH:Source Hashing,實現session sticky,源IP地址hash;將來自於同一個IP地址的請求始終發往第一次挑中的RS,從而實現會話綁定
4、DH:Destination Hashing;目標地址哈希,第一次輪詢調度至RS,後續將發往同一個目標地址的請求始終轉發至第一次挑中的RS,典型使用場景是正向代理緩存場景中的負載均衡,如:寬帶運營商

動態方法:主要根據每RS當前的負載狀態及調度算法進行調度Overhead=value 較小的RS將被調度

1、LC:least connections 適用於長連接應用
Overhead=activeconns*256+inactiveconns
2、WLC:Weighted LC,默認調度方法
Overhead=(activeconns*256+inactiveconns)/weight
3、SED:Shortest Expection Delay,初始連接高權重優先
Overhead=(activeconns+1)*256/weight
4、NQ:Never Queue,第一輪均勻分配,後續SED
5、LBLC:Locality-Based LC,動態的DH算法,使用場景:根據負載狀態實現正向代理
6、LBLCR:LBLC with Replication,帶複製功能的LBLC,解決LBLC負載不均衡問題,從負載重的複製到負載輕的RS

ipvsadm包構成

ipvsadm:
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
規則保存工具:/usr/sbin/ipvsadm-save
規則重載工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config

ipvsadm命令:

核心功能:
集羣服務管理:增、刪、改
集羣服務的RS管理:增、刪、改
查看

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pe persistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address 刪除
ipvsadm –C 清空
ipvsadm –R 重載
ipvsadm -S [-n] 保存
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]

管理集羣服務:增、改、刪

增、改:
    ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
刪除:
    ipvsadm -D -t|u|f service-address
service-address:
    -t|u|f:
        -t: TCP協議的端口,VIP:TCP_PORT
        -u: UDP協議的端口,VIP:UDP_PORT
        -f:firewall MARK,標記,一個數字
[-s scheduler]:指定集羣的調度算法,默認爲wlc

管理集羣上的RS:增、改、刪

增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
刪:ipvsadm -d -t|u|f service-address -r server-address
server-address:
    rip[:port] 如省略port,不作端口映射
選項:
lvs類型:
    -g: gateway, dr類型,默認
    -i: ipip, tun類型
    -m: masquerade, nat類型
    -w weight:權重
清空定義的所有內容:ipvsadm –C
清空計數器:ipvsadm -Z [-t|u|f service-address]
查看:ipvsadm -L|l [options]
    --numeric, -n:以數字形式輸出地址和端口號
    --exact:擴展信息,精確值
    --connection,-c:當前IPVS連接輸出
    --stats:統計信息
    --rate :輸出速率信息
ipvs規則:/proc/net/ip_vs
ipvs連接:/proc/net/ip_vs_conn

保存及重載規則

保存:建議保存至/etc/sysconfig/ipvsadm
    ipvsadm-save > /PATH/TO/IPVSADM_FILE
    ipvsadm -S > /PATH/TO/IPVSADM_FILE
    systemctl stop ipvsadm.service
重載:
    ipvsadm-restore < /PATH/FROM/IPVSADM_FILE
    ipvsadm -R < /PATH/FROM/IPVSADM_FILE
    systemctl restart ipvsadm.service

LVS

負載均衡集羣設計時要注意的問題
(1) 是否需要會話保持
(2) 是否需要共享存儲
共享存儲:NAS, SAN, DS(分佈式存儲)
數據同步:
lvs-nat:
設計要點:
(1) RIP與DIP在同一IP網絡, RIP的網關要指向DIP
(2) 支持端口映射
(3) Director要打開核心轉發功能

LVS-DR

DR模型中各主機上均需要配置VIP,解決地址衝突的方式有三種:
(1) 在前端網關做靜態綁定
(2) 在各RS使用arptables
(3) 在各RS修改內核參數,來限制arp響應和通告的級別
限制響應級別:arp_ignore
0:默認值,表示可使用本地任意接口上配置的任意地址進行響應
1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,纔給予響應
限制通告級別:arp_announce
0:默認值,把本機所有接口的所有信息向每個接口的網絡進行通告
1:儘量避免將接口信息向非直接連接網絡進行通告
2:必須避免將接口信息向非本網絡進行通告
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章