網上對負載的文章很多,理論還是實踐配置,這裏只粗粗談一談自己的理解。沒有創新,只有總結。先看一下產品總列:
一 軟件負載
四層負載:
LVS (Linux Virtual Server)
HAProxy (High Availability Proxy)
Nginx
七層負載:
HAProxy
Nginx
二 硬件負載
F5
Netscaler
三 軟件負載的高可用
Keepalived + LVS/HAProxy/Nginx
四 網關負載
api 層級網關負載:
spring cloud gateway
zuul
五 VRRP 負載的冗餘
Keepalived 負責什麼,高可用!路由規則分動態路由協議和靜態路由配置,動態路由協議有廣爲人知的RIP/OSPF,VRRP出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定運行,因此Keepalvied具有服務器狀態檢測和故障隔離功能。VRRP可以將兩臺或者多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或者多個)對外提供服務。在虛擬路由器內部,同一時間只有一臺物理路由器在對外提供服務,這臺物理路由器被稱爲主路由器(MASTER),一般而言MASTER通過選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能。而其他物理路由器不擁有對外的虛擬IP,僅僅接收MASTER的VRRP狀態通告信息,這部分路由器叫做備份路由器。當主路由器失效的時候,備份路由器重新進行選舉,產生一個新的路由器成爲MASTER。MASTER一個職責是響應VIP的arp包,將VIP和mac地址映射關係告訴局域網內其他主機,同時,它還會以多播的形式(目的地址224.0.0.18)向局域網中發送VRRP通告,告知自己的優先級。網絡中的所有BACKUP節點只負責處理MASTER發出的多播包,當發現MASTER的優先級沒自己高,或者沒收到MASTER的VRRP通告時,BACKUP將自己切換到MASTER狀態,然後做MASTER該做的事:1.響應arp包,2.發送VRRP通告。MASTER還負責ICMP報的重定向和IP包的轉發。
兩個概念
物理路由器:真實被冗餘的對象,即LVS/Nginx/HAProxy。
虛擬路由器:虛擬路由器是VRRP備份組中所有路由器的集合,它是一個邏輯概念,並不是正真存在的。從備份組外面看備份組中的路由器,感覺組中的所有路由器就像一個 一樣,可以理解爲在一個組中: 主路由器+所有備份路由器=虛擬路由器。虛擬路由器有一個虛擬的IP地址和MAC地址。主機將虛擬路由器當作默認網關。虛擬MAC地址的格式爲00-00-5E-00-01-{VRID}。通常情況下,虛擬路由器迴應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候,纔回應接口的真實MAC地址
兩種認證
simple:簡單字符認證。發送VRRP 報文的路由器將認證字填入到VRRP 報文中,而收到VRRP 報文的路由器會將收到的VRRP 報文中的認證字和本地配置的認證字進行比較。如果認證字相同,則認爲接收到的報文是真實、合法的VRRP 報文;否則認爲接收到的報文是一個非法報文。
md5:MD5 認證。發送VRRP 報文的路由器利用認證字和MD5 算法對VRRP 報文進行摘要運算,運算結果保存在Authentication Header(認證頭)中。收到VRRP 報文的路由器會利用認證字和MD5 算法進行同樣的運算,並將運算結果與認證頭的內容進行比較。如果相同,則認爲接收到的報文是真實、合法的VRRP 報文;否則認爲接收到的報文是一個非法報文。
兩個角色
主路由器(MASTER):虛擬路由器通過虛擬IP對外提供服務,而在虛擬路由器內部同一時間只有一臺物理路由器對外提供服務,這臺提供服務的物理路由器被稱爲主路由器。一般情況下Master是由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如:ARP請求,ICMP數據轉發等。
備份路由器(BACKUP):虛擬路由器中的其他物理路由器不擁有對外的虛擬IP,也不對外提供網絡功能,僅接受MASTER的VRRP狀態通告信息,這些路由器被稱爲備份路由器。當主路由器失敗時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色,繼續提供對外服務,整個切換對用戶來說是完全透明的。
三種狀態
Initialize狀態: 系統啓動後就進入Initialize,此狀態下路由器不對VRRP報文做任何處理;
Master狀態;
Backup狀態;
三層健康檢測
網絡層(3):Keepalived通過ICMP協議向服務器集羣中的每一個節點發送一個ICMP數據包(有點類似與Ping的功能),如果某個節點沒有返回響應數據包,那麼認爲該節點發生了故障,Keepalived將報告這個節點失效,並從服務器集羣中剔除故障節點。
傳輸層(4):Keepalived在傳輸層裏利用了TCP協議的端口連接和掃描技術來判斷集羣節點的端口是否正常,比如對於常見的WEB服務器80端口。或者SSH服務22端口,Keepalived一旦在傳輸層探測到這些端口號沒有數據響應和數據返回,就認爲這些端口發生異常,然後強制將這些端口所對應的節點從服務器集羣中剔除掉。
應用層(5):,Keepalived的運行方式也更加全面化和複雜化,用戶可以通過自定義Keepalived工作方式,例如:可以通過編寫程序或者腳本來運行Keepalived,而Keepalived將根據用戶的設定參數檢測各種程序或者服務是否允許正常,如果Keepalived的檢測結果和用戶設定的不一致時,Keepalived將把對應的服務器從服務器集羣中剔除。
優先級選舉
1.VRRP組中IP擁有者。如果虛擬IP地址與VRRP組中的某臺VRRP路由器IP地址相同,則此路由器爲IP地址擁有者,這臺路由器將被定位主路由器。
2.比較優先級。如果沒有IP地址擁有者,則比較路由器的優先級,優先級的範圍是0~255,優先級大的作爲主路由器
3.比較IP地址。在沒有Ip地址擁有者和優先級相同的情況下,IP地址大的作爲主路由器。
優先級調整
1. 當weight > 0時,vrrp_script script腳本執行返回0(成功)時優先級爲priority + weight, 否則爲priority。當BACKUP發現自己的優先級大於MASTER通告的優先級時,進行主從切換。
2. 當weight < 0時,vrrp_script script腳本執行返回非0(失敗)時優先級爲priority + weight, 否則爲priority。當BACKUP發現自己的優先級大於MASTER通告的優先級時,進行主從切換。
3. 當兩個節點的優先級相同時,以節點發送VRRP通告的IP作爲比較對象,IP較大者爲MASTER。
體系結構
Scheduler I/O Multiplexer 是一個I/O複用分發調度器,它負載安排Keepalived所有內部的任務請求,
Memory Mngt 是一個內存管理機制,這個框架提供了訪問內存的一些通用方法
Control Plane 是keepalived的控制版面,可以實現對配置文件編譯和解析
Core componets 這部分主要5個部分
Watchdog:是計算機可靠領域中極爲簡單又非常有效的檢測工具,Keepalived正是通過它監控Checkers和VRRP進程的。
Checkers: 這是Keepalived最基礎的功能,也是最主要的功能,可以實現對服務器運行狀態檢測和故障隔離。
VRRP Stack: 這時keepalived後來引用VRRP功能,可以實現HA集羣中失敗切換功能。
IPVS wrapper: 這個是IPVS功能的一個實現,IPVS warrper模塊將可以設置好的IPVS規則發送的內核空間並且提供給IPVS模塊,最終實現IPVS模塊的負載功能。
Netlink Reflector:用來實現高可用集羣Failover時虛擬IP(VIP)的設置和切換 ,Netlink Reflector的所有請求最後都發送到內核空間層的NETLINK 模塊來完成。
NETLINK 主要用於實現一些高級路由框架和一些相關參數的網絡功能,完成用戶空間層Netlink Reflector模塊發來的各種網絡請求。
六 瞎掰
四層負載,主要是對IP地址的動態修改,七層負載主要是基於內容的分發。具體的四層負載技術有對端口,IP地址,也有對MAC地址的修改,但他們分別是四層,三層和二層,所以,個人覺得四層負載最好理解成最高四層的負載技術,這個最好的實踐和學習就是LVS。網關是伴隨着微服務概念興起的一種架構模式,其最核心的功能提供了反向代理同時會帶有負載均衡的功能,包括帶權重的流量分配,這與nginx很重合。這裏討論的一個前提,以上的產品在網絡架構上是等價的,即是他們承擔負載邏輯的範疇。另一個層面上,在功能上的負載邏輯與在網絡拓撲上的網關角色常常會契合起來,在具體實現無論硬件,系統內核還是開源組件上面,需要對網絡協議網關角色的解析和逆應用。VRRP通過選舉機制決定哪臺路由器承擔轉發任務,局域網內的主機只需將虛擬路由器配置爲缺省網關以達到精簡網絡配置和冗餘,他的作用對象是網關。上面只對負載的高可用性概念詳細說了一下,對於真實的負載技術隔靴搔癢,接下來有機會希望也能對以上產品其他範疇進行總結,這對選型和具體實踐工作很重要。
參考文章:
lvs經典: http://www.linuxvirtualserver.org/zh/lvs1.html
清晰的配置實踐:https://www.cnblogs.com/arjenlee/p/9262737.html#auto_id_39