VRRP协议及Keepalived原理使用
1.VRRP
VRRP,Virtual Router Redundancy Protocol,虚拟路由器冗余协议。VRRP由IETF提出,目的是为了解决局域网中配置默认网关的单点失效问题,1998年已推出正式的RFC2338协议标准。VRRP普遍应用在边缘网络中,它的设计目标是支持特定状况下IP数据流量失败转移不会引发混乱,容许主机使用单路由器,以及及时在实际第一跳路由器使用失败的情形下仍可以维护路由器间的连通性。
VRRP将局域网的一组路由器(包括一个Master即活动路由器和若干个Backup即备份路由器)组织成一个虚拟路由器,称之为一个备份组。这个虚拟的路由器拥有本身的IP地址10.100.10.1(这个IP地址能够和备份组内的某个路由器的接口地址相同,相同的则称为ip拥有者),备份组内的路由器也有本身的IP 地址(如Master的IP地址为10.100.10.2,Backup 的IP地址为10.100.10.3)。局域网内的主机仅仅知道这个虚拟路由器的IP地址10.100.10.1,而并不知道具体的Master路由器的IP地址10.100.10.2以及Backup路由器的IP地址10.100.10.3。它们将本身的缺省路由下一跳地址设置为该虚拟路由器的IP地址10.100.10.1。因而,网络内的主机就经过这个虚拟的路由器来与其它网络进行通讯。若是备份组内的Master路由器坏掉,Backup路由器将会经过选举策略选出一个新的Master路由器,继续向网络内的主机提供路由服务,从而实现网络内的主机不间断地与外部网络进行通讯。
VRRP说白了就是实现IP地址漂移的,是一种容错协议。在下图中,Router A、Router B和Router C组成一个虚拟路由器。各虚拟路由器都有本身的IP地址。局域网内的主机将虚拟路由器设置为缺省网关。Router A、Router B和Router C中优先级最高的路由器做为Master路由器,承担网关的功能。其他两台路由器做为Backup路由器。当master路由器出故障后,backup路由器会根据优先级从新选举出新的master路由器承担网关功能。Master路由器周期性地发送VRRP报文,在虚拟路由器中公布其配置信息(优先级等)和工做情况。Backup路由器经过接收到VRRP报文的状况来判断Master路由器是否工做工常。前端
备注:
配置VRRP时,须要路由器支持VRRP功能。同时VRRP管理的机器,要在同一个二层网络下,或同一个VLAN下。node
VRRP学习资料参考于:
http://zhaoyuqiang.blog.51cto.com/6328846/1166840
http://hugnew.com/?p=745算法
2.keepalived
(1)keepalived简介
keepalived使用的是VRRP协议方式。简单的说就是,Keepalived的目的是模拟路由器的高可用,Heartbeat或Corosync的目的是实现Service的高可用。
keepalived是模块化设计,不一样模块负责不一样的功能,下面是keepalived的组件 :
A)core
是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析等 。
B)check
负责healthchecker(健康检查),包括了各类健康检查方式,以及对应的配置的解析包括LVS的配置解析 。
C)vrrp
VRRPD子进程,VRRPD子进程就是来实现VRRP协议的 。
D)libipfwc
iptables(ipchains)库,配置LVS会用到 。
F)libipvs*
配置LVS会用到 。
备注:keepalived和LVS彻底是两码事,只不过他们各负其责相互配合而已。服务器
(2)keepalived安装和配置
编译keepalived时,若是不加参数能够编译,那么将只包含VRRP相关的功能,用来搭建HA集群,实现IP漂移。当加上--with-kernel-dir=能够将IPVS相关的特性编译进去,用于配置LVS。直白地说,咱们将LVS相关的配置(例如realserver、调度算法、工做模式等)写入到keepalived配置中,由keepalived帮配置LVS,其余这部分配置工做和使用ipvsadm是差很少的。网络
keepalived的配置主要有全局配置段和VRRP配置段两部分,若是须要配置lvs,还须要有lvs相关的配置:架构
##全局配置段
包括邮件报警、SMTP服务器的配置等等,例如:
[plain] view plain copyide
global_defs { notification_email { admin@example.com } notification_email_from admin@example.com smtp_server 127.0.0.1 stmp_connect_timeout 30 lvs_id my_hostname }
##VRRP配置
VRRP配置时keepalived核心,就是IP漂移相关的配置。举例以下:
[plain] view plain copy模块化
vrrp_instance VI_1 { state BACKUP #为BACKUP节点 interface eth0 virtual_router_id 51 priority 100 nopreempt advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.1.199/24 #VIP为192.168.1.199 } }
备注:如上是一个VRRP的配置,该实例是BACKUP节点,还须要再另外台机器上配置MASTER节点,这样才能达到IP漂移的效果。工具
##LVS配置(备注:若是咱们是须要IP漂移的HA集群,LVS相关的配置能够没有哦)
LVS配置只在要使用keepalived来配置和管理LVS时使用,若是仅仅使用keepalived作HA的话就能够彻底不用配置LVS。keepalived关于LVS的配置以下:
[plain] view plain copyoop
virtual_server 192.168.1.199 80 { #LVS的VIP delay_loop 6 lb_algo rr lb_kind NAT nat_mask 255.255.255.0 persistence_timeout 10 protocol TCP real_server 192.168.1.13 80 { #RealServer的机器 weight 1 TCP_CHECK { #健康检查 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.14 80 { #RealServer的机器 weight 1 TCP_CHECK { #健康检查 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
(3)lvs、keepalived即ipvsadm三者的关系
lvs , 在功能层面,已经被集成进了当前流行的Linux kernel , 随时可用。
keepalived和ipvsadm都是lvs的管理工具,功能层面做用相同,二选一便可。keepalived是第三方的,支持lvs node自己的HA以及real server故障检测等功能,而ipvsadm是lvs做者原创的, 只支持lvs自身的功能管理。
一般状况下,咱们安装了lvs的内核模块后,须要再安装ipvsadm工具来配置LVS。而使用keepalived时,能够将lvs的配置写入keepalived的配置文件keepalived.conf中,而后由keepalived加载便可,不须要再使用ipvsadm来配置了。
keepalived和lvs结合使用,keepalived能够完成两项工做,一是对Real Server中的机器进行健康检查,若是有问题,从服务器池中剔除;二是在LoadBalance间进行容灾切换。
keepalived编译的时候,能够将lvs的管理接口编译到keepalived中,这样keepalived就能够和LVS模块交互,就不仅有IP漂移功能了。
(4)一些keepalived的闲杂知识(A)keepalived的容灾切换原理keepalived中优先级高的节点为MASTER。MASTER其中一个职责就是响应VIP的ARP包,将VIP和MAC地址映射关系告诉局域网内其余主机,同时,它还会以多播的形式向局域网中发送VRRP通告,告知本身的优先级。网络中的全部BACKUP节点只负责处理MASTER发出的多播包,当发现MASTER的优先级没本身高,或者没收到MASTER的VRRP通告时,BACKUP将本身切换到MASTER状态,而后作MASTER该作的事(1.响应ARP包;2.发送VRRP通告)。备注:响应ARP包,告诉本机的MAC地址,也意味着告诉发送方,本机才是虚拟IP的拥有者。这个IP漂移的关键哦。(B)keepalived启动进程的说明keepalived启动后会有三个进程,以下:父进程:内存管理,子进程管理等子进程:VRRP子进程子进程:healthchecker子进程(C)在HA架构中,若是出现两个节点同时认为自已经是惟一处于活动状态的服务器从而出现争用资源的状况,这种争用资源的场景便是所谓的"脑裂"(split-brain)或"partitioned cluster"。在两个节点共享同一个物理设备资源的状况下,脑裂会产生至关可怕的后果。(D)keepalived/heartbeat/HAProxy的比较keepalived主要是控制IP的漂移,其配置、应用简单,而heartbeat则不但能够控制IP漂移,更擅长对资源服务的控制,其配置、应用比较复杂。通常Keepalived是实现前端高可用,经常使用的前端高可用的组合有,就是咱们常见的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是实现服务的高可用,常见的组合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd实现Web服务器的高可用,Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL实现MySQL服务器的高可用。