keepalive学习之软件设计
軟件架構(gòu)如下圖所示:
?
Keepalived 完全使用標(biāo)準(zhǔn)的ANSI/ISO C寫出. 該軟件主要圍繞一個(gè)中央I/O復(fù)用分發(fā)器而設(shè)計(jì),這個(gè)I/O復(fù)用分發(fā)器提供網(wǎng)絡(luò)實(shí)時(shí)功能. 主要設(shè)計(jì)目標(biāo)著重于從所有的模塊抽取一個(gè)公共模塊,所有模塊衍生于公共模塊, 這是核心庫(kù)產(chǎn)生的意義所在———降低代碼的重復(fù).?另一方面,設(shè)計(jì)目標(biāo)是使用安全和有保障的的代碼來保證生產(chǎn)的穩(wěn)定性和健壯性。
為了保證的穩(wěn)定性和健壯性, 后臺(tái)程序被分解為3個(gè)不同的進(jìn)程. 全局設(shè)計(jì)思想是一個(gè)簡(jiǎn)約的父進(jìn)程來負(fù)責(zé)監(jiān)控它創(chuàng)建的子進(jìn)程。父進(jìn)程創(chuàng)建了2個(gè)子進(jìn)程,一個(gè)負(fù)責(zé)VRRP框架,一個(gè)負(fù)責(zé)健康檢查。每個(gè)子進(jìn)程都有自己調(diào)度的I/O復(fù)用分發(fā)器,注意VRRP調(diào)用器Jitter的優(yōu)先級(jí)高,因?yàn)閂RRP調(diào)度比健康檢查更重要和敏感。 On the other hand this split design minimalize for healthchecking the usage of foreign librairies and minimalize its own action down to and idle mainloop in order to avoid malfunctions caused by itself. 父進(jìn)程監(jiān)控框架被稱為看門狗, 設(shè)計(jì)思路如下 : 每個(gè)子進(jìn)程打開一個(gè)unix監(jiān)聽套接字,當(dāng)后臺(tái)程序啟動(dòng)后,父進(jìn)程連接到字進(jìn)程的監(jiān)聽套接字,然后周期的(5s)發(fā)送hello報(bào)文包給子進(jìn)程。如果父進(jìn)程不能發(fā)送hello報(bào)文包到已經(jīng)建立連接的字進(jìn)程監(jiān)聽套接字,就直接重啟子進(jìn)程。這種看門狗設(shè)計(jì)方式主要有兩個(gè)好處: 第一,所有從父進(jìn)程發(fā)送到遠(yuǎn)程連接到子進(jìn)程的hello報(bào)文包都是通過I/O復(fù)用分發(fā)調(diào)度器來完成,這樣做的好處是它可以檢測(cè)到子進(jìn)程調(diào)度框架的死循環(huán)。第二個(gè)好處是由使用sysV信號(hào)檢測(cè)子進(jìn)程存活狀態(tài)帶來的。 keepalived運(yùn)行時(shí),可以查看到如下進(jìn)程 :
| ? | PID | ? | ? |
| ? | 111 | Keepalived | <-- Parent process monitoring children |
| ? | 112 | \_ Keepalived | <-- VRRP child |
| ? | 113 | \_ Keepalived | <-- Healthchecking child |
所有的原子模塊如下面介紹所示:
控制面板 :
Keepalived的配置通過keepalived.conf文件來完成. 一個(gè)編譯器用來解析這個(gè)文件.編譯器讀取關(guān)鍵字層次樹,關(guān)鍵字層次樹將配置文件中的關(guān)鍵字和響應(yīng)的處理方法映射到一起。 一個(gè)中央、多級(jí)、遞歸函數(shù)讀取配置文件,轉(zhuǎn)換為關(guān)鍵字樹。在解析過程中,讀取配置文件到內(nèi)存中。
內(nèi)存管理 :
這個(gè)框架提供了一些通用的存儲(chǔ)器存取管理功能如分配,再分配,釋放,…等等。可以工作在兩種模式:normal_mode和debug_mode。當(dāng)使用debug_mode提供強(qiáng)有力的辦法消除和跟蹤內(nèi)存泄漏。這種底層環(huán)境級(jí)別通過追蹤內(nèi)存的分派和釋放來提供低運(yùn)行緩存保護(hù)。這些使用的緩存的長(zhǎng)度是固定,原因是為了防止事件性的緩存泄露。
WatchDog :
這個(gè)框架提供了子進(jìn)程的監(jiān)控(VRRP和健康檢查)。每一個(gè)子進(jìn)程打開自己的看門狗unix域套接字連接,父進(jìn)程發(fā)送hello消息到子進(jìn)程unix域套接字,hello消息經(jīng)由父進(jìn)程的I/O復(fù)用分發(fā)器發(fā)送到子進(jìn)程的I/O復(fù)用分發(fā)器接受處理。如果子進(jìn)程仍然存活,但父進(jìn)程使用sysV系統(tǒng)監(jiān)測(cè)到管道破壞時(shí),就重啟子進(jìn)程。
VRRP 棧:
keepalived另一個(gè)最重要功能。VRRP(虛擬路由冗余協(xié)議:?RFC2338)是一種選擇協(xié)議,它可以把一個(gè)虛擬路由器的責(zé)任動(dòng)態(tài)分配到局域網(wǎng)上的?vrrp?路由器中的一臺(tái)。它為路由備份提供了底層設(shè)計(jì)。它不但完整實(shí)現(xiàn)了RFC2338得標(biāo)準(zhǔn),還為lvs及防火墻提供了一些準(zhǔn)備和擴(kuò)展設(shè)計(jì)。它實(shí)現(xiàn)了vrrp_sync_group擴(kuò)展來保證協(xié)議接管后的路由保持。它使用MD5-96位密碼設(shè)置實(shí)現(xiàn)了IPSEC-AH來保證廣告交換的安全性。VRRP更多消息請(qǐng)閱讀RFC.提醒:VRRP代碼可以單獨(dú)使用而不需要LVS支持,這個(gè)特性為獨(dú)立用戶設(shè)計(jì)。它運(yùn)行在一個(gè)父進(jìn)程監(jiān)控的獨(dú)立子進(jìn)程中。
Netlink 反射器:
類似于IPVS包裝器。keepalived有自己的網(wǎng)絡(luò)接口結(jié)構(gòu),核心netlink通道設(shè)置ip地址和接口標(biāo)志和監(jiān)控。netlink消息子系統(tǒng)用來設(shè)置VRRP的vip。netlink 核心消息廣播用來映射成事件相關(guān)接口的keepalived自定義用戶空間的數(shù)據(jù)結(jié)構(gòu)。因此通過netlink核心廣播(RTMGRP_LINK & RTMGRP_IPV4_IFADDR),可以將任意的用戶空間(別的程序)的netlink操作映射到keeaplived 數(shù)據(jù)結(jié)構(gòu)。
IPVS :
linux核心代碼,貢獻(xiàn)者 Wensong,LinuxVirtualServer.org?開源工程
NETLINK :
linux核心代碼,貢獻(xiàn)者Alexey Kuznetov,它擁有優(yōu)美、先進(jìn)的路由框架和子系統(tǒng)能力。
調(diào)度器 - I/O 復(fù)用器 :
所有的事件被調(diào)度到同一個(gè)進(jìn)程進(jìn)行處理。keepalive是單進(jìn)程的。它是一個(gè)網(wǎng)絡(luò)路由軟件,和I/O密切相關(guān)。這里的設(shè)計(jì)方式是中央select(...),它負(fù)責(zé)調(diào)度所有內(nèi)部task。沒有使用POSIX線程庫(kù)。因網(wǎng)絡(luò)原因,這個(gè)框架提供了自己的線程抽象優(yōu)化。
核心組件 :
這個(gè)框架定義了可以在所有代碼中用到的一些通用的及一些全局庫(kù),這些庫(kù)有:html解析,link-list,定時(shí)器,向量,字符串格式,buffer dump,網(wǎng)絡(luò)工具類,后臺(tái)程序管理,pid處理,底層4層tcp層。這里的全局庫(kù)通過工廠化方式盡量減少代碼的重復(fù)來提高系統(tǒng)的模塊性。
Checkers :
這是keepalived最重要的功能點(diǎn)之一。檢查器對(duì)真實(shí)服務(wù)器進(jìn)行健康檢測(cè)。只要真實(shí)服務(wù)器存活著,一個(gè)檢測(cè)器就一直進(jìn)行檢測(cè),當(dāng)從LVS拓?fù)浣Y(jié)構(gòu)中移除或者加入一個(gè)真實(shí)服務(wù)器時(shí)該檢測(cè)器停止工作。內(nèi)部檢測(cè)器設(shè)計(jì)成一個(gè)網(wǎng)絡(luò)實(shí)時(shí)軟件,它完全使用多線程FSM(有限狀態(tài)機(jī))設(shè)計(jì)。這個(gè)檢測(cè)器棧根據(jù)四層或者5/7層測(cè)試結(jié)果對(duì)LVS拓?fù)溥M(jìn)行操作。?它運(yùn)行在一個(gè)獨(dú)立的進(jìn)程中,該進(jìn)程被父進(jìn)程所監(jiān)控。
系統(tǒng)調(diào)用:
該框架提供啟動(dòng)額外的系統(tǒng)腳本的能力。主要是用在MISC?檢查器。在VRRP框架協(xié)議狀態(tài)轉(zhuǎn)換中,提供執(zhí)行額外的腳本的能力。系統(tǒng)調(diào)用通過生成一個(gè)子進(jìn)程完成的,不干擾全局調(diào)度計(jì)時(shí)器。
SMTP :
SMTP協(xié)議用來管理通知,使用多線程有限狀態(tài)機(jī)設(shè)計(jì),滿足IETF?RFC821?標(biāo)準(zhǔn). 管理通知用來發(fā)送健康檢測(cè)活動(dòng)和VRRP協(xié)議狀態(tài)轉(zhuǎn)換信息。SMTP非常通用,它也可以和其他通知子系統(tǒng)進(jìn)行交互,如GSM短消息接口,尋呼機(jī),…等等
IPVS 包裝器 :
該框架用來發(fā)送規(guī)則到IPVS核心代碼. 它作為keepalived內(nèi)部數(shù)據(jù)結(jié)構(gòu)和IPVS 規(guī)則_用戶結(jié)構(gòu)的轉(zhuǎn)換橋梁。使用IPVS?libipvs和IPVS代碼保持通用的集成。
?
官方文檔地址:http://www.keepalived.org/documentation.html
以上翻譯以官方為準(zhǔn),如翻譯不當(dāng),請(qǐng)輕拍。
?
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/p/3540285.html
總結(jié)
以上是生活随笔為你收集整理的keepalive学习之软件设计的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux服务器性能评估与优化--转
- 下一篇: VRRP协议介绍--转