当前位置: 首页 > news >正文

keepalived配置文件解析系列之(一)keepalived简介及配置文件介绍

一、 keepalived简介

  为后端服务器提供健康检查(keepalived)和为负载均衡器提供失败切换(fail over)从某种意义上构成了服务器负载均衡(SLB, server load balance)的 一部分。以LVS(Linux  Virtual Server, 可参考项目主页http://www.linuxvirtualserver.org/)为代表的软件负载均衡服务器,以高性价比的方式解决了众多企业的需求。 而LVS + keepalived是常见的一种部署方式。

  健康检查和失败切换是keepalived(可参考项目主页http://www.linuxvirtualserver.org/)的两大核心功能。 所谓的健康检查, 就是采用tcp三次握手, icmp请求, http请求, udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器, 利用VRRP(虚拟路由冗余协议, 可参考RFC文档http://tools.ietf.org/html/rfc5798) 维持主备负载均衡器的心跳, 当主负载均衡器出现问题时, 由备负载均衡器承载对应的业务, 从而在最大限度上减少流量损失, 并提供服务的稳定性。

  LVS和keepalived都是开源的项目, 这意味着若有自己的个性化需求的话,可以基于两者进行二次开发, 从而以高性价比的方式解决相应的负载均衡的需求。

 二、 keepalived的配置文件介绍

  下面介绍的是keepalived的配置文件的格式, 以便为接下来从代码级别上分析配置文件的解析过程做准备。可以从源码的keepalived\etc\keepalived/keepalived.conf找到下面摘录的一段配置文件内容。 本文关注的是不是配置文件各选项的内容的含义, 而是该配置文件的特点和如何解析这样关键字分层的配置文件。 

! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
… …
}
notification_email_from Alexandre.Cassen@firewall.loc
}
vrrp_instance VI_1 {
state MASTER
… …
authentication {
auth_type PASS
… …
}
}
virtual_server 192.168.200.100 443 {
    delay_loop 6
… …
real_server 192.168.201.100 443 {
weight 1
SSL_GET {
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
connect_timeout 3
… …
}
}
}
#include newfile
include filename.conf

  如上所示, keepalived采用关键字分层的方式来组织配置文件, 在上面摘取的配置文件片段中,共有4层关键字,位于第零层的关键字有:global_defs, vrrp_instance,  vritual_server等, 位于第一层的关键字有:notification_email, state, delay_loop, real_server等, 位于第二层的关键字有weight, SSL_GET, 位于第三层的关键字有url等, 位于第四层的关键字有path, digest等。若把位于同一层的关键字组织成一个列表(或者叫向量vector), 则该列表具有这样的特性:它的每一个元素都是一个关键字, 而该关键字可能指向下一层的关键字列表,如此反复。

  keepalived的配置文件还支持include的用法, 可以在当前配置文件中用include newconf的方式包含下一个配置文件, 且下一个配置文件里面也可以用include包含下下一个配置文件。而且一个配置文件里面也可以用多个include语句包含多个配置文件进行。此外, keepalived还支持在传递配置文件名字时, 采用包含正则表达式的记法, 如:你可以传递一个”*.conf”作为配置文件的名字, 对应的是解析当前目录下所有以.conf结尾的文件。

三、如何解析配置文件

  如上所述, keepalived在配置文件解析方面拥有非常灵活的方式, 采用关键字分层(每层的关键字数量不限,且关键字的层次也不限制)的方法进行组织一个配置文件, 且支持include语句和正则表达式记法的配置文件名, 要怎么设计才可以实现这样的功能? keepalived是用C语言实现的, 不像python等拥有很多封装好的库可以使用。 具体的解析过程在接下来的文章里面会进行具体地分析。

转载于:https://www.cnblogs.com/quiet/archive/2012/03/18/2404826.html

相关文章:

  • 如何学习吉日嘎拉的走火入魔C#.NET通用权限管理系统组件源码?
  • Firefox 7正式发布
  • 高效的使用stl::map和std::set
  • 深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP
  • 申请Google Map API Key
  • 系统集成项目管理工程师
  • Xweibo插件版20110809重要补丁及下载
  • word-break
  • 一种通过JS执行JAVA表达式的方法
  • (2)MFC+openGL单文档框架glFrame
  • APUE读书笔记-12线程控制-01简介
  • ubuntu解决vim方向键和退格键失效的方法
  • iOS 开发者企业计划 (详细)
  • 【转载】wpf学习笔记2
  • SQL Server 2008 允许远程连接的解决方法
  • angular2 简述
  • Angular4 模板式表单用法以及验证
  • es6要点
  • express如何解决request entity too large问题
  • JAVA多线程机制解析-volatilesynchronized
  • JS笔记四:作用域、变量(函数)提升
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Python中eval与exec的使用及区别
  • Redis 中的布隆过滤器
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • socket.io+express实现聊天室的思考(三)
  • Spring Cloud中负载均衡器概览
  • tensorflow学习笔记3——MNIST应用篇
  • Vue学习第二天
  • 测试开发系类之接口自动化测试
  • 扑朔迷离的属性和特性【彻底弄清】
  • const的用法,特别是用在函数前面与后面的区别
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 湖北分布式智能数据采集方法有哪些?
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $.ajax()
  • $.ajax,axios,fetch三种ajax请求的区别
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)斐波那契Fabonacci函数
  • (六)软件测试分工
  • (十八)SpringBoot之发送QQ邮件
  • (四)c52学习之旅-流水LED灯
  • (四)Controller接口控制器详解(三)
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (转载)hibernate缓存
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net(C#)中String.Format如何使用
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net中我喜欢的两种验证码
  • /etc/sudoers (root权限管理)