keepalived詳解一


一.Keepalived介紹:

Keepalived是Linux下一個輕量級的高可用解決方案,它與HeartBeat、RoseHA實現的功能類似,都可以實現服務或者網絡的高可用,但是又有差別,HeartBeat是一個專業的、功能

完善的高可用軟件,它提供了HA軟件所需的基本功能,比如心跳檢測和資源接管,監測集群中的系統服務,在集群節點間轉移共享IP地址的所有者等,HeartBeat功能強大,但是部署和使用相對比較麻煩;與HeartBeat相比,Keepalived主要是通過虛擬路由冗余來實現高可用功能,雖然它沒有HearBeat功能強大,但Keepalived部署和使用非常簡單,所有配置只需一個配置文件即可完成。

1.Keepalived是什么:

Keepalived起初是為LVS設計的,專門用來監控集群系統中各個服務節點的狀態。它根據TCP/IP參考模型的第三、第四和第五層交換機制檢測每個服務節點的狀態,如果某個服務節點出現異常,或工作出現故障,Keepalived將檢測到,並將出現故障的服務節點從集群系統中剔除,而在故障節點恢復正常后,Keepalived又可以自動將此服務節點重新加入服務器集群中,這些工作全部自動完成,不需要人工干涉,需要人工完成的只是修復出現故障的服務節點。

Keepalived后來又加入了VRRP的功能,VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議)出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定的運行。因此,keepalived一方面具有服務器狀態檢測和故障隔離功能,另一方面也具有HA cluster功能。

2.VRRP協議與工作原理:

在現實的網絡環境中,主機之間的通信都是通過配置靜態路由(默認網關)完成的,而主機之間的路由器一旦出現故障,通信就會失敗,因此,在這種通信模式中,路由器就成了一個單點瓶頸,為了解決這個問題,就引入了VRRP協議。

熟悉網絡的讀者對VRRP協議應該並不陌生。它是一種主備模式的協議,通過VRRP可以在網絡發生故障時透明地進行設備切換而不影響主機間的數據通信,這其中涉及兩個概念:物理路由器和虛擬路由器。

VRRP可以將兩台或多台物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器通過虛擬IP(一個或多個)對外提供服務,而在虛擬路由器內部是多個物理路由器協同工作,同一時間只有一台物理路由器對外提供服務,這台物理路由器被稱為主路由器(處於MASTER角色)。一般情況下MASTER由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如ARP請求、ICMP、數據轉發等。而其他物理路由器不擁有對外的虛擬IP,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱為備份路由器(處於BACKUP角色)。當主路由器失效時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色繼續提供對外服務,整個切換過程對用戶來說完全透明。

每個虛擬路由器都有一個唯一標識,稱為VRID,一個VRID與一組IP地址構成了一個虛擬路由器。在VRRP協議中,所有的報文都是通過IP多播形式發送的,而在一個虛擬路由器中,只有處於MASTER角色的路由器會一直發送VRRP數據包,處於BACKUP角色的路由器只接收MASTER發過來的報文信息,用來監控MASTER運行狀態,因此,不會發生BACKUP搶占的現象,除非它的優先級更高。而當MASTER不可用時,BACKUP也就無法收到MASTER發過來的報文信息,於是就認定MASTER出現故障,接着多台BACKUP就會進行選舉,優先級最高的BACKUP將成為新的MASTER,這種選舉並進行角色切換的過程非常快,因而保證了服務的持續可以性。

3.Keepalived工作原理:

Keepalived通過VRRP實現高可用功能的工作原理,而Keepalived作為一個高性能集群軟件,它還能實現對集群中服務器運行狀態的監控及故障隔離。Keepalived工作在TCP/IP參考模型的第三、第四和第五層,也就是網絡層、傳輸層、應用層。根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制如下:

□ 網絡層 ,運行着4個重要的協議:互聯網協議IP、互聯網控制報文協議ICMP、地址轉換協議ARP以及反向地址轉換協議RARP。Keepalived在網絡層采用的最常見的工作方式是通過ICMP協議向服務器集群中的每個節點發送一個ICMP的數據包(類似於ping實現的功能),如果某個節點沒有返回響應數據包,那么認為此節點發生了故障,Keepalived將報告此節點失效,並從服務器集群中剔除故障節點。

■傳輸層,提供了兩個主要協議:傳輸控制協議TCP和用戶數據協議UDP。傳輸控制協議TCP可以提供可靠的數據傳輸服務、ip地址和端口,代表TCP的一個連接端。要獲得TCP服務,需要在發送機的一個端口上和接收機的一個端口上建立連接,而Keepalived在傳輸層就是利用TCP協議的端口連接和掃描技術來判斷集群節點是否正常的。比如,對於常見的web服務默認的80端口、SSH服務默認的22端口等,Keepalived一旦在傳輸層探測到這些端口沒有響應數據返回,就認為這些端口發生異常,然后強制將此端口對應的節點從服務器集群組中移除。

