VRRP是什么?
VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)是一种容错协议,保证当主机的下一条路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
VRRP相关术语:
1.虚拟路由器:由一个Master路由器和一个或多个Backup路由器组成。所有的Master和Backup组成一个组,这个主就是虚拟路由器。
2.VRID:虚拟路由器的标识。同一虚拟路由器内的路由器有着相同的VRID。
3.Master:虚拟路由器中正在工作的路由器
4.Backup:备用路由器。
5.虚拟IP地址:路由器组(虚拟路由器)的IP地址。
6.优先级:用来确定Master和Backup。
7.抢占模式与非抢占模式:Master会以组播方式不断的向虚拟路由器组内发送自己的心跳报文,一旦Backup在设定时间内没有收到心跳信息的次数超过了设定次数,则会将Master的所有权转移到优先级最高的Backup,则就是抢占模式。
keepalived就是利用VRRP协议实现的一种可保障集群高可用的工具。通过主机之间的优先等级以及心跳检测来及时切换准备主机的工作状态,以提高集群的高可用性。
keepalived的核心组件:
1.VRRP stack
2.ipvs wrapper
3.checkers
为什么使用keepalived一定要确认网卡支持并开启组播功能?
如VRRP中所述,Master需要通过组播功能定时向Backup发送心跳信息,报告自己的运作是否正常,组播通信方式是一种很节省资源的通信方式。
1.安装keeplived
从centos6.4开始,keepalived就集成在yum的base仓中了(keepalived的应用重要可见一斑),所以直接yum安装即可。[[email protected] ~]# yum install -y keepalived
2.keepalived简单配置实现两台主机实现高可用模型
准备两台虚拟机
n1:192.168.11.11
n2:192.168.11.22
将n1下做配置/etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email { #通知邮件配置,将keepalived的状态信息发送到指定邮箱
[email protected] #这里配置通知的邮箱地址,为方便演示这里就配置为本机
}
notification_email_from [email protected] #配置发邮件的地址,这里也配置为本机
smtp_server 127.0.0.1
smtp_connect_timeout 30 #邮件服务超时时间
router_id n1 #当前标识当前主机
vrrp_mcast_group4 224.1.101.18 #配置组播地址,集群中通常不会使用默认的组播地址
}
vrrp_instance VI_1 { #当前节点所属的虚拟路由的名称
state MASTER #当前节点的状态,有Master和Backup两种状态
interface ens33 #定义vrrp地址绑定在哪个接口
virtual_router_id 51 #虚拟路由器的标识,同一虚拟路由器组中的ID要相同
priority 100 #优先级设置
advert_int 1 #每隔多久以组播形式向外通告一次,默认是1秒
authentication {
auth_type PASS #认证开启
auth_pass 1111 #认证密码
}
virtual_ipaddress { #配置虚拟路由ip,即漂移地址
192.168.11.99/24 dev ens33 label ens33:0 #漂移地址为192.168.11.99,配置在ens33网卡上并指定接口0
}
}
配置完成后将此配置复制到n1并修改route_id和priority[[email protected] ~]# scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
确定网卡开启了multicast功能[[email protected] ~]# ifconfig
出现MULTICAST就说明已开启
开启keepalived
现在n2上开启(n2优先级比n1低),并查看状态
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# systemctl status keepalived
查看n2网卡配置[[email protected] ~]# ifconfig
可看出n2进入了MASTER状态
再开启n1,优先级高于n2,并查看状态
[[email protected] ~]# systemctl start keepalived
[[email protected] ~]# systemctl status keepalived
现在再查看n2
n1启动后漂移地址(虚拟IP)就漂移至n1了
n2网卡中的漂移地址(配置在ens33:0上)也被删除了,并漂移至n1上(同样配置在ens33:0)了。
利用抓包工具tcpdump可以更直观的看到虚拟地址漂移的过程
安装tcpdump[[email protected] ~]# yum install -y tcpdump
现在的状态是n1,n2的keepalived都开启了,n1的优先级大于n2。
在n1和n2上使用命令[[email protected] ~]# tcpdump -i ens33 -nn host 224.1.101.11
注意:因为n1为master状态,所以n1会不停的(配置是每隔1秒)发送组播通告,并且这个通告在同一局域网的所有主机都能接收到,但只有配置了keepalived的主机才会起作用。
停掉n1的keepalived服务[[email protected] ~]# systemctl stop keepalived
查看n2的抓包信息[[email protected] ~]# tcpdump -i ens33 -nn host 224.1.101.11
这就比较完整的展示了两个节点间在4层上使用keepalived做高可用的最基本的原理过程了。但这没有涉及到应用层的高可用,keepalived还能实现具体服务的高可用。
原文地址:http://blog.51cto.com/13322786/2162618