【keepalived】keepalived初識

keepalived是集羣管理中保證集羣高可用的一個服務軟件,用來防止單點故障。

Keepalived起初是爲LVS設計的,專門用來監控集羣系統中各個服務節點的狀態,它根據TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節點的狀態。

Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虛擬路由冗餘協議)出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定運行

因此Keepalvied 一方面具有服務器狀態檢測和故障隔離功能,另外一方面也有HA cluster功能。

keepalived工作原理

keepalived是以VRRP協議爲實現基礎的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗餘協議。
將N臺提供相同功能的服務器組成一個服務器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該服務器所在局域網內其他機器的默認路由爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master

VRRP協議

VRRP協議的簡單介紹

虛擬路由冗餘協議,可以認爲是實現路由器高可用的協議,即將N臺提供相同功能的路由器組成一個路由器組,這個組裏面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由/網關爲該vip),master會發組播,當backup收不到vrrp包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

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

VRRP協議是一種容錯的主備模式的協議,保證當主機的下一跳路由出現故障時,由另一臺路由器來代替出現故障的路由器進行工作,通過VRRP可以在網絡發生故障時透明的進行設備切換而不影響主機之間的數據通信。

VRRP協議中的一些簡單概念

虛擬路由器:VRRP備份組中所有路由器的集合,它是一個邏輯概念,並不是正真存在的。可以理解爲在一個組中: 主路由器+所有備份路由器=虛擬路由器

主路由器:在虛擬路由器內部同一時間只有一臺物理路由器對外提供服務,這臺提供服務的物理路由器被稱爲主路由器。一般情況下主路由器是由選舉算法產生,它擁有對外服務的虛擬IP,提供各種網絡功能,如:ARP請求,ICMP數據轉發等

備份路由器:其他物理路由器不擁有對外的虛擬IP,也不對外提供網絡功能,僅接受MASTER的VRRP狀態通告信息。當主路由器失敗時,處於BACKUP角色的備份路由器將重新進行選舉,產生一個新的主路由器進入MASTER角色,繼續提供對外服務,整個切換對用戶來說是完全透明的。

VRRP選舉機制

VRRP路由器運行中的狀態:

  • Initialize狀態:系統啓動後就進入Initialize,此狀態下路由器不對VRRP報文做任何處理

  • Master狀態:一般主路由器處於Master狀態

  • Backup狀態:一般備份路由器處於Backup狀態

VRRP使用選舉機制來確定路由器的狀態,優先級選舉:

  • VRRP組中IP擁有者。如果虛擬IP地址與VRRP組中的某臺VRRP路由器IP地址相同,則此路由器爲IP地址擁有者,這臺路由器將被定位主路由器。

  • 比較優先級。如果沒有IP地址擁有者,則比較路由器的優先級,優先級的範圍是0~255,優先級大的作爲主路由器

  • 比較IP地址。在沒有Ip地址擁有者和優先級相同的情況下,IP地址大的作爲主路由器。

在這裏插入圖片描述
如圖所示,虛擬IP爲10.1.1.254,在VRRP組中沒有IP地址擁有者,則比較優先級,很明顯RB和RA的優先級要大於RC,則比較RA和RB的IP地址,RB的IP地址大。所以RB爲組中的主路由器

工作原理:

  1. 路由器使用VRRP 功能後,會根據優先級確定自己在備份組中的角色。優先級高的路由器成爲Master 路由器,優先級低的成爲Backup 路由器。

  2. Master 擁有對外服務的虛擬IP,提供各種網絡功能,並定期發送VRRP 報文,通知備份組內的其他設備自己工作正常;Backup 路由器只接收Master 發來的報文信息,用來監控Master 的運行狀態。

  3. 當Master 失效時,Backup 路由器進行選舉,優先級高的Backup 將成爲新的Master。

