keepalived主要是通过VRRP协议实现高可用的,VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行,VRRP是通过一种竞选机制来将路由的任务交给某台VRRP路由器的。
在 Keepalived服务正常工作时,主 Master节点会不断地向备节点发送(多播的方式)心跳消息,用以告诉备Backup节点自己还活看,当主 Master节点发生故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主 Master节点的心跳了,于是调用自身的接管程序,接管主Master节点的 IP资源及服务。而当主 Master节点恢复时,备Backup节点又会释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。
VRRP是遑过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。在 Keepalived服务对之间,只有作为主的服务器会一直发送 VRRP广播包,告诉备它还活着,此时备不会枪占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快可以小于1秒。
一个master的配置示例:
[lh@nginx-master keepalived]$ cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id yw #定义路由标识信息,相同局域网要唯一
}
vrrp_script chk_nginx_proxy {
script '/server/scripts/chk_nginx_proxy.sh' #监控nginx的脚本
interval 2
weight 2
}
vrrp_instance VI_1 { #定义实例
state MASTER # 状态参数
interface eth1 #指定网卡
virtual_router_id 55 #同一个集群ID要一致
priority 150 #优先级 越大越优先
advert_int 1 #主备通讯时间间隔
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.97.190.128/24 #定义的虚拟IP地址
}
track_script {
chk_nginx_proxy
}
}
备机的keepalived配置
备机的keepalived配置
使用ip addr show 查看master机器的IP信息:
可以发现128这个ip目前在这个机器上:
master ip addr show
将master的keepalived停掉:
[lh@nginx-master keepalived]$ sudo service keepalived stop
Stopping keepalived: [ OK ]
然后在备机查看ip信息:
备机 ip addr show
可以发现IP已经漂移到了备机上,如果此时master上的keepalived重新启动,会发现128这个ip又会回到master机器上,因为master优先级比backup的高。
附chk_nginx_proxy.sh的脚本内容:
[lh@nginx-master keepalived]$ cat /server/scripts/chk_nginx_proxy.sh
#! /bin/sh
if [ `netstat -lntup|grep nginx|wc -l` -ne 2 ];then
/etc/init.d/keepalived stop
fi
[lh@nginx-master keepalived]$
联系客服