1. 程式人生 > >Keepalived原理與實戰精講--VRRP協議

Keepalived原理與實戰精講--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是一個0~255的正整數;同一組中的路由器通過使用優先權值來選舉MASTER,優先權大者為MASTER,優先權也是一個0~255的正整數。

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狀態;
如果優先順序相等的話,將比較路由器的實際IP,IP值較大的優先權高
不過如果對外的虛擬路由器IP就是路由器本身的IP的話,該路由器始終將是MASTER,這時的優先順序值為255。

2.3 協議狀態機

VRRP協議狀態比較簡單,就三種狀態,初始化,主機,備份機。
  1.                       +---------------+
  2.            +--------->|               |<-------------+
  3.            |          |  Initialize   |              |
  4.            |   +------|               |----------+   |
  5.            |   |      +---------------+          |   |
  6.            |   |                                 |   |
  7.            |   V                                 V   |
  8.    +---------------+                       +---------------+
  9.    |               |---------------------->|               |
  10.    |    Master     |                       |    Backup     |
  11.    |               |<----------------------|               |
  12.    +---------------+                       +---------------+
複製程式碼
初始化:
路由器啟動時,如果路由器的優先順序是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應用舉例

  1.             +-----------+      +-----------+
  2.             |   Rtr1    |      |   Rtr2    |
  3.             |(MR VRID=1)|      |(BR VRID=1)|
  4.             |(BR VRID=2)|      |(MR VRID=2)|
  5.     VRID=1  +-----------+      +-----------+  VRID=2
  6.     IP A ---------->*            *<---------- IP B
  7.                     |            |
  8.                     |            |
  9.   ------------------+------------+-----+--------+--------+--------+--
  10.                                        ^        ^        ^        ^
  11.                                        |        |        |        |
  12.                                      (IP A)   (IP A)   (IP B)   (IP B)
  13.                                        |        |        |        |
  14.                                     +--+--+  +--+--+  +--+--+  +--+--+
  15.                                     |  H1 |  |  H2 |  |  H3 |  |  H4 |
  16.                                     +-----+  +-----+  +--+--+  +--+--+
  17.      Legend:
  18.               ---+---+---+--  =  Ethernet, Token Ring, or FDDI
  19.                            H  =  Host computer
  20.                           MR  =  Master Router
  21.                           BR  =  Backup Router
  22.                            *  =  IP Address
  23.                         (IP)  =  default router for hosts
複製程式碼
這是通常VRRP使用拓撲,兩臺路由器執行VRRP互為備份,路由器1作為VRID組1的MASTER,IP地址A,VRID組2的BACKUP,路由器2作為VRID組2的MASTER,IP地址B,VRID組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協議號為112;IP包的TTL值必須為255。

3.3 VRRP協議資料格式
  1.     0                   1                   2                   3
  2.     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
  3.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4.    |Version| Type  | Virtual Rtr ID|   Priority    | Count IP Addrs|
  5.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  6.    |   Auth Type   |   Adver Int   |          Checksum             |
  7.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  8.    |                         IP Address (1)                        |
  9.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  10.    |                            .                                  |
  11.    |                            .                                  |
  12.    |                            .                                  |
  13.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  14.    |                         IP Address (n)                        |
  15.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  16.    |                     Authentication Data (1)                   |
  17.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  18.    |                     Authentication Data (2)                   |
  19.    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
複製程式碼


其中:
version:版本,4位,在RFC3768中定義為2;
Type:型別,4位,目前只定義一種類型別:
通告資料,取值為1;
Virtual Rtr ID:虛擬路由器ID,8位
Priority:優先順序,8位,具備冗餘IP地址的裝置的優先順序為255;
Count IP Addrs:VRRP包中的IP地址數量,8位;
Auth Type:認證型別,8位,RFC3768中認證功能已經取消,此欄位值定義0(不認證),為1,2只作為對老版本的相容;
Adver Int:通告包的傳送間隔時間,8位,單位是秒,預設是1秒;
Checksum:校驗和,16位,校驗資料範圍只是VRRP資料,即從VRRP的版本欄位開始的資料,不包括IP頭;
IP Address(es):和虛擬路由器相關的IP地址,數量由Count IP Addrs決定
Authentication Data:RFC3768中定義該欄位只是為了和老版本相容,必須置0。


3.4 接收資料時的必須檢查

收到VRRP資料包時要進行以下驗證,不滿足的資料包將被丟棄:
   -  TTL必須為255;
   -  VRRP版本號必須為2;
   -  一個包中資料欄位必須完整;
   -  校驗和必須正確;
   -  必須驗證在接收的網絡卡上配置了VRID值,而且本地路由器不是路由IP地址的擁有者
   -  必須驗證VVRP認證型別和配置的一致;



4. 結論

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

Keepalived原理與實戰精講

什麼是Keepalived呢,keepalived觀其名可知,保持存活,在網路裡面就是保持線上了,也就是所謂的高可用或熱備,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生,那說到keepalived時不得不說的一個協議就是VRRP協議,可以說這個協議就是keepalived實現的基礎,那麼首先我們來看看VRRP協議

