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可以认为是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 “想要执行的脚本路径” #表示切换出现故障时要执行的脚本
上一篇: asp.net core系列 44 Web应用 布局
下一篇: UUID