注意:

  1. 如果Backup 路由器的定時器超時後仍未收到Master 路由器發送來的VRRP報文,則認爲Master 路由器已經無法正常工作,備份組內的路由器根據優先級選舉出Master 路由器,承擔報文的轉發功能。

  2. VRRP存在搶佔方式和非搶佔方式:

    搶佔方式:當Backup 路由器收到VRRP 報文後,會將自己的優先級與報文中的優先級進行比較。如果大於通告報文中的優先級,則成爲Master 路由器;否則將保持Backup狀態;

    非搶佔方式:只要Master 路由器沒有出現故障,備份組中的路由器始終保持Master 或Backup 狀態,Backup 路由器即使隨後被配置了更高的優先級也不會成爲Master 路由器;

keepalived 工作模式

Keepalived工作在TCP/IP參考模型的三層、四層、五層(物理層,鏈路層):

網絡層:Keepalived通過ICMP協議向服務器集羣中的每一個節點發送一個ICMP數據包(有點類似與Ping的功能),如果某個節點沒有返回響應數據包,那麼認爲該節點發生了故障,Keepalived將報告這個節點失效,並從服務器集羣中剔除故障節點。

傳輸層:Keepalived在傳輸層裏利用了TCP協議的端口連接和掃描技術來判斷集羣節點的端口是否正常,比如對於常見的WEB服務器80端口。或者SSH服務22端口,Keepalived一旦在傳輸層探測到這些端口號沒有數據響應和數據返回,就認爲這些端口發生異常,然後強制將這些端口所對應的節點從服務器集羣中剔除掉。

應用層:Keepalived的運行方式也更加全面化和複雜化,用戶可以通過自定義Keepalived工作方式,例如:可以通過編寫程序或者腳本來運行Keepalived,而Keepalived將根據用戶的設定參數檢測各種程序或者服務是否允許正常,如果Keepalived的檢測結果和用戶設定的不一致時,Keepalived將把對應的服務器從服務器集羣中剔除。

keepalived架構圖

在這裏插入圖片描述
簡單模塊介紹:

  1. SchedulerI/OMultiplexer是一個I/O複用分發調度器,它負載安排Keepalived所有內部的任務請求;

  2. Memory Mngt是一個內存管理機制,這個框架提供了訪問內存的一些通用方法;

  3. Control Plane 是keepalived的控制版面,可以實現對配置文件編譯和解析;

Core componets 這部分主要包含了5個部分;

a)看門狗—Watchdog:是計算機可靠領域中極爲簡單又非常有效的檢測工具,Keepalived正是通過它監控Checkers和VRRP進程的。

b)檢查者—Checkers:是Keepalived最基礎、最主要的功能,可以實現對服務器運行狀態檢測和故障隔離。

c)VRRP模塊—VRRP Stack:是keepalived引用VRRP功能,可以實現HA集羣中失敗切換功能。負責負載均衡器之間的失敗切換FailOver;

d)IPVS模塊—IPVS wrapper:是IPVS功能的一個實現,IPVSwarrper模塊將可以設置好的IPVS規則發送的內核空間並且提供給IPVS模塊,最終實現IPVS模塊的負載功能。

e)VIP切換—Netlink Reflector:用來實現高可用集羣Failover時虛擬IP(VIP)的設置和切換

Keepalived啓動後會有三個進程:

  • 父進程core:內存管理,子進程管理等等

  • 子進程 vrrp:vrrpd子進程

  • 子進程check:healthchecker子進程

由上圖可知,兩個子進程都被系統WatchDog看管,healthchecker子進程實現檢查各自服務器的健康程度,例如HTTP,LVS等等,如果healthchecker子進程檢查到MASTER上服務不可用,就會通知本機上的兄弟VRRP子進程,讓它刪除通告,並且去掉虛擬IP,轉換爲BACKUP狀態

keepalived與heartbeat的區別:

Keepalived中實現輕量級的高可用,一般用於前端高可用,且不需要共享存儲,一般常用於兩個節點的高可用。而Heartbeat用於服務的高可用,且需要共享存儲,一般用於多節點的高可用。

配置

安裝:

:apt-get install keepalived

配置文件:

! Configuration File for keepalived              