注:搞運維的要有足夠的耐心哦,不理解協議就很難透徹的掌握keepalived的了

一,VRRP協議
VRRP協議
學過網路的朋友都知道,網路在設計的時候必須考慮到冗餘容災,包括線路冗餘,裝置冗餘等,防止網路存在單點故障,那在路由器或三層交換機處實現冗餘就顯得尤為重要,在網路裡面有個協議就是來做這事的,這個協議就是VRRP協議,Keepalived就是巧用VRRP協議來實現高可用性(HA)的

VRRP協議有一篇文章寫的非常好,大家可以直接看這裡(記得認真看看哦,後面基本都已這個為基礎的了)
帖子地址:http://bbs.ywlm.net/thread-790-1-1.html
只需要把伺服器當作路由器即可!

在《VRRP協議》裡講到了虛擬路由器的ID也就是VRID在這裡比較重要

keepalived完全遵守VRRP協議,包括競選機制等等

二,Keepalived原理
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和LVS完全是兩碼事,只不過他們各負其責相互配合而已

 

keepalived啟動後會有三個程序
父程序:記憶體管理,子程序管理等等
子程序:VRRP子程序
子程序:healthchecker子程序

有圖可知,兩個子程序都被系統WatchDog看管,兩個子程序各自複雜自己的事,healthchecker子程序複雜檢查各自伺服器的健康程度,例如HTTP,LVS等等,如果healthchecker子程序檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子程序,讓他刪除通告,並且去掉虛擬IP,轉換為BACKUP狀態

三,Keepalived配置檔案詳解

keepalived配置詳解
keepalived有三類配置區域(姑且就叫區域吧),注意不是三種配置檔案,是一個配置檔案裡面三種不同類別的配置區域

全域性配置(Global Configuration)
VRRPD配置
LVS配置


一,全域性配置
全域性配置又包括兩個子配置:
全域性定義(global definition)
靜態路由配置(static ipaddress/routes)

1,全域性定義(global definition)配置範例
  1. global_defs
  2. {
  3. notification_email
  4. {
  5. [email protected]
  6. }
  7. notification_email_from [email protected]
  8. smtp_server 127.0.0.1
  9. stmp_connect_timeout 30
  10. router_id node1
  11. }
複製程式碼 全域性配置解析
global_defs全域性配置標識,表面這個區域{}是全域性配置
  1. notification_email
  2. {
  3. [email protected]
  4. [email protected]
  5. }
複製程式碼 表示keepalived在發生諸如切換操作時需要傳送email通知,以及email傳送給哪些郵件地址,郵件地址可以多個,每行一個

notification_email_from [email protected]
表示傳送通知郵件時郵件源地址是誰

smtp_server 127.0.0.1
表示傳送email時使用的smtp伺服器地址,這裡可以用本地的sendmail來實現

smtp_connect_timeout 30
連線smtp連線超時時間

router_id node1
機器標識

2,靜態地址和路由配置範例
  1. static_ipaddress
  2. {
  3. 192.168.1.1/24 brd + dev eth0 scope global
  4. 192.168.1.2/24 brd + dev eth1 scope global
  5. }
  6. static_routes
  7. {
  8. src $SRC_IP to $DST_IP dev $SRC_DEVICE
  9. src $SRC_IP to $DST_IP via $GW dev $SRC_DEVICE
  10. }
複製程式碼

相關推薦

Keepalived原理實戰--VRRP協議

1. 前言 VRRP(Virtual Router Redundancy Protocol)協議是用於實現路由器冗餘的協議,最新協議在RFC3768中定義,原來的定義RFC2338被廢除,新協議相對還簡化了一些功能。 2. 協議說明 2.1 協議

Keepalived 原理實戰

# Keepalived 原理與實戰 > 隨著系統架構的逐漸演化,伺服器的數量和結構會越來越複雜,例如 Web 伺服器叢集的搭建,提高了系統的效能,同時也提高了系統維護的複雜度,我們需要對叢集中各臺伺服器進行監控,來保證為使用者提供服務的是正常執行的伺服器,整體系統的`可用性`就至關重要。 ## Keep

網絡安全管理視頻筆記8-IPSec工作原理

建立 其他 kmp 計算 序列號 缺點 iat 進行 發出 第四章 第一節?IPSec工作原理     網絡層安全性,優點:密鑰協商的開銷大大消減、需改動的應用程序很少,很容易構建×××。缺點:很難解決抗抵賴之類問題。 &e

《深入淺出MyBatis技術原理實戰》——7. 插件

看到了 5.1 com htm html 而不是 sig stat str 在第6章討論了四大運行對象的運行過程,在Configuration對象的創建方法裏我們看到了MyBatis用責任鏈去封裝它們。 7.1 插件接口 在MyBatis中使用插件,我們必須使用接口Inte

NET_.NET深入體驗實戰

alt net .cn .net ima src blog 實戰 com NET_.NET深入體驗與實戰精要

網絡實戰ospf多區域原理實戰

