LVS 生產環境架構詳解

2021-08-01 11:56:07 字數 4531 閱讀 4570

lvs 是 linux virtual server 的簡寫,意即 linux 虛擬伺服器,是乙個開源的負載均衡流量排程器。lvs 集群採用 ip 負載均衡技術和基於內容請求分發技術,將使用者請求按照一定策略分發到後端的 server 上,從而將一組伺服器構成乙個高效能的、高可用的虛擬伺服器。在特定的場景下,整個伺服器集群的結構對客戶是透明的,而且無需修改客戶端和伺服器端的程式。

如圖所示,前端排程器虛擬出 vs(virtual server)監聽和接收請求,真正提供服務的是後端的 member(亦稱為 realserver 或者 rs),數個 member 組成乙個 pool,vs 的請求分發到 pool 上,並在 pool 當中的 member 之間按一定策略分**詢。lvs 與 f5 big-ip ltm 不同之處在於,lvs 沒有 node 的概念,也沒有 profile,並且只提供 4 層的負載均衡。

1.2.1 fullnat

lvs 除了支援傳統的 dr、tun、nat 模式之外, lvs 核心,支援一種新的負載均衡模式:fullnat。fullnat 區分於傳統 nat 模式的地方在於資料報經過排程器的時候,源目 ip 和埠都被轉換了,後端 member 看到的資料報**是排程器的 local address。

採用 fullnat 模式的優點是可以更加靈活的適應不同的網路環境,對網路架構的改動需求最小,而且支援跨集群排程。缺點在於如果後端伺服器需要獲知真實的客戶端 ip 位址,需要打核心補丁。當排程器與後端伺服器建立 tcp 連線的時候,三次握手包的包頭中會攜帶寫入真實客戶端 ip 位址的 address of tcp option 資訊,只有後端伺服器打了補丁才能獲取到客戶端 ip。

1.2.2 nat

在網路環境許可的情況下,採用 nat 模式可以帶來 10%左右的效能提公升,並且不需要配置 local address,由於 local address 需要與內網網際網路段(lvs 與內網核心互聯位址段)在同一子網內,使用 nat 模式能夠減少 ip 位址占用。

1.2.3 內網負載均衡

lvs 支援內網負載均衡功能。在實際應用場景中,可能會遇到在內網當中的伺服器也需要負載均衡的情況,比如中介軟體層呼叫儲存、前端呼叫資料庫等等。內網負載均衡需要網路環境支援,在內網核心上將位址段路由下一跳指向 lvs 的 self ip。需要注意的是,內網負載均衡必須是 fullnat 模式,內網負載均衡不支援 nat 模式。

傳統的 lvs 不具備 snat 功能,當使用 nat 模式進行負載均衡的時候,後端伺服器正常的公網訪問需求仍然需要通過額外的裝置解決。lvs 可以合併 snat,提供了 all-in-one 模式,使用中需要將內網核心的預設閘道器指向 lvs 的 snat ip。所有資料報在流入 lvs 的時候都會在 session 表中檢查一遍,不存在會話的資料報根據策略路由從 snat ipool 池中選取 ip 作為源位址**出去.

lbg 的 tcp established 狀態預設 90s 超時,90 秒內沒有資料傳輸就斷開連線。在 4 層負載均衡場景下,lvs 預設啟用會話保持功能,同乙個 client ip **到同乙個後端伺服器,600 秒無資料傳輸後過期,不同的 client ip 或者會話過期則按排程演算法重新分派。在 7 層負載均衡場景下,預設不啟用會話保持。可以開啟插入 cookie 會話保持功能,預設過期時間 3600 秒。

1.5 7 層負載均衡

可以使用 nginx 或 tengine 提供 7 層負載均衡功能。

在已有成熟的網路架構中部署 lvs,採用並行旁掛的方式不需要網路有太多的變動,而且相比 dr 模式需要在 vlan 配置 ip 位址不同,fullnat 模式的只需要單獨的乙個 vlan,就能夠進行負載均衡。並行旁掛模式分為單臂和直掛兩種。單臂的情況下,對鏈路的壓力很大,當流量高峰期容易導致鏈路跑滿,因此一般採用直掛的方式,將 lvs 分別直掛在 idc 出口和內網核心。所有需要負載均衡的資料流量經由 idc 出口**給 lvs 伺服器,其它流量不受影響。

序列組網架構是應用最為廣泛的負載均衡組網架構。只有在序列組網架構當中,才可以使用 lvs 的 nat 模式。使用 nat 模式可以做到對後端伺服器完全透明,並且排程效能和網路吞吐也比並行旁掛模式要好。

資料的訪問流向均先經過 idc 交換機,通過 idc 交換機路由到 lvs 上,根據 lvs 配置的負載均衡策略對流量進行負載均衡,再經由內網核心交換機和機櫃接入交換機到達相應的伺服器,返回的資料流亦然。

