#KeepAlived介紹 ##keepalivedphp
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將把服務器從服務器羣中剔除。
##相關縮略詞html
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 監聽虛擬路由轉發器
##術語nginx
虛擬路由器: 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的主要做用web
主要用做RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。 vrrp 協議完成地址流動 爲vip 地址所在的節點生成ipvs 規則(在配置文件中預先定義) 爲ipvs 集羣的各RS 作健康狀態檢測 基於腳本調用接口經過執行腳本完成腳本中定義的功能,進而影響集羣事務,以此支持nginx、haproxy等服務 高可用web架構是LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選可不選)
##keepAlived有三個進程apache
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內核代碼,其很是好的高級路由框架和子系統功能。