天天看點

keepalived工作原理

    keepalived是一款c語言寫的實作在linux系統上實作負載均衡和高可用的軟體。它遵從于GNU是一款優秀的開源軟體。

     一:兩個關鍵詞的解釋

     1:負載均衡

      keepalived内置了對ipvs函數的調用支援。可以直接在keepalived中按照文法配置ipvs然後keepalived就可以實作對ipvs的配置。

     2:高可用

     keepalived是以VRRP(Virtual Router Redundancy Protocol)協定為實作基礎的即虛拟路由備援協定。虛拟路由備援協定可以認為是實作路由器高可用的協定即将N台提供相同功能的路由器組成一個路由器組這個組裡面有一個master和多個backupmaster上面有一個對外提供服務的vip該路由器所在區域網路内其他機器的預設路由為該vipmaster會發多點傳播當backup收不到vrrp包時就認為master宕掉了這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。

     二:keepalived的組成

    keepalived采用多程序的設計模式每個程序負責不同的功能我們在運作lvs的機器上看到的程序如下

[root@yd_83_135 ~]# ps -ef|grep keep

root     27613 25973  0 16:56 pts/0    00:00:00 grep keep

root     30731     1  0 Mar17 ?        00:00:00 keepalived -D

root     30732 30731  0 Mar17 ?        00:00:45 keepalived -D

root     30733 30731  0 Mar17 ?        00:02:32 keepalived -D

    core  keepalived的核心程式控制全局配置的解析程序啟動等工作。

    vrrp  Keepalived的vrrpd子程序以及相關代碼。

    check keepalived對後端的健康檢查及對lvs相關配置的解析

  如果keepalived 不運作在lvs的機器上隻開vrrp即可。也可隻運作healthchecker程式。具體使用指令

  keepalived --vrrp               -P    Only run with VRRP subsystem.

  keepalived --check              -C    Only run with Health-checker subsystem.

    三:vrrp協定簡介

1. 前言

VRRP(Virtual Router Redundancy Protocol)協定是用于實作路由器備援的協定最新協定在RFC3768中定義原來的定義RFC2338被廢除新協定相對還簡化了一些功能。

2. 協定說明

2.1 協定

VRRP協定是為消除在靜态預設路由環境下的預設路由器單點故障引起的網絡失效而設計的主備模式的協定使得在發生故障而進行裝置功能切換時可以不影響内外資料通信不需要再修改内部網絡的網絡參數。VRRP協定需要具有IP位址備份優先路由選擇減少不必要的路由器間通信等功能。

VRRP協定将兩台或多台路由器裝置虛拟成一個裝置對外提供虛拟路由器IP(一個或多個)而在路由器組内部如果實際擁有這個對外IP的路由器如果工作正常的話就是MASTER或者是通過算法選舉産生MASTER實作針對虛拟路由器IP的各種網絡功能如ARP請求ICMP以及資料的轉發等其他裝置不擁有該IP狀态是BACKUP除了接收MASTER的VRRP狀态通告資訊外不執行對外的網絡功能。當主機失效時BACKUP将接管原先MASTER的網絡功能。

配置VRRP協定時需要配置每個路由器的虛拟路由器ID(VRID)和優先權值使用VRID将路由器進行分組具有相同VRID值的路由器為同一個組VRID是一個0255的正整數同一組中的路由器通過使用優先權值來選舉MASTER優先權大者為MASTER優先權也是一個0255的正整數。

VRRP協定使用多點傳播資料來傳輸VRRP資料VRRP資料使用特殊的虛拟源MAC位址發送資料而不是自身網卡的MAC位址VRRP運作時隻有MASTER路由器定時發送VRRP通告資訊表示MASTER工作正常以及虛拟路由器IP(組)BACKUP隻接收VRRP資料不發送資料如果一定時間内沒有接收到MASTER的通告資訊各BACKUP将宣告自己成為MASTER發送通告資訊重新進行MASTER選舉狀态。

2.2 MASTER選舉

如果對外的虛拟路由器IP就是路由器本身配置的IP位址的話該路由器始終都是MASTER

否則如果不具備虛拟IP的話将進行MASTER選舉各路由器都宣告自己是MASTER發送VRRP通告資訊

如果收到其他機器的發來的通告資訊的優先級比自己高将轉回BACKUP狀态

如果優先級相等的話将比較路由器的實際IPIP值較大的優先權高

不過如果對外的虛拟路由器IP就是路由器本身的IP的話該路由器始終将是MASTER這時的優先級值為255。

2.3 協定狀态機

VRRP協定狀态比較簡單就三種狀态初始化主機備份機。

                      +---------------+

           +--------->|               |<-------------+

           |          |  Initialize   |              |

           |   +------|               |----------+   |

           |   |      +---------------+          |   |

           |   |                                 |   |

           |   V                                 V   |

   +---------------+                       +---------------+

   |               |---------------------->|               |

   |    Master     |                       |    Backup     |

   |               |<----------------------|               |

初始化:

路由器啟動時如果路由器的優先級是255(最高優先級路由器擁有路由器位址)要發送VRRP通告資訊并發送廣播ARP資訊通告路由器IP位址對應的MAC位址為路由虛拟MAC設定通告資訊定時器準備定時發送VRRP通告資訊轉為MASTER狀态

