網站首頁 編程語言 正文
文章目錄
一、Vrrp協議
1、VRRP 協議簡介
vrrp: Virtual Redundent Routing Protocol 虛擬冗余路由協議
? 在現實的網絡環境中兩臺需要通信的主機大多數情況下并沒有直接的物理連接。對于這樣的情況它們之間路由怎樣選擇主機如何選定到達目的主機的下一跳路由,這個問題通常的解決方法有二種:
- 在主機上使用動態路由協議(RIP、OSPF等)
- 在主機上配置靜態路由
? 很明顯在主機上配置動態路由是非常不切實際的,因為管理、維護成本以及是否支持等諸多問題。配置靜態路由就變得十分流行。但路由器|默認網關|default gateway卻經常成為單點故障。
? VRRP協議的目的就是為了解決靜態路由單點故障問題;VRRP通過競選(election)協議來動態的將路由任務交給LAN中虛擬路由器中的某臺VRRP路由器。
2、相關術語
**虛擬路由器:**由一個 Master 路由器和多個 Backup 路由器組成。主機將虛擬路由器當作默認網關。
**VRID:**虛擬路由器的標識,有相同 VRID 的一組路由器構成一個虛擬路由器。通常用(0-255)標識
**Master路由器:**虛擬路由器中承擔報文轉發任務的路由器。
Backup路由器: Master路由器出現故障時能夠代替 Master路由器工作的路由器。
**虛擬 IP:**地址虛擬路由器的 IP 地址,一個虛擬路由器可以擁有一個或多個IP 地址。
**IP 地址擁有者:**接口IP地址與虛擬IP地址相同的路由器被稱為 IP 地址擁有者。
**虛擬 MAC 地址:**一個虛擬路由器擁有一個虛擬 MAC 地址。虛擬 MAC 地址的格式為 00-00-5E-00-01-{VRID}。通常情況下虛擬路由器回應 ARP 請求
使用的是虛擬 MAC 地址只有虛擬路由器做特殊配置的時候才回應接口的真實 MAC 地址。
**priority優先級:**VRRP 根據優先級來確定虛擬路由器中每臺路由器的地位。用0-255來表示,數字越小優先級越低。VRRP優先級的取值范圍為0到255(數值越大表明優先級越高),可配置的范圍是1到254,優先級0為系統保留給路由器放棄Master位置時候使用,255則是系統保留給IP地址擁有者使用。當路由器為IP地址擁有者時,其優先級始終為255。因此,當虛擬路由器內存在IP地址擁有者時,只要其工作正常,則為Master路由器。
**搶占方式:**默認,如果 Backup 路由器工作在搶占方式下,當它收到 VRRP 報文后會將自己的優先級與通告報文中的優先級進行比較。如果自己的優先級比當前的 Master 路由器的優先級高就會主動搶占成為 Master 路由器否則將保持 Backup 狀態。
**非搶占方式:**如果 Backup 路由器工作在非搶占方式下則只要 Master 路由器沒有出現故障Backup 路由器即使隨后被配置了更高的優先級也不會成為Master 路由器。
3、VRRP 工作機制
在一個VRRP虛擬路由器中有多臺物理的VRRP路由器,但是這多臺的物理的機器并不能同時工作,而是由一臺稱為MASTER的負責路由工作,其它的都是BACKUP。MASTER并非一成不變,VRRP讓每個VRRP路由器參與競選,最終獲勝的就是MASTER。MASTER擁有虛擬路由器的IP地址,我們的主機就是用這個IP地址。作為靜態路由的MASTER要負責轉發發送給網關地址的包和響應ARP請求。
VRRP通過競選協議來實現虛擬路由器的功能,所有的協議報文都是通過IP多播(multicast)包形式發送的。虛擬路由器由VRID(范圍0-255)和一組IP地址組成,對外表現為一個周知的MAC地址。所以在一個虛擬路由器中不管誰是MASTER,對外都是相同的MAC和IP(稱之為VIP)。客戶端主機并不需要因為MASTER的改變而修改自己的路由配置,對客戶端來說這種主從的切換是透明的。
在一個虛擬路由器中只有作為MASTER的VRRP路由器會一直發送VRRP通告信息(VRRPAdvertisement message),BACKUP不會搶占MASTER除非它的優先級(priority)更高。當MASTER不可用時(BACKUP收不到通告信息) ,多臺BACKUP中優先級最高的這臺會搶占為MASTER。這種搶占是非常快速的(<1s)以保證服務的連續性。由于安全性考慮,VRRP包使用了加密協議進行加密。
4、VRRP 工作流程
(1).初始化 (還沒選舉出master時)
路由器啟動時如果路由器的優先級是255(最高優先級路由器擁有路由器地址)要發送VRRP通告信息并發送廣播ARP信息通告路由器IP地址對應的MAC地址為路由虛擬MAC,設置通告信息定時器,準備定時發送VRRP通告信息,轉為MASTER狀態,否則進入BACKUP狀態設置定時器檢查定時檢查是否收到MASTER的通告信息。
(2).Master
- 設置定時通告定時器
- 用VRRP虛擬MAC地址響應路由器IP地址的ARP請求
- 轉發目的MAC是VRRP虛擬MAC的數據包
- 如果是虛擬路由器IP的擁有者將接受目的地址是虛擬路由器IP的數據包否則丟棄
- 當收到shutdown的事件時,刪除定時通告定時器發送優先權級為0的通告包轉初始化狀態
- 如果定時通告定時器超時時發送VRRP通告信息
- 收到VRRP通告信息時如果優先權為0發送VRRP通告信息否則判斷數據的優先級是否高于本機或相等而且實際IP地址大于本地實際IP設置定時通告定時器復位主機超時定時器轉BACKUP狀態否則的話丟棄該通告包
(3).Backup
- 設置主機超時定時器
- 不能響應針對虛擬路由器IP的ARP請求信息
- 丟棄所有目的MAC地址是虛擬路由器MAC地址的數據包
- 不接受目的是虛擬路由器IP的所有數據包
- 當收到shutdown的事件時刪除主機超時定時器轉初始化狀態
- 主機超時定時器超時的時候發送VRRP通告信息廣播ARP地址信息轉MASTER狀態
- 收到VRRP通告信息時如果優先權為0表示進入MASTER選舉,否則判斷數據的優先級是否高于本機如果高的話承認MASTER有效,復位主機超時定時器否則的話丟棄該通告包
(4)ARP查詢處理
? 當內部主機通過ARP查詢虛擬路由器IP地址對應的MAC地址時,MASTER路由器回復的MAC地址為虛擬的VRRP的MAC地址而不是實際網卡的,MAC地址這樣在路由器切換時讓內網機器覺察不到而在路由器重新啟動時不能主動發送本機網卡的實際MAC地址。如果虛擬路由器開啟的ARP代理 (proxy_arp)功能代理的ARP回應也回應VRRP虛擬MAC地址。
5、結論
? VRRP實現了對路由器IP地址的冗余功能防止了單點故障造成的網絡失效,VRRP本身是熱備形式的但可以通過互相主備實現路由器的負載均衡處理。
二、Keepalived
1、Keepalived 定義
什么是Keepalived呢?
? 觀其名可知保持存活在網絡里面就是保持在線了也就是所謂的高可用或熱備用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)
在Linux主機上以daemon守護進程方式實現了vrrp協議并提供了完成配置ipvs規則及實現相應real server狀態檢測能力。
能調用外部腳本,激活簡單的外部應用程序
輕量、靈活但不能解決腦裂問題,
適用場景:ipvs, haproxy, nginx(reverse proxy 反向代理)等反向代理或負載均衡器的高可用
2、keepalived的工作原理
? Keepalived是一個基于VRRP協議來實現的LVS服務高可用方案可以利用其來避免單點故障。
? 一個LVS服務會有2臺服務器運行Keepalived一臺為主服務器MASTER一臺為備份服務器BACKUP但是對外表現為一個虛擬IP;主服務器會發送特定的消息給備份服務器,當備份服務器收不到這個消息的時候即主服務器宕機的時候,備份服務器就會接管虛擬IP繼續提供服務從而保證了高可用性;Keepalived是VRRP的完美實現。
3、Keepalived組件
keepalived是模塊化設計,不同模塊負責不同的功能:
**core:**keepalived的核心;負責主進程的啟動和維護全局配置文件的加載解析等
**check:**負責healthchecker(健康檢查)包括了各種健康檢查方式以及對應的配置文件的解析
vrrp VRRPD:子進程用來實現VRRP協議
libipfwc iptables(ipchains)庫配置LVS
**libipvs*:**配置LVS
components:組件
3、keepalived進程
keepalived啟動后會有三個進程
父進程內存管理子進程管理等等
子進程VRRP子進程
子進程healthchecker子進程
兩個子進程都被系統WatchDog看管兩個子進程各自負責自己的事
healthchecker子進程負責檢查各自服務器的健康程度如果healthchecker子進程檢查到MASTER上服務不可用了就會通知本機上的兄弟VRRP子進程讓他刪除通告并且去掉虛擬IP轉換為BACKUP狀態。
原文鏈接:https://lion-wu.blog.csdn.net/article/details/126275922
- 上一篇:使用 sed 替換字符串中最后一次出現的字符
- 下一篇:git-lfs 離線安裝
相關推薦
- 2022-07-14 React?Native采用Hermes熱更新打包方案詳解_React
- 2022-08-02 Python面試之os.system()和os.popen()的區別詳析_python
- 2022-07-06 Python3?DataFrame缺失值的處理方法_python
- 2022-07-06 Python函數之iterrows(),iteritems(),itertuples()的區別說明_
- 2023-01-13 C#實現動態圖標閃爍顯示的示例代碼_C#教程
- 2022-08-23 Python+Selenium實現在Geoserver批量發布Mongo矢量數據_python
- 2022-02-09 C語言指針用法總結_C 語言
- 2022-05-05 python?scipy.spatial.distance?距離計算函數??_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支