软件架构如下图所示:

Keepalived 完全使用标准的ANSI/ISO C写出. 该软件主要围绕一个中央I/O复用分发器而设计,这个I/O复用分发器提供网络实时功能. 主要设计目标着重于从所有的模块抽取一个公共模块,所有模块衍生于公共模块, 这是核心库产生的意义所在———降低代码的重复. 另一方面,设计目标是使用安全和有保障的的代码来保证生产的稳定性和健壮性。

为了保证的稳定性和健壮性, 后台程序被分解为3个不同的进程. 全局设计思想是一个简约的父进程来负责监控它创建的子进程。父进程创建了2个子进程,一个负责VRRP框架,一个负责健康检查。每个子进程都有自己调度的I/O复用分发器,注意VRRP调用器Jitter的优先级高,因为VRRP调度比健康检查更重要和敏感。 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. 父进程监控框架被称为看门狗, 设计思路如下 : 每个子进程打开一个unix监听套接字,当后台程序启动后,父进程连接到字进程的监听套接字,然后周期的(5s)发送hello报文包给子进程。如果父进程不能发送hello报文包到已经建立连接的字进程监听套接字,就直接重启子进程。这种看门狗设计方式主要有两个好处: 第一,所有从父进程发送到远程连接到子进程的hello报文包都是通过I/O复用分发调度器来完成,这样做的好处是它可以检测到子进程调度框架的死循环。第二个好处是由使用sysV信号检测子进程存活状态带来的。 keepalived运行时,可以查看到如下进程 :

  PID    
  111 Keepalived <-- Parent process monitoring children
  112 \_ Keepalived <-- VRRP child
  113 \_ Keepalived <-- Healthchecking child

所有的原子模块如下面介绍所示:

控制面板 :
Keepalived的配置通过keepalived.conf文件来完成. 一个编译器用来解析这个文件.编译器读取关键字层次树,关键字层次树将配置文件中的关键字和响应的处理方法映射到一起。 一个中央、多级、递归函数读取配置文件,转换为关键字树。在解析过程中,读取配置文件到内存中。

内存管理 :

这个框架提供了一些通用的存储器存取管理功能如分配,再分配,释放,…等等。可以工作在两种模式:normal_mode和debug_mode。当使用debug_mode提供强有力的办法消除和跟踪内存泄漏。这种底层环境级别通过追踪内存的分派和释放来提供低运行缓存保护。这些使用的缓存的长度是固定,原因是为了防止事件性的缓存泄露。

WatchDog :

这个框架提供了子进程的监控(VRRP和健康检查)。每一个子进程打开自己的看门狗unix域套接字连接,父进程发送hello消息到子进程unix域套接字,hello消息经由父进程的I/O复用分发器发送到子进程的I/O复用分发器接受处理。如果子进程仍然存活,但父进程使用sysV系统监测到管道破坏时,就重启子进程。

VRRP 栈:

keepalived另一个最重要功能。VRRP(虚拟路由冗余协议: RFC2338)是一种选择协议,它可以把一个虚拟路由器的责任动态分配到局域网上的 vrrp 路由器中的一台。它为路由备份提供了底层设计。它不但完整实现了RFC2338得标准,还为lvs及防火墙提供了一些准备和扩展设计。它实现了vrrp_sync_group扩展来保证协议接管后的路由保持。它使用MD5-96位密码设置实现了IPSEC-AH来保证广告交换的安全性。VRRP更多消息请阅读RFC.提醒:VRRP代码可以单独使用而不需要LVS支持,这个特性为独立用户设计。它运行在一个父进程监控的独立子进程中。

Netlink 反射器:

类似于IPVS包装器。keepalived有自己的网络接口结构,核心netlink通道设置ip地址和接口标志和监控。netlink消息子系统用来设置VRRP的vip。netlink 核心消息广播用来映射成事件相关接口的keepalived自定义用户空间的数据结构。因此通过netlink核心广播(RTMGRP_LINK & RTMGRP_IPV4_IFADDR),可以将任意的用户空间(别的程序)的netlink操作映射到keeaplived 数据结构。

IPVS :
linux核心代码,贡献者 Wensong,LinuxVirtualServer.org 开源工程

NETLINK :

linux核心代码,贡献者Alexey Kuznetov,它拥有优美、先进的路由框架和子系统能力。

调度器 - I/O 复用器 :

所有的事件被调度到同一个进程进行处理。keepalive是单进程的。它是一个网络路由软件,和I/O密切相关。这里的设计方式是中央select(...),它负责调度所有内部task。没有使用POSIX线程库。因网络原因,这个框架提供了自己的线程抽象优化。

核心组件 :

这个框架定义了可以在所有代码中用到的一些通用的及一些全局库,这些库有:html解析,link-list,定时器,向量,字符串格式,buffer dump,网络工具类,后台程序管理,pid处理,底层4层tcp层。这里的全局库通过工厂化方式尽量减少代码的重复来提高系统的模块性。

Checkers :

这是keepalived最重要的功能点之一。检查器对真实服务器进行健康检测。只要真实服务器存活着,一个检测器就一直进行检测,当从LVS拓扑结构中移除或者加入一个真实服务器时该检测器停止工作。内部检测器设计成一个网络实时软件,它完全使用多线程FSM(有限状态机)设计。这个检测器栈根据四层或者5/7层测试结果对LVS拓扑进行操作。 它运行在一个独立的进程中,该进程被父进程所监控。

系统调用:

该框架提供启动额外的系统脚本的能力。主要是用在MISC 检查器。在VRRP框架协议状态转换中,提供执行额外的脚本的能力。系统调用通过生成一个子进程完成的,不干扰全局调度计时器。

