欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

keepalived介绍

程序员文章站 2022-04-28 13:23:40
keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的 ......

keepalived介绍

keepalived是一个基于vrrp协议来实现的服务高可用方案,可以利用其来避免ip单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

vrrp协议

vrrp全称 virtual router redundancy protocol,即虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将n台提供相同功能的路由器组成一个路由器组(router group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟ip(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个ip的master实际负责arp相应和转发ip数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据vrrp的优先级来选举一个backup当master,保证路由器的高可用。
 
在vrrp协议实现里,虚拟路由器使用 00-00-5e-00-01-xx 作为虚拟mac地址,xx就是唯一的 vrid (virtual router identifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播ip地址 224.0.0.18 来定时发送通告消息。每个router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的ip地址较大者为master,接管虚拟ip。
 

与heartbeat/corosync等比较:

keepalived介绍

keepalived模块介绍

keepalived可以认为是vrrp协议在linux上的实现,主要有三个模块,分别是core、check和vrrp          

  • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析;
  • check负责健康检查,包括常见的各种检查方式;
  • vrrp模块是来实现vrrp协议的;

keepalived其他详细配置说明

全局定义块

1、email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用nagios全面监控代替。 
2、lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。 
3、router_id:用户标识本节点的名称,通常为hostname 
4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,因此很容易遗漏结尾处的花括号,这点需要特别注意。
 

vrrp实例定义块

1、vrrp_sync_group:同步vrrp级,用于确定失败切换(failover)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪

2、group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致

3、vrrp_instance:vrrp实例名 

  • state:实例状态,只有master 和 backup两种状态,并且需要全部大写。抢占模式下,其中master为工作状态,backup为备用状态。当master所在的服务器失效时,backup所在的服务会自动把它的状态由backup切换到master状态。当失效的master所在的服务恢复时,backup从master恢复到backup状态。 
  • interface:对外提供服务的网卡接口,即vip绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。 
  • mcast_src_ip:本机ip地址 
  • virtual_router_id:虚拟路由的id号,每个节点设置必须一样,可选择ip最后一段使用,相同的 vrid 为一个组,他将决定多播的 mac 地址。 
  • priority:节点优先级,取值范围0~254,master要比backup高 
  • advert_int:master与backup节点间同步检查的时间间隔,单位为秒 
  • lvs_sync_daemon_inteface:负载均衡器之间的监控接口,类似于 ha heartbeat的心跳线。但它的机制优于 heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在 dr 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口 
  • authentication:验证类型和验证密码。类型主要有 pass、ah 两种,通常使用pass类型,据说ah使用时有问题。验证密码为明文,同一vrrp实例master与backup使用相同的密码才能正常通信。 
  • smtp_alert:有故障时是否激活邮件通知 
  • nopreempt:禁止抢占服务。默认情况,当master服务挂掉之后,backup自动升级为master并接替它的任务,当master服务恢复后,升级为master的backup服务又自动降为backup,把工作权交给原master。当配置了nopreempt,master从挂掉到恢复,不再将服务抢占过来。 
  • virtual_ipaddress:虚拟ip地址池,可以有多个ip,每个ip占一行,不需要指定子网掩码。注意:这个ip必须与我们的设定的vip保持一致。
keepalived.conf配置文件中加入以下内容
1.notify_master  “想要执行的脚本路径”   #表示当切换到master状态时,要执行的脚本
2.notify_backup “想要执行的脚本路径”   #表示当切换到backup状态时,要执行的脚本
3.notify_fault     “想要执行的脚本路径”   #表示切换出现故障时要执行的脚本
keepalived介绍