Keepalived 工作原理及簡要安裝

gy318318 8年前發布 | 52K 次閱讀 集群/負載均衡

來自: http://my.oschina.net/luciamoore/blog/607034


===============================

            高性能集群軟件-Keepalived

===============================

  • keepalived 介紹

          >>>-------------------------------------------------------------

          keepalived 是 Linux下一個輕量級的高可用解決方案

          keepalived 主要通過虛擬路由冗余(VRRP)來實現高可用功能

          

          優點:部署及使用簡單,只需一個配置文件即可完成

          功能:1. 服務器狀態檢測和故障隔離功能

                    2. HA(High Available) cluster 

         <<<-------------------------------------------------------------


       

  • keepalived 發展

          >>>--------------------------------------------------------------------------------------------------

            keepalived起初是為LVS(Linux Virtual System)設計,專門監控集群系統中各個服務節點的狀態

            根據TCP/IP參考模型 第三、第四、第五層交換機制檢測每個服務節點的狀態(詳細見本頁keepalived工作原理


         e.g: keepalived檢測WEB服務器的狀態;

                如果一臺WEB服務器死機/工作出現古裝,keepalived檢測到此狀況后會將故障服務器從系統中剔除;

                直至該服務器工作正常后keepalived自動將該服務器加入到服務器群中;

                以上工作keepalived自動完成,無需人工干涉,人工干預僅是修復出現故障的服務節點;

        <<<----------------------------------------------------------------------------------------------------------


           >>>---------------------------------------------------------------------------------------------------  

            keepalived 后續加入了VRRP功能

            VRRP(Virtaul Router Redunadancy Protocol,虛擬路由器冗余協議)

            目的:解決靜態路由出現的單點故障問題,實現網絡不間斷穩定運行

           <<<------------------------------------------------------------------------------------------------------      



  • VRRP 協議與工作原理 

  ?   引入VRRP概念

  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

                

                         *說明*:圖片來源百度百科;左側圖片為局域網組網;右側圖片為VRRP組網

             >>>------------------------------------------------------------------------------------------------------------

               局域網組網 e.g:


                網絡內的所有主機會設置一條默認網關(10.100.10.1),當主機發出的目的地址不在本網段(10.100.10.0/24)的報文;

                通過默認網關發往路由器A,從而實現主機與外部網絡的通信

              

               該組網缺點:當路由器A壞掉時,本網段內通過以RA為默認網關下一跳的主機將斷掉與外界的通信,產生單點故障

           

            ----------------------------------------------------------------------------------------------------------------------------

              VRRP組網 e.g:

              

                 RA:Master 活動路由器  10.100.10.2   

                 RB:Backup 備份路由器  10.100.10.3

              VRIP : 虛擬路由器IP            10.100.10.1

     

              VRRP將局域網中的一組路由器【 RA和RB】組成一個虛擬路由器------>>>備份組

               虛擬路由器擁有自己的IP地址 10.100.10.1

               局域網內的主機僅知道虛擬路由器IP地址為10.100.10.1,不知道具體的Master與Backup路由器IP

               局域網內的主機將默認網關下一跳的地址設置為該虛擬路由器IP地址,通過該地址與其他網絡進行通信

  

                該組網優點:當備份組內的Master路由器DOWN掉,會進行選舉策略選出一個新的Master路由器,繼續往網絡內的主機提供路由服務

                                    從而實現網絡內的主機不間斷地與外部網絡進行通信

               <<<----------------------------------------------------------------------------------------------------------------------------------



  ?    VRRP 協議 ??

?               >>>------------------------------------------------------------------------------------------------------------------------------

                          VRRP:解決局域網中配置靜態網關出現單點失效的路由協議

                     設計目標:網絡發生故障時透明地進行設備切換而不影響主機間的數據通信

                <<<----------------------------------------------------------------------------------------------------------------------------------

            


  ?    VRRP 工作原理

               >>>------------------------------------------------------------------------------------------------------------------------

                       VRRP協議將兩臺或多臺路由器設備虛擬成一個虛擬路由器,對外提供虛擬路由器IP(一個或多個);

                       而在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER, 或者是通過算法選舉產生;

                       MASTER實現針對虛擬路由器IP的各種網絡功能,如ARP請求,ICMP,以及數據的轉發等;

                       其他設備不擁有該IP,狀態是BACKUP,除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能。

                       當主機失效時,BACKUP將接管原先MASTER的網絡功能。

                  

                      ?  如何判定多個路由器在同一組虛擬路由器中?

                            VRID:每個虛擬路由器都有一個唯一標識(VRID是一個0~255的正整數

                            配置VRRP協議時需要配置每個路由器的虛擬路由器ID(VRID)和優先權值,

                            使用VRID將路由器進行分組,具有相同VRID值的路由器為同一個組


                      ?  BACKUP 為什么沒有發生搶占?

                           VRRP通告:它使用IP多播數據包進行封裝,組地址為224.0.0.18,發布范圍只限于同一局域網內

                           在一個虛擬路由器中,只有處于MASTER角色的路由器會一直發送VRRP通告信息;

                           處于BACKUP狀態的路由器只接收MASTER發過來的報文信息,用來監控MASTER運行狀態, 除非它的優先級比MASTER更高

                  

                      ?  什么時候發生選舉?

                            當MASTER不可用時,BACKUP無法收到MASTER發過來的報文信息;

                            認定MASTER出現故障,然后多臺BACKUP就開始進行選舉;

                    

                       ?  Master選舉

                           虛擬路由器IP=路由器本身配置IP

                           該路由器始終將是MASTER;IP地址所有者自動具有最高優先級:255

                        

                           優先級選舉主控路由器(優先級范圍是0—255

                           優先級0一般用在IP地址所有者主動放棄主控者角色時使用。可配置的優先級范圍為1—254

                           優先級相等,則比較路由器的實際IP,IP值較大的優先權高

                  <<<-----------------------------------------------------------------------------------------------------


  ?    VRRP 應用實例  

 >>>------------------------------------------------------------------------------------------------------------------------ ??     

            +-----------+      +-----------+
            |   Rtr1    |      |   Rtr2    |
            |(MR VRID=1)|      |(BR VRID=1)|
            |(BR VRID=2)|      |(MR VRID=2)|
    VRID=1  +-----------+      +-----------+  VRID=2
    IP A ---------->*            *<---------- IP B
                    |            |
                    |            |
  ------------------+------------+-----+--------+--------+--------+--
                                       ^        ^        ^        ^
                                       |        |        |        |
                                     (IP A)   (IP A)   (IP B)   (IP B)
                                       |        |        |        |
                                    +--+--+  +--+--+  +--+--+  +--+--+
                                    |  H1 |  |  H2 |  |  H3 |  |  H4 |
                                    +-----+  +-----+  +--+--+  +--+--+
     Legend:
              ---+---+---+--  =  Ethernet, Token Ring, or FDDI
                           H  =  Host computer
                          MR  =  Master Router
                          BR  =  Backup Router
                           *  =  IP Address
                        (IP)  =  default router for hosts

 -------------------------------------------------------------------------------------------------------------

    +   VRID 1       |   Rtr1(Master)     |    Rtr2(Backup) +  正常情況下  H1與H2走R1;反之 走R2

    -------------------------------------------------------------------------------------------------------------

     +   VRID 2       |   Rtr1(Backup)    |    Rtr2 (Master) +  正常情況下  H3與H4走R2;反之 走R1

    ------------------------------------------------------------------------------------------------------------


 <<<------------------------------------------------------------------------------------------------------------------------  

  • Keepalived 工作原理

 >>>------------------------------------------------------------------------------------------------------------------------   

          根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制如下:

          網絡層  

                 協議:     IP(Internet Protocol網際協議)  

                             ARP(Address Resolution Protoco 地址轉換協議) 

                           RARP(Reverse Address Resolution Protocol  反向地址轉換協議 

                           ICMP(Internet Control Message Protocol 網絡控制報文協議)  

                 常用:通過ICMP協議向服務器集群中的每個節點發送一個ICMP的數據包(類似ping實現)

                           如果某個節點沒有返回響應數據包,那么認為此節點發生了故障

                           keepalived將報告該節點失效,并從服務器集群中剔除故障節點

         傳輸層

                 協議:  TCP (傳輸控制協議)(三次握手、安全可靠)

                            UDP (用戶數據協議)

                 ------------------------------------------------------------------------------------

                 TCP提供可靠的數據傳輸服務、IP地址和端口,代表TCP的一個連接端

                 獲取TCP服務,需要在發送機的一個端口上和接收機上一個端口上建立連接

                -------------------------------------------------------------------------------------

                 常用:利用TCP協議的端口連接和掃描技術來判斷集群節點是否正常

                    e.g: SSH服務默認22端口,WEB服務器80端口····Keepalived在傳輸層探測某端口沒有響應數據

                           判定端口異常,強制將此端口對應的節點從服務器及群組中移除

         應用層

                協議:FTP、TELNET、SMTP、DNS ····

                -----------------------------------------------------------------------

                用戶可以通過自定義Keepalived的工作方式

                -----------------------------------------------------------------------

                e.g:用戶編輯程序運行Keepalived,而Keepalived 根據用戶設定檢測各種程序或服務是否允許正常

          

  ?   keepalived 結構體系


                 圖片來源:http://www.keepalived.org/documentation.html

 <<<------------------------------------------------------------------------------------------------------------------------ 




 

  • keepalived  安裝

>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


?實驗需求:?

  • 安裝keepalived(僅安裝)

?實驗實現:?

  • 服務器:CentOS 6.5-minimal 

  • ?軟    件:Keepalived ( V_1.2.19 )  ?  

?安裝過程:?


>>>下載安裝包并解壓,查看相關參數

[root@lucia tmp]# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz    # 下載Keepalived安裝包
[root@lucia tmp]# tar -zxf keepalived-1.2.19.tar.gz   #解壓安裝包
[root@lucia tmp]# cd keepalived-1.2.19
[root@lucia keepalived-1.2.19]# ./configure --help    #查看confiure編譯參數
 
#================================================
# 指定安裝在/etc/ {--sysconfdir=/etc}
# 指定使用內核源碼中的頭文件 {--with-kernel-dir}
# 注:使用LVS時,需要用到"--with-kernel-dir"
#===============================================


>>>編譯安裝

[root@lucia keepalived-1.2.19]# [ -z /usr/src/kernels/ ] && yum -y install kernel-headers kernel-devel || echo "The kernel file already exists"
The kernel file already exists
 
#===========================
# 判斷kernels目錄是否存在文件
#===========================
 
[root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64
 
#============================================================================
# ./configure 對即將安裝的軟件進行配置,檢查當前的環境是否滿足要安裝軟件的依賴關系
#============================================================================

configure: error: in `/tmp/keepalived-1.2.19':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
 
#============================================================================
# 報錯:gcc編譯器沒有安裝
# [root@lucia keepalived-1.2.19]# yum -y install gcc
#=============================================================================
      
繼續返回上一步預安裝./configure
[root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64
 
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files.            !!!
 
#=========================================================================
# 報錯:OpenSSL 沒有安裝
# [root@lucia keepalived-1.2.19]# yum -y install openssl*
#=========================================================================

./configure 成功后,顯示是Keepalived 輸出的加載模塊信息

Keepalived configuration
------------------------
Keepalived version       : 1.2.19                         
Compiler                 : gcc
Compiler flags           : -g -O2
Extra Lib                : -lssl -lcrypto -lcrypt 
Use IPVS Framework       : Yes
IPVS sync daemon support : Yes
IPVS use libnl           : No
fwmark socket support    : Yes
Use VRRP Framework       : Yes
Use VRRP VMAC            : Yes
SNMP support             : No
SHA1 support             : No
Use Debug flags          : No

[root@lucia keepalived-1.2.19]# make && make install                     #編譯&&安裝
[root@lucia keepalived-1.2.19]# ln -s /usr/local/sbin/keepalived /sbin/  #軟鏈接到系統使用的管理程序目錄中
[root@lucia keepalived-1.2.19]# chkconfig --add keepalived               #添加到系統服務
[root@lucia keepalived-1.2.19]# chkconfig --level 35 keepalived on       #添加到開機啟動

  

  ?   Keepalived 配置詳解

[root@lucia keepalived-1.2.19]# cd /etc/keepalived/
[root@lucia keepalived-1.2.19]# ls
keepalived.conf  samples

# ================================================================
# Keepalived 配置文件路徑為/etc/keepalived/keepalived.conf
# samples 目錄下存放著keepalived配置的示例
# ================================================================
#============================================================
# keepalived.conf 配置
#------------------------------------------------------------
# 1、Keepalived 配置文件以block形式組織,每個塊內容都包含在{}
# 2、“#”   “!” 開頭行為注釋
# 3、keepalived 配置為三類:
#      全局配置:對整個keepalived都生效的配置 
#    VRRPD 配置:核心配置,主要實現keepalived高可用功能
#      LVS配置
#============================================================


! Configuration File for keepalived   

    
########################
#  全局配置
########################

 
global_defs {                               # global_defs 全局配置標識 
                                            ------------------------------------------
   notification_email {                     # notification_email用于設置報警郵件地址
     acassen@firewall.loc                   # 可以設置多個,每行一個
     failover@firewall.loc                  # 設置郵件報警,需開啟本機Sendmail 服務
     sysadmin@firewall.loc                  # yum -y install mailx sendmail
   }                                        ----------------------------------------------

   notification_email_from Alexandre.Cassen@firewall.loc  # 設置郵件發送地址
   smtp_server 192.168.200.1                              # 設置郵件的smtp server地址
   smtp_connect_timeout 30                                # 設置連接smtp sever超時時間
   router_id LVS_DEVEL                                    # 表示運行keepalived服務器標識,發郵件時顯示在郵件主題中的信息
}

######################
#  VRRPD配置
######################

vrrp_instance VI_1 {         # VRRPD 配置標識 VI_1是實例名稱

    state MASTER             # 指定Keepalvied角色 MASTER表示此主機為主服務器 BACKUP則是表示為備用服務器
    interface eth0           # 指定 HA 監測網絡的接口
    virtual_router_id 51     # 虛擬路由標識,標識為數字,同一個VRRP實例使用唯一的標識,即可表示在同一個vrrp_instance下 MASTER_ID = BACKUP_ID
    priority 100             # 定義節點優先級,數字越大表示節點的優先級越高,同一個VRRP_instance下,MASTE_PRIORITY > BACKUP_PRIORITY 
    advert_int 1             # 設定MASTER與BACKUP主機質檢同步檢查的時間間隔,單位為秒
             
    authentication {         # 設定節點間通信驗證類型和密碼,驗證類型主要有PASS和AH兩種
        auth_type PASS       # 同一個vrrp_instance,MASTER驗證密碼和BACKUP保持一致
        auth_pass 1111
    }

    virtual_ipaddress {      # 設置虛擬IP地址 (VIP),又叫做漂移IP地址
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }

#-------------------------------------------------------------------------------
# 問:為什么叫漂移IP地址?
# 答:當Keepalived切換到MASTER狀態時,IP地址會自動添加到系統中
#    當Keepalvied切換到BACKUP狀態時,IP地址將自動從系統中刪除
#    
#    keepalived通過“ip address add”命令的形式將VIP添加到系統
#    通過“ip add”查看系統中添加的VIP地址
#--------------------------------------------------------------------------------

}

######################
# LVS配置
######################


virtual_server 192.168.200.100 443 {              # virtual_server LVS配置標識 
                                                  # 格式:virtual_server VIP port [IP 和 port 之間空格隔開]
 
    delay_loop 6                                  # 設置健康檢查時間間隔,單位為秒                      
    lb_algo rr                                    # 設置負載調度算法,可用的調度算法有:rr、wlc、lc、lblc、sh、dh等
    lb_kind NAT                                   # 設置LVS實現負載均衡的機制,有NAT、TUN和DR三種模式可選
    nat_mask 255.255.255.0                        # NAT子網掩碼
    persistence_timeout 50                        # 會話保持時間 
    protocol TCP                                  # 指定轉發協議類型
#----------------------------------------------------------------------------------------------------
# persistence_timeout 會話保持時間對動態網頁非常有用,為集群系統中的seesion共享提供了一個很好的解決方案
# 用戶的請求會一直分發到某個服務節點,直至超過這個會話的保持時間(指最大無響應超時時間)
# =[用戶操作動態頁面如果在50s沒有執行任何操作則被分發到另外的節點]
#----------------------------------------------------------------------------------------------------

    real_server 192.168.201.100 443 {                          # 設置real server段開始的標識 [ IP為真實IP地址]
                                                               # 格式:real_server realIP port [IP 和 port 之間空格隔開]
                                                               -----------------------------------------------------------------
        weight 1                                               # 用于配置real server節點的權值,權值大小用數字表示,數字越大,權值越高
                                                               # 設置權值大小可以為不同性能的服務器分配不同的負載
                                                               ------------------------------------------------------------------

        SSL_GET {                                              # 健康檢查 SSL_GET    
            url {                                              # 指定SSL檢查的URL信息,可以指定多個
              path /index.html                                 # 后跟詳細的URL路徑
              digest ff20ad2481f97b1754ef3e12ecd3a9cc          # SSL檢查后的摘要信息,可以通過genhash命令工具獲取
#-----------------------------------------------------------------
# [root@lucia keepalived]# genhash -s 192.168.201.100 -p 80 -u /index.html
#-----------------------------------------------------------------
            }
            url {
              path /mrtg/
              digest 9b3a0c85a887a256d6939da88aabd8cd
            }
            connect_timeout 3                                  # 表示無響應超時時間,單位為秒
            nb_get_retry 3                                     # 表示重試次數
            delay_before_retry 3                               # 表示充實間隔
        } 
    }
}
 
virtual_server 10.10.10.2 1358 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP
 
    sorry_server 192.168.200.200 1358                          # 備份節點,在所有real serer失效后,啟用備份節點
}

 

#---------------------------------------------------------------------------------------------------------------#

 VRRP原理參考文檔如下:

      http://bbs.nanjimao.com/thread-790-1-1.html (此篇寫的很好)

      http://blog.chinaunix.net/uid-26575352-id-3529109.html

      keepalived.conf 參考書籍 《高性能Linux服務器構建實戰》

本人高度近視,文檔手打會出現個別字符錯誤,請指出

關于VRRP原理 部分為自己理解所拼湊,邏輯出現問題請指出

Lucia   2016/01

#----------------------------------------------------------------------------------------------------------------#

     

 

 本文由用戶 gy318318 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!