LVS(Linux Virtual Server)即Linux虛擬服務器,是一個虛擬的服務器集羣系統,由章文嵩博士在1998年5月成立,在linux2.6+後將lvs自動加入了kernel模塊,咱們看下lvs在咱們平常的服務器架構所在的位置:html
只用於代理內部網絡對Internet的鏈接請求,客戶機必須指定代理服務器,並將原本要直接發送到Web服務器上的http請求發送到代理服務器中,正向代理指的是客戶端代理,是由用戶控制並知曉的代理方式,如我不能訪問fb,而後使用了某國外服務器做爲跳板機,最後成功訪問了就是正向代理。前端
指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器;並將從服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器,反向代理指的是服務端代理,在大型網站背後並非只有一臺機器提供服務,好比我訪問微博,微博的某一個反向代理服務器將我解析到內部服務器的一臺機器,而後這臺機器給我提供微博的消息(固然實際狀況比這個複雜的多),這些對於用戶都是不可見的,咱們只會感受只有一臺機器與我交互。mysql
(Load Balance)讓負載均衡,固然這是一個簡單的歸納,我在微信裏看的架構師之路寫的一篇如何實現負載均衡的文章就不錯,我有10臺機器都提供web服務,那麼我如何均衡的利用這10臺機器呢,讓這10臺機器保證高性能、高可用、高併發就是負載均衡要考慮和要作的事情。linux
實現負載均衡通常可使用順序、比重、流量、服務類別等進行分配,負載均衡的部署方式也分爲路由和服務直接返回模式,實現負載均衡的主要幾個方式:nginx
http重定向web
下載網站用的較多,其實也算一種負載均衡,工做在應用層的業務代碼中算法
DNS負載均衡sql
DNS負載提供域名到IP解析的過程,咱們實例查看百度的域名解析實際上是一對多的,這時候DNS服務器也就充當了負載均衡,不少域名運營商提供的智能dns以及多線解析都是利用了DNS負載均衡的技術,開源的BIND就可提供電信聯通多線解析等強大的技術。數據庫
反向代理負載均衡後端
IP負載均衡
直接路由
IP隧道
F5硬件負載均衡
所謂四層就是基於IP+端口的負載均衡,主要表明有lvs。
七層負載也稱內容交換,就是基於URL等應用層信息的負載均衡,主要表明有nginx。
LVS 的 IP 負載均衡技術是經過 IPVS 模塊來實現的,IPVS 是 LVS集羣系統的核心軟件,它的主要做用是:安裝在 Director Server 上,同時在 Director Server上虛擬出一個IP 地址,用戶必須經過這個虛擬的 IP 地址訪問服務器。這個虛擬 IP 通常稱爲 LVS 的VIP,即 Virtual IP。訪問的請求首先通過 VIP 到達負載調度器,而後由負載調度器從Real Server 列表中選取一個服務節點響應用戶的請求。 在用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的 Real Server 節點,而 Real Server節點如何返回數據給用戶,是 IPVS 實現的重點技術。
ipvs
: 工做於內核空間,主要用於使用戶定義的策略生效
ipvsadm
: 工做於用戶空間,主要用於用戶定義和管理集羣服務的工具
上圖所示,ipvs工做於內核空間的INPUT鏈上,當收到用戶請求某集羣服務時,通過PREROUTING鏈,經檢查本機路由表,送往INPUT鏈;在進入netfilter的INPUT鏈時,ipvs強行將請求報文經過ipvsadm定義的集羣服務策略的路徑改成FORWORD鏈,將報文轉發至後端真實提供服務的主機。
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的源MAC地址改成本身DIP的MAC地址,目標MAC改成了RIP的MAC地址,並將此包發送給RS。
③.RS發現請求報文中的目的MAC是本身,就會將次報文接收下來,處理完請求報文後,將響應報文經過lo接口送給eth0網卡直接發送給客戶端。
注意:
須要設置lo接口的VIP不能響應本地網絡內的arp請求。
總結:
一、經過在調度器 LB 上修改數據包的目的 MAC 地址實現轉發。注意源地址仍然是 CIP,目的地址仍然是 VIP 地址。
二、請求的報文通過調度器,而 RS 響應處理後的報文無需通過調度器 LB,所以併發訪問量大時使用效率很高(和 NAT 模式比)
三、由於 DR 模式是經過 MAC 地址改寫機制實現轉發,所以全部 RS 節點和調度器 LB 只能在一個局域網裏面
四、RS 主機須要綁定 VIP 地址在 LO 接口(掩碼32 位)上,而且須要配置 ARP 抑制。
五、RS 節點的默認網關不須要配置成 LB,而是直接配置爲上級路由的網關,能讓 RS 直接出網就能夠。
六、因爲 DR 模式的調度器僅作 MAC 地址的改寫,因此調度器 LB 就不能改寫目標端口,那麼 RS 服務器就得使用和 VIP 相同的端口提供服務。
七、直接對外的業務好比WEB等,RS 的IP最好是使用公網IP。對外的服務,好比數據庫等最好使用內網IP。
優勢:
和TUN(隧道模式)同樣,負載均衡器也只是分發請求,應答包經過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不須要隧道結構,所以可使用大多數操做系統作爲物理服務器。
DR模式的效率很高,可是配置稍微複雜一點,所以對於訪問量不是特別大的公司能夠用haproxy/nginx取代。日1000-2000W PV或者併發請求1萬一下均可以考慮用haproxy/nginx。
缺點:
全部 RS 節點和調度器 LB 只能在一個局域網裏面。
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP,目標地址爲VIP。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將在客戶端請求報文的首部再封裝一層IP報文,將源地址改成DIP,目標地址改成RIP,並將此包發送給RS。
③.RS收到請求報文後,會首先拆開第一層封裝,而後發現裏面還有一層IP首部的目標地址是本身lo接口上的VIP,因此會處理次請求報文,並將響應報文經過lo接口送給eth0網卡直接發送給客戶端。
注意:
須要設置lo接口的VIP不能在共網上出現。
總結:
1.TUNNEL 模式必須在全部的 realserver 機器上面綁定 VIP 的 IP 地址
2.TUNNEL 模式的 vip ------>realserver 的包通訊經過 TUNNEL 模式,不論是內網和外網都能通訊,因此不須要 lvs vip 跟 realserver 在同一個網段內
3.TUNNEL 模式 realserver 會把 packet 直接發給 client 不會給 lvs 了
4.TUNNEL 模式走的隧道模式,因此運維起來比較難,因此通常不用。
優勢:
負載均衡器只負責將請求包分發給後端節點服務器,而RS將應答包直接發給用戶。因此,減小了負載均衡器的大量數據流動,負載均衡器再也不是系統的瓶頸,就能處理很巨大的請求量,這種方式,一臺負載均衡器可以爲不少RS進行分發。並且跑在公網上就能進行不一樣地域的分發。
缺點:
隧道模式的RS節點須要合法IP,這種方式須要全部的服務器支持」IP Tunneling」(IP Encapsulation)協議,服務器可能只侷限在部分Linux系統上。
①.客戶端將請求發往前端的負載均衡器,請求報文源地址是CIP(客戶端IP),後面統稱爲CIP),目標地址爲VIP(負載均衡器前端地址,後面統稱爲VIP)。
②.負載均衡器收到報文後,發現請求的是在規則裏面存在的地址,那麼它將客戶端請求報文的目標地址改成了後端服務器的RIP地址並將報文根據算法發送出去。
③.報文送到Real Server後,因爲報文的目標地址是本身,因此會響應該請求,並將響應報文返還給LVS。
④.而後lvs將此報文的源地址修改成本機併發送給客戶端。
注意:
在NAT模式中,Real Server的網關必須指向LVS,不然報文沒法送達客戶端
特色:
一、NAT 技術將請求的報文和響應的報文都須要經過 LB 進行地址改寫,所以網站訪問量比較大的時候 LB 負載均衡調度器有比較大的瓶頸,通常要求最多之能 10-20 臺節點
二、只須要在 LB 上配置一個公網 IP 地址就能夠了。
三、每臺內部的 realserver 服務器的網關地址必須是調度器 LB 的內網地址。
四、NAT 模式支持對 IP 地址和端口進行轉換。即用戶請求的端口和真實服務器的端口能夠不一致。
優勢:
集羣中的物理服務器可使用任何支持TCP/IP操做系統,只有負載均衡器須要一個合法的IP地址。
缺點:
擴展性有限。當服務器節點(普通PC服務器)增加過多時,負載均衡器將成爲整個系統的瓶頸,由於全部的請求包和應答包的流向都通過負載均衡器。當服務器節點過多時,大量的數據包都交匯在負載均衡器那,速度就會變慢!
不管是 DR 仍是 NAT 模式,不可避免的都有一個問題:LVS 和 RS 必須在同一個 VLAN 下,不然 LVS 沒法做爲 RS 的網關。
這引起的兩個問題是:
一、同一個 VLAN 的限制致使運維不方便,跨 VLAN 的 RS 沒法接入。
二、LVS 的水平擴展受到制約。當 RS 水平擴容時,總有一天其上的單點 LVS 會成爲瓶頸。
Full-NAT 由此而生,解決的是 LVS 和 RS 跨 VLAN 的問題,而跨 VLAN 問題解決後,LVS 和 RS 再也不存在 VLAN 上的從屬關係,能夠作到多個 LVS 對應多個 RS,解決水平擴容的問題。
Full-NAT 相比 NAT 的主要改進是,在 SNAT/DNAT 的基礎上,加上另外一種轉換,轉換過程以下:
在包從 LVS 轉到 RS 的過程當中,源地址從客戶端 IP 被替換成了 LVS 的內網 IP。
內網 IP 之間能夠經過多個交換機跨 VLAN 通訊。
當 RS 處理完接受到的包,返回時,會將這個包返回給 LVS 的內網 IP,這一步也不受限於 VLAN。
LVS 收到包後,在 NAT 模式修改源地址的基礎上,再把 RS 發來的包中的目標地址從 LVS 內網 IP 改成客戶端的 IP。
Full-NAT 主要的思想是把網關和其下機器的通訊,改成了普通的網絡通訊,從而解決了跨 VLAN 的問題。採用這種方式,LVS 和 RS 的部署在 VLAN 上將再也不有任何限制,大大提升了運維部署的便利性。
1.FULL NAT 模式也不須要 LBIP 和 realserver ip 在同一個網段; full nat 跟 nat 相比的優勢是:保證 RS 回包必定可以回到 LVS;由於源地址就是 LVS--> 不肯定
2.full nat 由於要更新 sorce ip 因此性能正常比 nat 模式降低 10%
工做模式 | VS/NAT | VS/TUN | VS/DR |
---|---|---|---|
Real server(節點服務器) | Config dr gw | Tunneling | Non-arp device/tie vip |
Server Network | Private | LAN/WAN | LAN |
Server number(節點數量) | Low 10-20 | High 100 | High 100 |
Real server gateway | Load balance | Own router | Own router |
優勢 | 地址和端口轉換 | Wan環境加密數據 | 性能最高 |
缺點 | 效率低 | 須要隧道支持 | 不能跨域LAN |
在內核中的鏈接調度算法上,IPVS已實現瞭如下八種調度算法:
固定調度算法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr
通常應用場景 | 經常使用調度算法 |
---|---|
通常的網絡服務,如 http,mail,mysql | 基本輪訓、加權最小鏈接、加權輪訓 |
防火牆集羣 | 源地址散列調度SH和目標地址散列調度DH |
web cache和DB cache | 局部最小、帶複製的局部最小 |
測試http和https耗時
curl -w "tcp: %{time_connect}, ssl: %{time_appconnect}\n" -so /dev/null https://www.alipay.com
SSL是在TCP三次握手後又進行SSL握手,SSL通常使用的加密算法是RSA加密算法,比較耗費CPU計算,SSL加速卡能夠解決CPU消耗高的問題。