網絡實戰ospf多區域原理與實戰OSPF多區域原理與配置楔子 其實網路算得上是底層的原理了 根據tcp/ip 七層協議就可以看出 系統原理和網絡是不可分割的一部分。生成OSPF多區域的原因改善網絡的可擴展性快速收斂OSPF區域的容量劃分多區域後,每個OSPF區域裏到底可以容納多少臺路由器?單個區域所支持的路由

_.NET深入體驗實戰要.pdf第四章

blog windows開發 -1 這一 函數 center 定位 應用 以及 _.NET深入體驗與實戰精要 第四章 這一章節主要向我們介紹了如何認識Windows窗體編程, 向我們描述了Windows窗體編程的好處,能夠提供豐富 的用戶體驗,以及對本機系統環境

CP2044-深入Java Web項目實戰(2套實戰項目)

整體 各級 現實 *** 效率 復雜 網站 依賴關系 決策 隨筆背景:在很多時候,很多入門不久的朋友都會問我:我是從其他語言轉到程序開發的,有沒有一些基礎性的資料給我們學習學習呢,你的框架感覺一下太大了,希望有個循序漸進的教程或者視頻來學習就好了。對於學習有困難不知道如

Webpack + React全棧工程架構項目實戰

獨立 小白 l數據庫 java並發編程 前端工程師 inux 微服務架構 算法 經典 詳情請交流 QQ 709639943 01、Webpack + React全棧工程架構項目實戰精講 02、跨平臺混編框架 MUI 仿豆瓣電影 APP 03、Node.js入門到企

Java並發編程原理實戰

地址 騰訊 http baidu 密碼 iyu .com 實戰 java並發 Java並發編程原理與實戰網盤地址:https://pan.baidu.com/s/1c3mpC7A 密碼: pe62備用地址(騰訊微雲):https://share.weiyun.com/11e

Java並發編程原理實戰視頻教程

cnp mysql enter 架構師 分享圖片 span aid rocketmq 相對 14套java精品高級架構課,緩存架構,深入Jvm虛擬機,全文檢索Elasticsearch,Dubbo分布式Restful 服務,並發原理編程,SpringBoot,Spring

Squid緩存服務器原理實戰演練

Squid緩存服務器原理與實戰演練Squid服務基礎講解代理緩存機制:代理的基本類型:1、 傳統代理:需要在客戶端軟件手動設置指定代理服務器 2、 透明代理:無需用戶手動指定,通過路由、防火墻策略將訪問重定向Squid 反向代理:為網站服務下面進行實戰演練! 實驗環境:代理服務器squid 192.168

Java並發編程原理實戰八:產生線程安全性問題原因(javap字節碼分析)

cpu next() 讀者 setting pack obj http chm val 前面我們說到多線程帶來的風險,其中一個很重要的就是安全性,因為其重要性因此,放到本章來進行講解,那麽線程安全性問題產生的原因,我們這節將從底層字節碼來進行分析。 一、問題引出 先看一

Java並發編程原理實戰十三:JDK提供的原子類原理使用

執行 atomic .com new length 基本類 .get out sys 原子更新基本類型 原子更新數組 原子更新抽象類型 原子更新字段 原子更新基本類型: package com.roocon.thread.t8;import java.u

Java並發編程原理實戰十九:AQS 剖析

影響 clu cbo 大神 ping 方法 extc 共享鎖 一次 一、引言在JDK1.5之前,一般是靠synchronized關鍵字來實現線程對共享變量的互斥訪問。synchronized是在字節碼上加指令,依賴於底層操作系統的Mutex Lock實現。而從JDK1.5以

Java並發編程原理實戰二十:線程安全性問題簡單總結

依次 mar 時間 clu 版本號 exc 虛擬 locking ron 一、出現線程安全性問題的條件 •在多線程的環境下 •必須有共享資源 •對共享資源進行非原子性操作 二、解決線程安全性問題的途徑 •synchro

Java並發編程原理實戰二十一:線程通信wait&notify&join

ola run 原理 ons spa sta pro join() cto wait和notify wait和notify可以實現線程之間的通信,當一個線程執行不滿足條件時可以調用wait方法將線程置為等待狀態,當另一個線程執行到等待線程可以執行的條件時,調用notify

Java並發編程原理實戰二十五:ThreadLocal線程局部變量的使用和原理

解決 ava 應用 並發 資料 clas 線程安全 mage else 1.什麽是ThreadLocal ThreadLocal顧名思義是線程局部變量。這種變量和普通的變量不同,這種變量在每個線程中通過get和set方法訪問, 每個線程有自己獨立的變量副本。

Java並發編程原理實戰四十一:重排序 和 happens-before

而已 註意 ron 不知道 load chm title 並行 ola 一、概念理解 首先我們先來了解一下什麽是重排序:重排序是指編譯器和處理器為了優化程序性能而對指令序列進行重新排序的一種手段。 從Java源代碼到最終實際執行的指令序列,會分別經歷下面3種重排序,如下

Python機器學習全流程專案實戰(2018版)

Python機器學習全流程專案實戰精講(2018版)網盤地址:https://pan.baidu.com/s/16SSVq74YC07M0dW1iDekPg 提取碼: vu7r備用地址(騰訊微雲):https://share.weiyun.com/5VGzPK0 密碼:yp4ri9 課程特色:機器學習一線工