否則進入BACKUP狀态設定定時器檢查定時檢查是否收到MASTER的通告資訊。

主機:

主機狀态下的路由器要完成如下功能

設定定時通告定時器

用VRRP虛拟MAC位址響應路由器IP位址的ARP請求

轉發目的MAC是VRRP虛拟MAC的資料包

如果是虛拟路由器IP的擁有者将接受目的位址是虛拟路由器IP的資料包否則丢棄

當收到shutdown的事件時删除定時通告定時器發送優先權級為0的通告包轉初始化狀态

如果定時通告定時器逾時時發送VRRP通告資訊

收到VRRP通告資訊時如果優先權為0發送VRRP通告資訊否則判斷資料的優先級是否高于本機或相等而且實際IP位址大于本地實際IP設定定時通告定時器複位主機逾時定時器轉BACKUP狀态否則的話丢棄該通告包

備機:

備機狀态下的路由器要實作以下功能

設定主機逾時定時器

不能響應針對虛拟路由器IP的ARP請求資訊

丢棄所有目的MAC位址是虛拟路由器MAC位址的資料包

不接受目的是虛拟路由器IP的所有資料包

當收到shutdown的事件時删除主機逾時定時器轉初始化狀态

主機逾時定時器逾時的時候發送VRRP通告資訊廣播ARP位址資訊轉MASTER狀态

收到VRRP通告資訊時如果優先權為0表示進入MASTER選舉否則判斷資料的優先級是否高于本機如果高的話承認MASTER有效複位主機逾時定時器否則的話丢棄該通告包

2.4 ARP查詢處理

當内部主機通過ARP查詢虛拟路由器IP位址對應的MAC位址時MASTER路由器回複的MAC位址為虛拟的VRRP的MAC位址而不是實際網卡的MAC位址這樣在路由器切換時讓内網機器覺察不到而在路由器重新啟動時不能主動發送本機網卡的實際MAC位址。如果虛拟路由器開啟的ARP代理(proxy_arp)功能代理的ARP回應也回應VRRP虛拟MAC位址

2.5 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

這是通常VRRP使用拓撲兩台路由器運作VRRP互為備份路由器1作為VRID組1的MASTERIP位址AVRID組2的BACKUP路由器2作為VRID組2的MASTERIP位址BVRID組1的BACKUP内部網絡中一部分機器的預設網關位址是IP位址A一部分是IP位址B正常情況下以A為網關的資料将走路由器1以B為網關的資料将走路由器2如果一台路由器發生故障所有資料将走另一台路由器。

3. 協定定義

3.1 以太頭

源MAC位址必須為虛拟MAC位址00-00-5E-00-01-{VRID}VRID為虛拟路由器ID值16進制格式是以同一網段中最多有255個VRRP路由器目的MAC為多點傳播類型的MAC。

這裡可以看出VRID非常重要

3.2 IP頭參數

VRRP包的源位址是本機位址目的位址必須為224.0.0.18為一多點傳播位址IP協定号為112IP包的TTL值必須為255。

3.3 VRRP協定資料格式

    0                   1                   2                   3

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|

   |   Auth Type   |   Adver Int   |          Checksum             |

   |                         IP Address (1)                        |

   |                            .                                  |

   |                         IP Address (n)                        |

   |                     Authentication Data (1)                   |

   |                     Authentication Data (2)                   |

其中

version版本4位在RFC3768中定義為2

Type類型4位目前隻定義一種類類型通告資料取值為1

Virtual Rtr ID虛拟路由器ID8位

Priority優先級8位具備備援IP位址的裝置的優先級為255

Count IP AddrsVRRP包中的IP位址數量8位

Auth Type認證類型8位RFC3768中認證功能已經取消此字段值定義0(不認證)為12隻作為對老版本的相容

Adver Int通告包的發送間隔時間8位機關是秒預設是1秒

Checksum校驗和16位校驗資料範圍隻是VRRP資料即從VRRP的版本字段開始的資料不包括IP頭

IP Address(es)和虛拟路由器相關的IP位址數量由Count IP Addrs決定

Authentication DataRFC3768中定義該字段隻是為了和老版本相容必須置0。

3.4 接收資料時的必須檢查

收到VRRP資料包時要進行以下驗證不滿足的資料包将被丢棄

   -  TTL必須為255

   -  VRRP版本号必須為2

   -  一個包中資料字段必須完整

   -  校驗和必須正确

   -  必須驗證在接收的網卡上配置了VRID值而且本地路由器不是路由IP位址的擁有者

   -  必須驗證VVRP認證類型和配置的一緻

4. 結論

VRRP實作了對路由器IP位址的備援功能防止了單點故障造成的網絡失效VRRP本身是熱備形式的但可以通過互相熱備實作路由器的均衡處理新版的VRRP較老版簡化了認證處理實際不再進行資料的認證這是因為在實際應用中經常出現認證成為造成多個MASTER同時使用的異常情況。

本文轉自 leejia1989 51CTO部落格,原文連結:http://blog.51cto.com/leejia/1413770,如需轉載請自行聯系原作者

繼續閱讀