Keepalived 使用指南
1. 簡介
負載均衡是虛擬服務的一種好的處理方案。當設計一種負載均衡的拓撲時一定要考慮到如下兩點:
真實服務器的可用性使用健康檢測機制。
負載均衡器的可用性使用故障轉移協議。
負載均衡真實服務,提供了一個全局的高可用虛擬服務。為增加負載均衡服務的可用性,需要檢測每個真實服務器節點的狀態。這個問題可以通過使用健康檢測框架來操作一個服務器池來解決。
另一方面,當使用一個負載均衡器director,對虛擬服務引入了一個故障節點。因負載均衡器的高可用性必須被處理,使用專用的路由協議對director的故障轉移/虛擬化。
Keepalived解決這兩個問題:一方面,增加一個強壯和健壯的監控檢測框架;另一方面,實現了一個熱待機協議。這兩個框架可以處理lvs框架來操作lvs真實服務器池,對lvs真實服務池的操作可以通過增加或者刪除基於健康檢測的真實服務器來完成。
2. 術語
LVS 代表了linux virtual Server. LVS 是linux 內核內嵌的一個負載均衡工具。更多信息參考工程主頁:http://www.linux-vs.org. LVS作為一個網橋(通過nat)來負載均衡TCP/UDP流。LVS路由器組件如下:
- WAN 接口。可以被所有用戶訪問到的以太網接口控制器。
- LAN接口。管理所有負載均衡服務器的以太網接口控制器。
- linux內核。內核內嵌了最新的LVS,並且當作路由器的操作系統。
關鍵詞:
LVS組件:
VIP: 可以被所有用戶訪問的虛擬IP,所有的用戶通過這個IP訪問服務器。
真實服務器:應用服務部署在真實的服務器上,處理用戶的請求。上圖中的web server1 和webserver2 即是。
服務器池:一組真實服務器。
虛擬服務器:被應用訪問的服務器池地址。
虛擬服務: 關聯到VIP的TCP/UDP服務。
VRRP 組件:
VRRP:虛擬路由器冗余協議是一種選擇協議,它可以把一個虛擬路由器的責任動態分配到局域網上的 VRRP 路由器中的一台。
VRRP實例:a thread manipulating vrrpv2 specific set of ip addresses。
一個VRRP實例可以作為一個或者多個VRRP實例的備份。
IP地址擁有者:用戶IP地址作為真實接口地址的VRRP實例。
主機狀態:一種VRRP實例狀態,當VRRP實例處於這種狀態就可以認為關聯此實例的IP地址負責處理發送的請求。
備機狀態:一種VRRP實例狀態,當當前的處於主機狀態的VRRP實例宕機時,處於該狀態的VRRP實例有能力處理發送來的請求。
真實負載均衡器:運行一個或者多個VRRP實例的一個LVS director。
虛擬負載均衡器:一組真實負載均衡器。
被同步實例:一個將要被同步的VRRP實例,被監控的VRRP實例。
通知:發送給處於一組處於主機狀態的VRRP實例的一個簡單VRRPv2包的名稱。
3. 軟件架構
3.1 全局和局部
軟件架構涉及4個linux 內核組件:
- LVS核心框架:Kernel2.2使用setsockopt,kernel 2.4使用setsockopt netfilter。
- IPCHAINS 框架:kernel 2.2 LVS NAT架構使用內部的IPCHAINS 包裝器來發送MASQ鏈到內核。這個僅僅在linux 2.2內核上運行。在kernel 2.4 ipvs代碼使用netfilter call來處理特定的NAT規則。
- Netlink接口:對於熱待機協議(VRRP),我們使用netlink接口來設置/去除VRRP的VIP.
- 組播:對於VRRP部分,通告被發送到組播組。
3.2軟件設計
下面將闡述keepalived軟件的內部實現組件。Keepalived使用一個基於中央I/O復用器的多線程框架。2個主要的組件如下:
健康檢測工作線程:每個健康檢測被注冊到全局的調度框架。這些工作線程在keepalived 健康檢測框架下執行健康檢測。健康檢測框架當前執行3個檢測:
TCP檢測:應用第三層檢測。
HTTP GET:檢測一個遠程http服務器的html 內容完整性。
SSL GET:檢測一個遠程SSL服務器的html內容完整性。
混合檢測:應用用戶定義的完整性檢測。
VRRP 包分發器:解服用特定I/O來處理VRRP實例的響應。
這兩個主要組件使用到下面的底層primitives
SMTP通知:一個SMTP包裝器使用異步數據流處理。這個primitive使得keepalived可以發送郵件通知。
IPVS框架:LVS NAT,DR&TUN等。
Netlink:提供VRRP VIP操作。
組播:使用多播來發送VRRP通告。
IPCHAINS框架,如上所述。
SYSLOG: 所有后台通知消息使用syslog后台來記錄。
4. 健康檢測框架
如上《略》
為了director故障轉移,keepalived實現了VRRP協議。這個協議可以這樣簡潔的描述為:
虛擬路由器冗余協議(VRRP)是一種選擇協議,它可以把一個虛擬路由器的責任動態分配到局域網上的 VRRP 路由器中的一台。控制虛擬路由器 IP 地址的 VRRP 路由器稱為主路由器,它負責轉發數據包到這些虛擬 IP 地址。一旦主路由器不可用,這種選擇過程就提供了動態的故障轉移機制,這就允許虛擬路由器的 IP 地址可以作為終端主機的默認第一跳路由器。使用 VRRP 的好處是有更高的默認路徑的可用性而無需在每個終端主機上配置動態路由或路由發現協議。 VRRP 包封裝在 IP 包中發送。[ 引用自rfc2338]。
5. Keepalived 配置語法
配置文件分為三個部分:
5.1 全局定義的語法
5.2 虛擬服務器定義語法
5.3 VRRP實例定義語法