輕量級高可用實現工具--keepalived詳解

一 、keepalived簡介算法


   

keepalived:它的誕生最初是爲ipvs(一些服務,內核中的一些規則)提供高可用性的,最初最主要目的是可以自主調用ipvsadm來生成規則,而且可以自動實現將用戶訪問的地址轉移到其餘節點上進行實現的。
keepalived:核心包含兩個ckechers和VRRP協議。

   

   

ckeckers
#檢查服務檢查reserved的健康情況的,基於腳本也能夠服務自己的健康情況。這裏是實現ipvs後端健康情況的檢測的。
VRRP
# Virtual Router Redundancy Protocol 虛擬路由器冗餘協議  -----keepalived依賴的最重要的核心技術

   


2、VRRP協議詳解後端


   (一)VRRP技術優勢安全

     

VRRP是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另外一臺路由器來代替出現故障的路由器進行工做,從而保持網絡通訊的連續性和可靠性, VRRP中每一個節點之間都有優先級的通常爲0-255 (0,255有特殊用法)數字越大優先級越高。
一、簡化網絡管理。
#在具備多播或廣播能力的局域網(如以太網)中,藉助VRRP 能在某臺設備出現故障時仍然提供高可靠的缺省鏈路,有效避免單一鏈路發生故障後網絡中斷的問題,而無需修改動態路由協議、路由發現協議等配置信息,也無需修改主機的默認網關配置。
                                                                                                                                                                                                                                                                                                                                                                                                                                                   
二、適應性強。
#VRRP 報文封裝在IP 報文中,支持各類上層協議。
                                                                                                                                                                                                                                                                                                                                                                                                                                                 
三、網絡開銷小。
#VRRP 只定義了一種報文——VRRP 通告報文,而且只有處於
Master 狀態的路由器能夠發送VRRP 報文。


   (二)VRRP協議中的相關術語bash


     

1 虛擬路由器
#由一個 Master 路由器和多個Backup 路由器組成。主機將虛擬
路由器看成默認網關。 
2 VRID
#虛擬路由器的標識。有相同VRID 的一組路由器構成一個虛擬路由器。
3 Master 路由器
#虛擬路由器中承擔報文轉發任務的路由器。
4 Backup 路由器
#Master 路由器出現故障時,可以代替Master 路由器工做的路由器。
5 虛擬 IP 地址
#虛擬路由器的IP 地址。一個虛擬路由器能夠擁有一個或多個IP 地址。
6 IP 地址擁有者
#接口IP 地址與虛擬IP 地址相同的路由器被稱爲IP 地址擁有者。
7 虛擬 MAC 地址
#一個虛擬路由器擁有一個虛擬MAC 地址。虛擬MAC 地址的格式爲00-00-5E-00-01-{VRID}。一般狀況下,虛擬路由器迴應ARP 請求使用的是虛擬MAC 地址,只有虛擬路由器作特殊配置的時候,纔回應接口的真實MAC 地址。
8 優先級
# VRRP 根據優先級來肯定虛擬路由器中每臺路由器的地位。
9 非搶佔方式
#若是 Backup 路由器工做在非搶佔方式下,則只要Master 路由器沒有出現故障,Backup 路由器即便隨後被配置了更高的優先級也不會成爲Master 路由器。
10 搶佔方式
#若是Backup 路由器工做在搶佔方式下,當它收到VRRP 報文後,會將本身的優先級與通告報文中的優先級進行比較。若是本身的優先級比當前的Master 路由器的優先級高,就會主動搶佔成爲Master 路由器;不然,將保持Backup 狀態。



   (三)VRRP的工做過程服務器

       

1   Master 路由器的選舉;
2   Master 路由器狀態的通告;
3   同時,爲了提升安全性,VRRP 還提供了認證功能;


   (四) VRRP主備備份 網絡

     

主備備份方式表示業務僅由Master路由器承擔。當Master路由器出現故障時,纔會
由選舉出來的Backup路由器接替它工做,如圖


    wKiom1NnlL2R380XAAC2QN-r0ik275.jpg

     

#初始狀況下,Device A是Master路由器並承擔轉發任務,Device B和Device C是Backup路由器且都處於就緒監聽狀態。若是Device A發生故障,則虛擬路由器內處於Backup狀態的Device B和Device C路由器將根據優先級選出一個新的Master路由器,這個新Master路由器繼續爲網絡內的主機轉發數據。


   

     (五)VRRP負載分擔 ide


   

在路由器的一個接口上能夠建立多個虛擬路由器,使得該路由器能夠在一個虛擬路
由器中做爲Master路由器,同時在其餘的虛擬路由器中做爲Backup路由器。
負載分擔方式是指多臺路由器同時承擔業務,所以負載分擔方式須要兩個或者兩個
以上的虛擬路由器,每一個虛擬路由器都包括一個Master路由器和若干個Backup路
由器,各虛擬路由器的Master路由器能夠各不相同,


    wKiom1NnlSjT-hJhAAEJFzmcuis273.jpg



3、keepalived 原理詳解模塊化


 

     
#keepalived也是模塊化設計,不一樣模塊負責不一樣的功能,下面是keepalived的組件
   core  check   vrrp   libipfwc  libipvs-2.4  libipvs-2.6
           
core
#是keepalived的核心,負責主進程的啓動和維護,全局配置文件的加載解析
check
#負責healthchecker(健康檢查),包括各類健康檢查方式,以及對應的配置的解析包括LVS的配置解析
vrrp 
#VRRPD子進程,VRRPD子進程就是來實現VRRP協議的
libipfwc
#iptables(ipchains)庫,配置LVS會用到
libipvs* 
#配置LVS會用到

   

            keepalived模塊化結構oop

   wKiom1NnlgXwKm4jAAHI6Sgk68U327.jpg

       