序列組網架構整體網路結構比較單一整齊,業務資料流走向清晰可見,易於設計、部署實施,及後續的維護、管理,相關故障的排查。不過由於 lvs 位於出訪流量的必經之路,除非有相應的路由策略,否則所有的對公網訪問流量也需要經過 lvs,因此需要與 lvs 的 snat 配合使用。

在冗餘方面,lvs 分別支援主備模式和集群模式。在主備模式下,lvs 可採用成熟的開源軟體 keepalived 實現冗餘功能。在 lvs 主備方案實施當中,一台為主機正常提供服務,另外一台提供熱備份。當主機離線時,備機會自動接管所有 vs,接替主機承擔負載均衡的職責。

keepalived 參照了 vrrp 協議實現故障切換。lvs 的 self ip 與 f5 的 self ip 在概念上並不相同。lvs 不需要像 f5 那樣為每台裝置的每個網段配置 self ip,再配置乙個不同於 self ip 的 float ip 對外提供服務。在 lvs 中,self ip 直接對外提供服務,fullnat 模式下還擁有不會隨主備切換的 local addres。在正常情況下,主機對外宣告 self ip,備機沒有配置 ip,保持靜默。如果主機發生故障,備機會在一秒鐘內檢測到,產生故障切換事件,通過傳送免費 arp 宣告自己擁有 self ip,引發流量切換。

keepalived 可以指定某個網路介面執行 vrrp 例項,為了避免 vrrp 影響現有網路,可以採用單獨的心跳線傳輸 failover 流量。備機通過監聽 vrrp 通告確認主機是否存活,如果主備機因為意外同時 active,會導致嚴重的網路故障,並且需要人為干預才能恢復。為了避免單根鏈路故障而導致的意外故障切換,建議心跳線採用兩根鏈路**,可以大大降低故障機率。lvs 支援人為的進行主備機倒換,但是並不具備 f5 的會話映象功能,因此在主備機倒換和故障切換之後,所有會話的連線性都會丟失。

集群模式採用了 lvs ospf 方案,利用開源的軟路由軟體 quagga,對 idc 接入交換機宣告 vip 的主機路由資訊,通過 ospf 等價路由的特性可以提供最多八台 lvs all-active 的集群服務。在集群模式下,lvs 可以橫向擴充套件,自由伸縮,但是會增加網路的複雜性。

單 ospf 區域,lvs 只能使用 dr 模式,與內網核心使用 trunk 連線,在每乙個服務 vlan 宣告 ip,並且所有後端伺服器必須配置 lvs 為閘道器,對網路的要求和後端伺服器的變動需求非常大。如果要使用 nat 模式,需要 lvs 與內網核心也建立 ospf 鄰居關係,將 snat ip 同時宣告給內網核心。

受限於 ospf 排程演算法,集群模式有可能無法提供無感知的伸縮特性。如果三層裝置不支援 ospf 排程一致性 hash,那麼當某台 lvs 離線的時候,所有長連線都會丟失。目前只有 cisco 裝置支援一致性 hash 演算法。

keepalived 可以對 member(rs 後端伺服器)做健康檢查。當某個 rs 服務不可用,keepalived 會自動將其從 pool 中剔除。lvs 目前支援的健康檢查方式有 tcp、http、ssl。

lvs 系統擁有以下幾種介面型別,在實施設計階段要予以考慮。業務介面可根據網路架構和應用場景行衡量。

埠名稱埠用途

埠型別埠數量

failover

主備故障切換心跳線電口2

interal

內網業務流量接

電口\光口

1~8ext

外網業務流量介面

電口\光口

1~8

業務流量介面採用多千兆電口**的方式,需要注意對端三層裝置的鏈路聚合負載均衡模式的選擇,以防聚合中單根鏈路跑滿的情況發生。心跳線的作用是備機探測主機是否存活的關鍵,一旦這條鏈路丟失,lvs 系統就會出現雙 active 的情況,所以使用兩根心跳線**的方式可以讓出現心跳線物理損壞的機率大大降低。

lvs之 lvs原理架構介紹

一 概念 lvs的術語 router gwip vs virtual server,director rs real server cip client ip vip virtual server ip dip ditecter ip connect with rs rip real server ...

LVS架構設計

lvs是linux virtual server 的縮寫,意思是 linux 虛擬伺服器,早在 2.4核心就已經合併入 linux 阿里 lvs 下圖是 lvs在常用網際網路應用架構中的位置 lvs處於最前端,用於將使用者請求 到後端的多台 webserver 上。lvs引入virtual serv...

開發環境 測試環境 預生產環境 生產環境區別

環境分以下幾種 1.開發和配置環境 所有的開發和配置在這個環境裡進行。一般情況下,只有這個環境可以改配置和進行開發,並且一般不在這個環境下建立資料。開發環境就是每個開發人員電腦上的開發環境,只有開發人員可以配置和開發,寫資料測試放在測試環境 2.測試環境 3.預生產環境 不是必須的 從生產環境不定期...