global_defs {                        #全局定義部分
   notification_email {              #設置警報郵箱
     [email protected]            #郵箱
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]      #設置發件人地址
   smtp_server 192.168.50.1        #設置smtp server地址
   smtp_connect_timeout 30          #設置smtp超時連接時間    以上參數可以不配置
   router_id LVS_DEVEL               #是Keepalived服務器的路由標識在一個局域網內,這個標識(router_id)是唯一的
}

vrrp_instance VI_1 {      #VRRP實例定義區塊名字是VI_1
    state MASTER          #表示當前實例VI_1的角色狀態這個狀態只能有MASTER和BACKUP兩種狀態,並且需要大寫這些字符ASTER爲正式工作的狀態,BACKUP爲備用的狀態
    interface eth0       
    virtual_router_id 51 #虛擬路由ID標識,這個標識最好是一個數字,在一個keepalived.conf配置中是唯一的, MASTER和BACKUP配置中相同實例的virtual_router_id必須是一致的.
    priority 100                #priority爲優先級 越大越優先
    advert_int 1               #爲同步通知間隔。MASTER與BACKUP之間通信檢查的時間間隔,單位爲秒,默認爲1.
    authentication {           #authentication爲權限認證配置不要改動,同一vrrp實例的MASTER與BACKUP使用相同的密碼才能正常通信。
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #設置虛擬IP地址
        192.168.50.16         #此格式ip a顯示 ifconfig不顯示
        192.168.50.17/24 dev eth0 label eth0:1    #綁定接口爲eth0,別名爲eth0:1
   }
#至此爲止以上爲實現高可用配置,如只需使用高可用功能下邊配置可刪除
#以下爲虛擬服務器定義部分
virtual_server 192.168.50.16 80 {      #設置虛擬服務器,指定虛擬IP和端口
    delay_loop 6                           #健康檢查時間爲6秒
    lb_algo rr                               #設置負載調度算法 rr算法
    lb_kind NAT                            #設置負載均衡機制 #有NAT,TUN和DR三種模式可選
    nat_mask 255.255.255.0         #非NAT模式註釋掉此行  註釋用!號
    persistence_timeout 50           #連接保留時間,50秒無響應則重新分配節點
    protocol TCP                           #指定轉發協議爲TCP 
    real_server 192.168.5.150 80 {      #RS節點1
        weight 1                #權重
        TCP_CHECK {             #節點健康檢查
        connect_timeout 8       #延遲超時時間
        nb_get_retry 3          #重試次數
        delay_before_retry 3    #延遲重試次數
        connect_port 80         #利用80端口檢查
    }
    }
    real_server 192.168.50.149 80 {      #RS節點2
        weight 1
        TCP_CHECK {
        connect_timeout 8
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80 
    }
    }
}
:vim /etc/keepalived/keepalived.conf

vrrp_instance VI_1 { #虛擬主機名,可以改
   state MASTER #主路由
   interface eth0 #網卡名 ifconfig確定
   virtual_router_id 51 #路由器標識,MASTER和BACKUP必須是一致的
   priority 100 #定義優先級,數字越大,優先級越高,在同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級。這樣MASTER故障恢復後,就可以將VIP資源再次搶回來
   advert_int 1 #1秒發送1次備發消息
   authentication { #授權文件
       auth_type PASS #加密類型,主備之間必須是同一加密類型、同一密碼
       auth_pass 123456 #密碼(默認爲1111)
   }
   virtual_ipaddress {
       192.168.11.25 # 虛擬ip
   }
}

啓動服務:

:service keepalived start

查看是否有進程:

:ps -ef | grep keepalived
root     10133     1  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10134 10133  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10135 10133  0 04:47 ?        00:00:00 /usr/sbin/keepalived
root     10138  9296  0 04:48 pts/0    00:00:00 grep --color=auto keepalived

其次

ip addr

查看ip信息是否創建成功,ping虛擬ip是否相通。

:ping 192.168.11.25
PING 192.168.11.25 (192.168.11.25) 56(84) bytes of data.
64 bytes from 192.168.11.25: icmp_seq=1 ttl=64 time=0.013 ms
64 bytes from 192.168.11.25: icmp_seq=2 ttl=64 time=0.026 ms

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章