KeepAlived介紹 keepalived 相關縮略詞 術語 keepalived的主要作用 keepAlived有三個進程 keepAlived組件 ...
KeepAlived介紹
keepalived
keepalived是一個類似於layer3, 4 & 7交換機制的軟體,也就是我們平時說的第3層、第4層和第7層交換。
Keepalived的作用是檢測伺服器的狀態,如果有一臺web伺服器宕機或工作出現故障,Keepalived將檢測到,會將有故障的伺服器從系統中剔除,同時使用其他伺服器代替該伺服器的工作,當伺服器工作正常後Keepalived自動將伺服器加入到伺服器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修複故障的伺服器。
Keepalived是一個基於VRRP協議來實現的WEB 服務高可用方案,可以利用其來避免單點故障。
一個WEB服務至少會有2台伺服器運行Keepalived,一臺為主伺服器(MASTER),一臺為備份伺服器(BACKUP),但是對外表現為一個虛擬IP,主伺服器會發送特定的消息給備份伺服器,當備份伺服器收不到這個消息的時候,即主伺服器宕機的時候,備份伺服器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
keepAlived和LVS完全不是同一個概念,它們是獨立互不影響的完成自己的工作。
keepAlived是工作在LVS之上的,所謂的工作在之上,是keepAlived自身的模塊通過配置文件調用ipvsadm命令對LVS進行配置,實現負載均衡。
LVS通過負載均衡實現對伺服器的高擴展性。
keepAlived通過自身的子進程對LVS進行健康檢查,實現LVS的高可用性(即防止LVS崩潰,發送主從伺服器的健康狀態和通知切換主從LVS)。
Layer3,4&7工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:
Layer3,網路層:
Keepalived使用Layer3的方式工作式時,Keepalived會定期向伺服器群中的伺服器發送一個ICMP的數據包(既我們平時用的Ping程式),如果發現某台服務的IP地址沒有激活,Keepalived便報告這台伺服器失效,並將它從伺服器群中剔除,這種情況的典型例子是某台伺服器被非法關機。
Layer3的方式是以伺服器的IP地址是否有效作為伺服器工作正常與否的標準。
Layer4,傳輸層:
Layer4主要以TCP埠的狀態來決定伺服器工作正常與否。
如web server的服務埠一般是80,如果Keepalived檢測到80埠沒有啟動,則Keepalived將把這台伺服器從伺服器群中剔除。
Layer7,應用層:
Layer7就是工作在具體的應用層了,比Layer3,Layer4要複雜一點,在網路上占用的帶寬也要大一些。
Keepalived將根據用戶的設定檢查伺服器程式的運行是否正常,如果與用戶的設定不相符,則Keepalived將把伺服器從伺服器群中剔除。
相關縮略詞
VRRP virtual router redundancy protocol 虛擬路由器冗餘協議
NQA network quality analyzer 網路質量分析
BFD bidirectional forwarding detection 雙向轉發檢測
IRDP icmp router discovery protocol icmp 路由發現協議
VRID virtual router id 虛擬路由器號
AVF active virtual forwarder 活動虛擬路由轉發器
LVF listening virtual forwarder 監聽虛擬路由轉發器
術語
虛擬路由器:
Virtual Router,由一個Master路由器和多個Backup路由器組成,主機將虛擬路由器當作預設網關。
虛擬路由器標識:
VRID(0-255),唯一標識虛擬路由器,有相同的VRID的一組路由器構成一個虛擬路由器。
master路由器:
主設備,虛擬路由器中承擔報文轉發任務的路由器
backup路由器:
備用設備,master路由器出現故障時,能夠代替master路由器工作的路由器
VIP :
Virtual IP,虛擬路由器的ip地址,一個虛擬路由器可以有一個或多個ip地址
VMAC :
Virutal MAC (00-00-5e-00-01-VRID),一個虛擬路由器擁有一個虛擬MAC地址,虛擬MAC地址的格式為00-00-5E-00-01-{VRID}。
通常情況,虛擬路由器回應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候,才回應介面的真實MAC地址。
priority :
優先順序,VRRP根據優先順序來確定虛擬路由器中每台路由器的地址。
通告:
心跳,優先順序等;周期性
工作方式:
搶占式,非搶占式
安全工作,認證:
無認證
簡單字元認證,預共用密鑰
MD5
工作模式:
主/備:單虛擬路徑器
主/主:主/備(虛擬路徑器1),備/主(虛擬路徑器2)
keepalived的主要作用
主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。
vrrp 協議完成地址流動
為vip 地址所在的節點生成ipvs 規則(在配置文件中預先定義)
為ipvs 集群的各RS 做健康狀態檢測
基於腳本調用介面通過執行腳本完成腳本中定義的功能,進而影響集群事務,以此支持nginx、haproxy等服務
高可用web架構是LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選可不選)
keepAlived有三個進程
VRRP協議子進程(VRRP child),healthcheck子進程(Healthchecking child),WatchDog父進程。
每個子進程都有其獨立的多連接I/O調度方式,這種設計一方面有利於優化VRRP調度的穩定性,同時也有利於避免進程自身可能存在的因素導致調度不穩定甚至失靈。
1》父進程是全局進程,專門負責forked子進程並且監控子進程的狀態,也就是管理兩個子進程。
父進程的監控框架被命名為WatchDog,其工作原理是,每個子進程open一個UNIX-doman socket套接字,然後父進程會連接這些套接字,並以5s為周期發送hello信息給子進程來檢查進程是否存活。
如果不能發送hello了,其會重啟子進程。
WatchDog有兩個好處,一個是所有的hello包是通過I/O多鏈路的方式調度給子進程,這種方式可以及時發現子進程的調度體繫結構是否死迴圈,另一個是使用sysV的信息檢測子進程的調度體系。
2》VRRP協議子進程負責VRRP框架,負責實現VRRP協議及主從之間的通信。
3》healthcheck子進程輔助檢查LVS和HTTP的健康狀態。
keepAlived組件
參考文檔:
http://www.keepalived.org/documentation.html
核心組件:
vrrp stack
ipvs wrapper
checkers
控制組件:配置文件分析器
IO 復用器
記憶體管理組件
Control Plane :
Keepalived配置通過文件keepalived.conf完成。
編譯器設計用於解析。
解析器使用關鍵字樹層次結構將每個配置關鍵字映射到具體的處理程式。
中央多級遞歸函數讀取配置文件並遍歷關鍵字樹。
在解析期間,配置文件被轉換為內部存儲器表示。
Scheduler - I/O Multiplexer :
所有事件都安排在同一進程中。
Keepalived是一個單一的過程。
Keepalived是一個網路路由軟體,它對I / O非常封閉。
這裡使用的設計是一個中央選擇(...),負責調度所有的內部任務。
POSIX線程庫不被使用。
該框架為網路目的提供了自己的線程抽象優化。
Memory Management :
這個框架提供了一些通用的記憶體管理功能,如分配,重新分配,發佈等。
這個框架可以在兩種模式下使用:normal_mode&debug_mode。
當使用debug_mode時,它提供了一種強有力的方法來消除和跟蹤記憶體泄漏。
這個低級別環境通過跟蹤分配記憶體併發布來提供緩衝區欠運行保護。
所有使用的緩衝區都是長度固定的,以防止最終的緩衝區溢出。
Core components :
此框架定義了所有代碼中使用的一些常用和全局庫。
這些庫是:html解析,鏈接列表,定時器,向量,字元串形成,緩衝區轉儲,網路工具,守護進程管理,pid處理,低級TCP層4。
這裡的目標是將代碼分解為最大限度地將代碼重覆,以增加模塊化。
WatchDog:
此框架提供子進程監視(VRRP和Healthchecking)。
每個子進程接受連接到自己的看門狗unix域套接字。
父進程向該子進程unix域套接字發送“hello”消息。
Hello消息使用父節點上的I / O多路復用器發送,並使用I / O多路復用器進行接收/處理。
如果父進程檢測到斷開的管道,如果子進程仍然存在並重新啟動,則使用sysV信號進行測試。
Checkers :
這是Keepalived的主要功能之一。
Checkers負責realserver健康檢查。
如果realserver存在,則進行檢查測試,此測試以二進位決定結束:從LVS拓撲中刪除或添加realserver。
內部檢查器設計是實時網路軟體,它採用完全多線程的FSM設計(有限狀態機)。
此檢查器堆棧提供LVS拓撲操作,以按層4到層5/7測試結果。
它在一個由父進程監視的獨立進程中運行。
VRRP Stack :
其他最重要的Keepalived功能。
VRRP(虛擬路由器冗餘協議:RFC2338)專註於導演接管,為路由器備份提供低級設計。
它實現了完整的IETF RFC2338標準,具有LVS和防火牆設計的一些規定和擴展。
它實現了vrrp_sync_group擴展,保證協議接管後的持久路由路徑。
它使用MD5-96位密碼提供實現IPSEC-AH,用於保護協議廣告交換。
有關VRRP的更多信息,請閱讀RFC。
重要的事情:VRRP代碼可以在沒有LVS支持的情況下使用,它被設計為獨立使用。
它運行在由父進程監視的獨立進程中。
System call :
該框架提供了啟動額外系統腳本的功能。
它主要用於MISC檢查器。
在VRRP框架中,它提供了在協議狀態轉換期間啟動額外腳本的功能。
系統調用完成到一個分叉進程,不能全局調度定時器。
Netlink Reflector :
與IPVS包裝器相同。
Keepalived工作與自己的網路介面表示。
IP地址和介面標誌通過內核Netlink通道進行設置和監控。
Netlink消息傳遞子系統用於設置VRRP VIP。
另一方面,Netlink內核消息廣播功能用於反映我們的用戶空間Keepalived內部數據表示與介面相關的任何事件。
因此,任何其他用戶空間(其他程式)netlink操作通過Netlink內核廣播(RTMGRP_LINK和RTMGRP_IPV4_IFADDR)反映到我們的Keepalived數據表示。
SMTP:
SMTP協議用於管理通知。
它實現了IETF RFC821 使用多線程FSM設計。
發送管理通知用於healthcheckers活動和VRRP協議狀態轉換。
SMTP是常用的,可以與任何其他通知子系統(如GSM-SMS,尋呼機,...)進行介面
IPVS wrapper :
此框架用於向內核IPVS代碼發送規則。
它提供了Keepalived內部數據表示和IPVS rule_user表示之間的轉換。
它使用IPVS libipvs來保持與IPVS代碼的通用集成。
IPVS:Wensong
從LinuxVirtualServer.org OpenSource Project 提供的Linux內核代碼。
NETLINK:
由Alexey Kuznetov提供的Linux內核代碼,其非常好的高級路由框架和子系統功能。