keepalived 啓動後會啓動三個進程 以下所示:
                                                                                                                                                                                                                                                                                                                      
     PID
     111  Keepalived    <--Parent process monitoring children  父進程
     112  \_Keepalived  <--VRRP child   VRRP子進程
     113  \_Keepalived <--Healthchecking child healthchecker子進程
                                                                                                                                                                                                                                                                                                             

   

如上圖所示:
#兩個子進程都被系統WatchDog看管,兩個子進程各自複雜本身的事healthchecker子進程複雜檢查各自服務器的健康程度,例如HTTP,LVS等等,若是healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,而且去掉虛擬IP,轉換爲BACKUP狀態。

 

 

   

四 、keepalived 配置文件介紹ui


   

keepalived 安裝
#yum -y install  keepalived   
keepalived 只有一個配置文件,該配置文件中有多個配置區域 /etc/keepalived/keepalived.conf
#分別爲:global_defs (全局配置區域)、vrrp_script (腳本區域)、vrrp_instance(實例區域)、virtual_server(虛擬服務器區域)

 

   各個區域配置詳解

 

   

1 global_defs區域 :主要配置故障發生時的通知對象以及機器標識
 global_defs {
 notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
 }          

         

上述參數解析
# notifacation_email   故障發生時給誰發郵件通知
# notifacation_email_from 通知郵件從哪一個地址發出
# smpt_server             通知郵件的smtp地址
# smtp_cnnect_timeout     鏈接smtp服務器的超時時間
# router_id         標識本節點的字條串,一般爲hostname,但不必定非得是hostname。故障發生時,郵件通知會用到



   

2  vrrp_script 腳本區域
                                                                                                                                                             
  vrrp_script chk_haproxy {
    script "killall -0 haproxy"
    interval 1
    weight 2
  }

   

上述參數解析
#vrrp_script   定義vrrp_script 區域名稱
#script        所要執行的腳本
#interval      腳本執行的間隔時間
#weight        腳本執行結果致使的優先級變動

   

   

3 vrrp_instance 實例區域:用來定義對外提供服務的VIP區域及相關屬性
  vrrp_instance VI_1 {
    interface eth0
    state MASTER 
    priority 101
    virtual_router_id 51
    garp_master_delay 1
                                                                                                                                                
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_interface {
       eth0  
    }
    virtual_ipaddress {
        172.16.100.1/16 dev eth0 label eth0:0
    }
    track_script {
        chk_haproxy
                                                                                                                                                     
    }
    notify_master "/etc/keepalived/notify.sh master"
    notify_backup "/etc/keepalived/notify.sh backup"
    notify_fault "/etc/keepalived/notify.sh fault"
}


    :

上述參數解析
#vrrp_instance : 定義實例名稱
#state         :能夠是MASTER或BACKUP,不過當其餘節點keepalived啓動時,會依據prioroty進行比較來選舉MASTER
#interface     : 節點固有IP的網卡,用來發送VRRP包
#virtual_router_id  : 取值在0-255之間,用來區分多個instence之間的VRRP組播
#priority        : 用來選舉master
#advert_int      : master向外通告VRRP信息的間隔 ,默認爲1s
#garp_master_delay  :轉換爲master時,對延遲設定的定時器
#authentication     :設置認證信息
#auth_type PASS     :認證方式,能夠是PASS或AH兩種認證方式
#auth_pass          :設置認證密碼
#track_interface    :追蹤的端口
#virtual_ipaddress  :設置浮動ip---VIP
#track_script       :對vrrp_script腳本區域中定義的腳本進行追蹤
#chk_haproxy        :對這個區域進行追蹤
                                                                                                                                                    
#notify_master /path/to/to_master.sh :切換到MASTER狀態要發的通知
#notify_backup/path/to/to_backup.sh  :切換到BACKUP狀態要發的通知
#notify_fault "/path/fault.sh VG_1"  :故障時要執行的通知
                                                                                                                                                
注:以上三個參數指定的腳本須要本身定義



   

4 virtual_server 區域:定義與lvs相關的集羣服務和集羣服務中的realserver
  virtual_server 172.16.7.1 80 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    persistence_timeout 0   
    protocol TCP
    sorry_server 127.0.0.1 80
    real_server 172.16.7.200 80 {  
        weight 3
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 172.16.7.201 80 {  
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

 

   

上述參數解析
virtual_server 172.16.7.1 80
#對外經過ip地址172.16.7.1 提供80端口的服務
delay_loop
#延遲輪詢時間(s)
lb_algo 
#後端指定的調度算法
lb_kind  
#調度模式
nat_mask 
#網絡地址
persistence_timeout 
#會話保持時間(s),用戶在50s內被分配到同一個後端realserver
protocol  TCP
#健康檢查使用的TCP協議
sorry_server
#當全部機器都出現故障時使用的服務器
real_server <IPADDR> <PORT> 
#後端真實節點主機的權重等設置,(主要),後端有幾臺這裏就要設置幾個
weight
#每一臺realserver 的權重
TCP_CHECK
#健康狀態檢測方式
connect_port
#鏈接的端口
connect_timeout
#超時時長
nb_get_retry 
#重試次數
delay_before_retry
#下次重試的時間延遲
在realserver也能夠自定義服務器狀態發生變化後執行的腳本
      notify_up <STRING> | <QUOTED-STRING>
      檢查服務器正常(up)後,要執行的腳本
       notify_down <STRING> | <QUOTED-STRING>
      檢查服務器失敗(down)後,要執行的腳本





   PS:水平有限,關於更多的參數詳解及概念請參閱官網www.keepalived.org及 man keepalived.conf 得到。

相關文章
相關標籤/搜索