Keepalived简介:
keepalived,保持存活,在网络中就是保持在线,也就是HA,用来防止单点故障的发生,在keepalived中最重要的就是VRRP协议,它是keepalived实现高可用的基础,。
一、VRRP协议
网络在设计的时候必须考虑冗余容灾,线路容灾,设备容灾,从而防止单点故障的发生,所以在路由器或三层交换机也要实现冗余,这里就要用到vrrp协议,即vrrp就是一种容错协议,为消除在静态缺省路由环境下的缺省路由器单点故障引起的网络失效而设计的主备模式的协议,使得在发生故障而进行设备功能切换时可以不影响内外数据通信,不需要修改内部网络的网络参数。
VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在虚拟路由器内部,对虚拟路由器有操作权限的就是Master,或者通过算法选举产生,master实现针对虚拟路由器ip的各种网络功能,如ARP请求,ICMP以及数据的转发等;其他设备不拥有该ip,状态是BACKUP,除了接收Master的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,Backup将接管原先的master网络功能。
配置VRRP协议时需要配置每个路由器的虚拟路由器id也就是VRID和优先权值,使用VRID将路由器进行分组,具有相同的VRID值的路由器为同一组,VRID是一个0-255的正整数,同一组中的路由器通过使用优先级权值来选举Master,优先级权值大的为Master,权值小的为backup,优先级权值也是0-255的正整数。
VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,vrrp运行时只有Master路由器定时发送vrrp通告信息,表示Master正常工作,Backup只负责接收Vrrp数据,不发送数据,如果一定时间内没有收到Master的通告信息,各Backup将宣告自己成为Master,发送通告信息,重新进行Master选举状态。
相关术语:
虚拟路由器:由一个Master路由器和多个Backup路由器组成,主机将虚拟路由器当做默认网关;
虚拟IP地址:虚拟路由器的ip地址,一个虚拟路由器可以拥有一个或多个ip地址;
VRID:标识虚拟路由器,有相同VRID的一组路由器为一个虚拟路由器;
Master路由器:在虚拟路由器中承担转发任务的路由器;
Backup路由器:在虚拟路由器中只负责接收数据,当Master路由器出现故障时,能够代替Master路由器工作:
VRRP在根据优先级权值选择虚拟路由器中的每台路由器的地位时有两种方式:
1)非抢占式:如果Backup路由器工作在非抢占式方式下,则只要Master路由器没有出现故障,即使Backup路由器之后被配置了更高的优先级也不会成为Master路由器;
2)抢占方式:如果Backup路由器工作在抢占方式下,当它收到VRRP报文后,会将自己的优先级与通告中的优先级进行比较,如果自己的优先级比当前的Master优先级高,就会主动抢占成为Master路由器;否则,将保持Backup状态。
二.keepalived原理
1.keepalived组件:
keepalived是模块化设计,不同的模块负责不同的功能;
keepalived的组件:core、check、vrrp、libipfwc、libipvs-2.4、libipvs-2.6
core:是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等;
check:负责healthchecker(健康检查),包括了各种健康检查的方式以及对应配置的解析;
vrrp:vrrpd子进程,vrrpd子进程就是用来实现vrrp协议的;
libipfwc:iptables库,在配置LVS时会用到;
libipvs*:配置LVS;
2.keepalived进程
keepalived启动后会有三个进程:
父进程:内存管理,子进程管理;
子进程:VRRP子进程;
子进程:healthchecker子进程;
两个子进程都被系统WatchDog看管,两个子进程都各自负责自己的事,healthchecker子进程负责检查各个服务器的健康状态,如果healthchecker子进程检查到Master服务器不可用了,就会通知本机上的兄弟vrrpd子进程,让它删除通告,并且去掉虚拟ip,转换为Backup状态。