keepalived基础

Keepalived概论

  Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

VRRP

  Keepalived以VRRP协议为实现基础,用VRRP协议来实现高可用(HA)。

1、VRRP协议简介

  在现实的网络环境中(比如Internet),两台需要通信的主机(end-host)大多数情况下并没有直接的物理连接。对于这样的情况,它们之间的路由怎么选择?主机如何选定到达目的主机的下一跳路由,这是一个问题。通常的解决办法有两种:
- 在主机上使用动态路由协议(比如RIP,OSPF等)
- 在主机上配置静态路由
  很明显,在主机上配置动态路由协议是非常不切实际的,因为管理、维护成本以及是否支持等诸多问题。那么配置静态路由就变得十分的流行。实际上,这种方式我们至今一直在用。但是,路由器(或者说默认网关default gateway)却经常成为单点。就算配置了多个静态路由,却因为必须重启网络才能生效而变得不实用。
  VRRP的目的就是为了解决静态路由单点故障问题。
  VRRP通过一种竞选协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。
  
  VRRP路由器
  VRRP路由器就是一台路由器,只不过上面运行了VRRPD这样的程序来实现VRRP协议而己,这是物理的路由器。一台VRRP路由器可以位于多个虚拟路由器。 
  VRRP虚拟路由器
  所谓虚拟,就是说并不是实际存在的,是一个逻辑而不是物理的路由器。虚拟路由器通常由多台(物理的)VRRP路由器通过某种方式组成,就好比这些物理的路由器都丢到一个池(pool)里面去,整个pool对外看起来就像是一台路由器,但其实内部有多台。虚拟路由器的标识称为VRID。
  MASTER和BACKUP
  在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台物理的机器并不同时工作,而是由一台称为MASTER的负责路由工作,其他的都是BACKUP,MASTER并非一成不变,VRRP协议让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。

2、工作机制

  VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP〕。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。
  在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRPAdvertisementmessage),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<1s),以保证服务的连续性。
  出于安全性考虑,VRRP包使用了加密协议进行加密。
 

Keepalived设计和实现

1、结构

这里写图片描述

组成部分 作用
core keepalived的核心程序,比如全局配置的解析,进程启动等
vrrp keepalived的vrrp子进程以及相关的代码
check keepalived的healthchecker子进程的目录,包括了所有的健康检查方以及对应的配置的解析,LVS的配置解析也在这个里面
libipfwc iptables(ipchains)库,主要用来配置LVS中的firewall-mark
libipvs* LVS要用到

2、多进程模式

  keepalived采用了多进程的设计模式,每个进程负责不同的功能,我们在使用LVS的机器上通常可以看到这样的进程:
111 Keepalived < 父进程:内存管理,监控子进程
112 \一Keepalived < VRRP子进程
113 \一Keepalived < healthchecker子进程
  有些命令行参数来控制不开启某些进程,比如不运行LVS的机器上,只开启VRRP就可以了(-P),如果只运行healthchecker子进程,使用-C。

3、控制面板

  所谓的控制面板就是对配置文件的编译和解析,Keepalived的配置文件解析比较特殊,并不是一次统统解析所有的配置,只在用到某模块的时候才解析相应的配置,在每个模块里面的xxx_parser.c文件就是作用。

4、WatchDog

  这种框架提供了对子进程(VRRP和healthchecker)的监控.

5、LVS封装

  Keepalived里面所有对LVS的相关操作并不直接使用ipvsadm这样的用户端程序,而是直接使用LVS提供的函数进程操作,这些代码都在check/ipwrapper.c中。

猜你喜欢

转载自blog.csdn.net/LJL55555/article/details/80967340
今日推荐