SMTP :
SMTP协议用来管理通知,使用多线程有限状态机设计,满足IETF RFC821 标准. 管理通知用来发送健康检测活动和VRRP协议状态转换信息。SMTP非常通用,它也可以和其他通知子系统进行交互,如GSM短消息接口,寻呼机,…等等

IPVS 包装器 :
该框架用来发送规则到IPVS核心代码. 它作为keepalived内部数据结构和IPVS 规则_用户结构的转换桥梁。使用IPVS libipvs和IPVS代码保持通用的集成。

官方文档地址:http://www.keepalived.org/documentation.html

以上翻译以官方为准,如翻译不当,请轻拍。

转载于:https://www.cnblogs.com/davidwang456/p/3540285.html

keepalive学习之软件设计相关推荐

  1. 由学习《软件设计重构》所想到的代码review(二)

    前言 对于一个程序员来讲如何来最直接的来衡量他的技术能力和产出呢?我想最直观的作法是看他的代码编写能力,就拿我经常接触的一些程序员来看,他们买了很多技术重构类书籍,但是看完后代码编写能力并没有显著提高 ...

  2. 基于AD7705的32路信号采集软件设计

    CSDN话题挑战赛第2期 参赛话题:学习笔记 软件设计 软件设计包括3个子模块:SPI初始化模块.AD7705驱动模块.定时器模块.工作过程:首先通过ATmega16的SPI接口驱动AD7705,完成 ...

  3. 【软件设计】5本软件设计书籍的读书笔记

    文章目录 前言 1.<简约之美:软件设计之道> 1.1 软件设计的准则 1.2 小结 2.<软件设计精要与模式> 2.1 软件架构 2.2 软件设计 2.3 软件设计模式 2. ...

  4. java游戏界面制作_软件设计之基于Java的连连看小游戏(二)——游戏基础界面的制作及事件的添加...

    上次完成到游戏首页的制作,今天完成了游戏基础界面的制作以及事件的简单添加.由于功能尚未完全实现,因此游戏界面的菜单列表只是简单地添加了一下,其余菜单列表以及倒计时等在后续的制作中逐一完善. 1.首先在 ...

  5. 面向对象软件设计——设计模式学习

    工作也从开始C语言,转向现在的C++,表面上看得出,但实际中却没有把这种转变深入到思想中,究其原因还是对面向对象的软件设计不了解,有必要好好学习一下设计模式这个东东.本文就是设计模式学习第一篇-- 1 ...

  6. vant ui wepy_UI设计需要学习什么软件呢?

    展开全部 如今2113,UI设计师的出现,是互5261联网时代的设计变革带来的4102.越来越多的设计人加入了这个1653新兴的职业,有的人看重UI设计的高薪资,有的人看到无限美好的职业前景.总之,就 ...

  7. 【学习笔记】慕课网—Java设计模式精讲 第3章 软件设计七大原则-3-6 迪米特原则(最少知道原则)...

    /** * 软件设计七大原则-迪米特原则 学习笔记 * @author cnRicky * @date 2018.11.10 */ 迪米特原则(最少知道原则) 一个对象应该对其他对象保持最少的了解.又 ...

  8. UI设计需要学习什么软件?

    学习UI设计所用软件有:PS.AI.AE.APR四个为主,但80%都是以PS软件为主,其次是AI.AE.APR,另外有时也会用到XMind.Cutterman.Mark Man等软件. 1.PS:是A ...

  9. dw网页设计作品_UI设计需要学习哪些软件 如何成为高薪UI设计师

    ​ UI设计需要学习哪些软件?如何成为高薪UI设计师?有互联网的地方就有UI设计,更值得一提的是UI设计入行简单,薪资却可以媲美程序员.但成为高薪UI设计师并不容易,你需要具备扎实的理论功底并熟练掌握 ...

最新文章

  1. 为什么vue.js一眼看上去很美?
  2. WPF 仿IPhone滑块开关 样式 - CheckBox
  3. matlab Retinex图像增强算法
  4. 聚能聊每周精选 第二十三期
  5. 微基准测试进入Java 9
  6. 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去...
  7. OSI七层协议与TCP连接
  8. swoole服务器主动推消息,实现websocket-主动消息推送laravelswoole
  9. 侏罗纪世界手游显示无法登陆到服务器,《侏罗纪世界手游》不能玩 解决攻略...
  10. HTML5的 2D SVG和SVG DOM的学习笔记(2)---SVG动画
  11. qscoj:喵哈哈村的卢西奥
  12. C/C++函数调用方式
  13. 操作系统部分知识点(持续更新)
  14. 卖地方特色才产品,类似湖南味道那样的网上专卖店
  15. struct vsf_sysutil_statbuf
  16. PMF镜像中文件提取/diskgenius做的镜像文件
  17. loadrunner视频资料地址-boobooke
  18. [单片机框架][bsp层][cx32l003][bsp_system_clock] clock配置和使用
  19. 从年薪1万到年薪100万的日子
  20. 资源共享——FTP服务

热门文章

  1. vim 插件_vim插件YouCompleteMe配置
  2. aspose.word在某个字后面自动换行_在Arctime里制作字幕如何自动换行?如何添加注释、广告语?...
  3. android 关闭2g网络,中国联通将关闭2G网络,速来了解联通2g卡升级4g套餐方法
  4. 二叉搜索树的算法实现
  5. 互斥信号量解决任务间资源共享问题
  6. 双任务延时原理与空闲任务
  7. ept技术_EPT技术在压载水处理中的运用
  8. word回车后间距太大_Word这些神奇的功能,你知道多少?学会这4招,工作不再发愁...
  9. linux 下的远程上传命令行,使用scp命令用命令行从服务器上传下载文件
  10. vbnullchar相当于 java_VB第2版习题与解答的.doc