□ 應用層,可以運行FTP、TELNET、SMTP、DNS等各種不同類型的高層協議,Keepalived的運行方式也更加全面化和復雜化,用戶可以通過自定義Keepalived的工作方式,例如,用戶可以通過編寫程序來運行Keepalived,而Keepalived將根據用戶的設定檢測各種程序或服務是否允許正常,如果Keepalived的檢測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除。

4.Keepalived的體系結構:

Keepalived是一個高度模塊化的軟件,結構簡單,但擴展性很強。

Keepalived體系結構拓撲圖

Keepalived詳解(一)_高可用

從圖中可以看出,Keepalived的體系結構從整體上分為兩層,分別是用戶空間層(User Space)和內核空間層(Kernel Space)。

內核空間層處於最底層,它包括IPVS和NETLINK兩個模塊。IPVS模塊是Keepalived引入的一個第三方模塊,通過IPVS可以實現基於IP的負載均衡集群。IPVS默認包含在LVS集群軟件中。而對於LVS集群軟件,相信做運維的讀者並不陌生:在LVS集群中,IPVS安裝在一台叫做Director Server的服務器上,同時在Director Server上虛擬出一個IP地址對外提供服務,而用戶必須通過這個虛擬IP地址才能訪問服務。這個虛擬IP一般稱為LVS的VIP,即Virtual IP。訪問的請求首先經過VIP到達Director Server,然后有Director Server從服務器集群節點中選取一個服務節點響應用戶的請求。

Keepalived最初就是為LVS提供服務的,由於Keepalived可以實現對集群節點的狀態檢測,而IPVS可以實現負載均衡功能,因此,Keepalived借助於第三方模塊IPVS就可以很方便地搭建一套負載均衡系統。在這里有個誤區,由於Keepalived可以和IPVS一起很好地工作,因此很多學者都以為Keepalived就是一個負載均衡軟件,這種理解是錯誤的。

在Keepalived中,IPVS模塊是可配置的,如果需要負載均衡功能,可以在編譯Keepalived時打開負載均衡功能,也可以通過配置編譯參數關閉。

NETLINK模塊主要用於實現一些高級路由框架和一些相關的網絡功能,完成用戶空間層Netlink Reflector 模塊發來的各種網絡請求。

用戶空間層位於內核空間層之上,Keepalived的所有具體功能都在這里實現,下面介紹幾個重要部分所實現的功能。

在用戶空間層,Keepalived又分為4個部分,分別是Scheduler I/O Multiplexer、Memory Management、Control Plance和Core components。其中,Scheduler I/O Multiplexer是一個I/O復用分發調度器,他負責安排Keepalived所有內部的任務請求。Memory Management是一個內存管理機制,這個框架提供了訪問內存的一些通用方法。Control Plane 是Keepalived的控制面板,可以實現對配置文件進行編譯和解析,Keepalived的配置文件解析比較特殊,它並不是一次解析所有模塊的配置。而是只有在用到某模塊時才解析相應的配置。最后詳細說一下Core components,這部分是Keepalived的核心組件,包含了一系列功能模塊,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper 和Netlink Reflector,下面介紹每個模塊所實現的功能如下:

(1)WatchDog

WatchDog是計算機可靠性領域中一個極為簡單又非常有效的檢測工具,它的工作原理是針對被監視的目標設置一個計數器和一個閾值,WatchDog會自己增加此計數值,然后等待被監視的目標周期性地重置該計數值。一旦被監控目標發生錯誤,就無法重置此計數值,WatchDog就會檢測到,於是采取對應的恢復措施,例如重啟或關閉。

在linux中很早就引入了WatchDog功能,而Keepalived正是通過WatchDog的運行機制來監控Checkers和VRRP進程的。

(2) Checkers

這是Keepalived最基礎的功能,也是最主要的功能,可實現對服務器運行狀態檢測和故障隔離。

(3) VRRP Stack

這是Keepalived后來引入的VRRP功能,可以實現HA集群中失敗切換(Failover)功能。Keepalived通過VRRP功能再結合LVS負載均衡軟件即可部署一個高性能的負載均衡集群系統。

(4) IPVS wrapper

這是IPVS功能的一個實現。IPVS wrapper模塊可以將設置好的IPVS規則發送到內核空間並提交給IPVS模塊,最終實現IPVS模塊的負載均衡功能。

用來實現高可用集群中Failover時虛擬IP(VIP)的設置和切換。Netlink Reflector的所有請求最后都發送到內核空間層的NETLINK模塊來完成。

二、keepalived配置

1、基本配置
masters配置
image
backup配置
image
2、測試主備切換
image
master正常運行狀態
image
vip 在master上正常工作狀態
image
從機backup狀態正常
image
無VIP狀態
在master機上執行systemctl stop keepalived 模擬master主down掉情況
image
查看VIP狀態
image
查看原從機keepalived運行情況
![image](https://img2020.cnblogs.com/blog/2537344/202110/2537344-20211020164138697-2068593221.png
VIP漂移情況
image
在模擬切換時用另外一台主機ping vip 觀察切換時的平滑度
image
三、使用腳本監控服務狀況(nginx\mysql......)待續


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM