keepalived介绍

2020-02-11 0 条评论 960 次阅读 0 人点赞

keepalived也是一个见名知意的工具,他是一款非常轻量级的高可用工具,其原生支持ipvs,且可以对后端主机做健康性检查,当然对于其他服务keepalived还提供了脚本接口供用户自己通过脚本实现健康性检查.另外keepalived也是一款开源免费的软件,其官方地址为 http://keepalived.org 另外它也将自己的代码托管在了GitHub上面

一,keepalived简介

keepalived也是一个见名知意的工具,他是一款非常轻量级的高可用工具,通过其本事其实是对vrrp协议(虚拟路由器冗余协议)的实现,主要的功能是将两台以上的主机放到一个组中,当某一个主机down掉的时候会根据协议本身的机制重新选举,选择出一个新的主服务器,然后将down掉的主机的ip地址配置在自己的某个接口上,继续对外提供服务,当然keepalived还有一个亮点就是其原生支持ipvs,且可以对后端主机做健康性检查,当然对于其他服务keepalived还提供了脚本接口供用户自己通过脚本实现健康性检查.另外keepalived也是一款开源免费的软件,其官方地址为 http://keepalived.org 另外它也将自己的代码托管在了GitHub上面

二,VRRP协议

1.简介

VRRP(Virtual redundant routing protocol)主要是用于对路由器做高可用,防止出口路由器down掉后整个网络瘫痪

2.相关术语

虚拟路由器: 由一个master路由器和多个backup路由器组成,该网络中的客户端将虚拟路由器当做默认网关

VRID: 虚拟路由器的标识,相同VRID的一组路由器构成一个虚拟路由器

Master路由器: 当前正在承担报文转发任务的路由器

Backup路由器: Master路由器出现故障时,能够替代Master路由器继续进行工作的路由器

虚拟ip地址: 虚拟路由器的ip地址,一个虚拟路由器可以拥有一个或者多个IP地址

虚拟MAC地址:一个虚拟路由器拥有一个虚拟MAC地址.虚拟MAC地址的格式为00-00-5E-00-01-{VRID},通常虚拟路由器回应ARP请求使用的是虚拟MAC地址,只有虚拟路由器做特殊配置的时候才回应接口的真实MAC地址

优先级:VRRP根据优先级来确定虚拟路由器中每台路由器的地位,取值范围为0-255,可配置的值为1-254,当某个路由器主动下线时会发送优先级为0的报文

抢占式:虚拟路由器的一种工作方式,backup路由器只要发现主节点的优先级比自己低就会触发新的选举

非抢占式:只有主节点down掉的时候才会触发新的选举

3.工作过程

一个虚拟路由器中有一个Master路由器,多个backup路由器,master路由器会定时通过多播方式发送自己的信息,backup路由器在n个master发送自己的信息的时间过后还没有收到master的信息,其余的backup会根据优先级等信息重新选举出一个新的master,然后将虚拟IP地址配置在新的Master的接口上,然后这个master会发送一个免费的ARP请求来更新局域网中其他机器的ARP缓存,使局域网中所有的客户端都可以正常的将报文发送给这个Master,在客户端看来网关只是MAC地址变了,当之前的主路由器正常启动后,当他收到master路由器的信息后他会比对优先级,如果自己的优先级比现在的master高且工作在抢占模式下此时他会触发新的选举,以此将自己重新变成master路由器将虚拟IP地址重新配置在自己的接口上,但是如果他工作在非抢占模式下,则不会这样做,直到现在的主路由器down掉时才会重新选举.

三,keepalived安装配置

1.安装

这里其实没有什么要多说的,keepalived已经放在了CentOS的base源中,包名就叫keepalived,可以直接安装,需要源码编译可以直接到官网下载源代码进行编译,这里不再做说明,需要注意的是,系统keepalived的时候会自己生成一条iptables规则,拒绝所有请求

2.配置

其主配置文件路径为/etc/keepalived/keepalived.conf,使用花括号的形式定义配置段,

常用的配置段:

global_defs{} 全局配置段

vrrp_instance VNAME{} 虚拟路由器配置段

virtual_server ip port {} ipvs配置段

real_server ip port{} ipvs中real server配置段,应该放在virtual_server配置段中

常用配置项

global_defs {
   notification_email {用于接收keepalived发送邮件的邮箱列表
     acassen@firewall.loc
   }
   notification_email_from user@firewall.loc:keepalived发送邮件时使用的邮件地址
   smtp_server ip:邮件服务器地址
   smtp_connect_timeout time:连接邮件服务器的超时时长
   router_id STRING:路由器的标识符
   vrrp_skip_check_adv_addr:跳过检查头,可以提高性能
   vrrp_strict:工作在vrrp严格模式下
   vrrp_garp_interval time:免费ARP发送间隔
   vrrp_mcast_group4 ip:ipv4的组播地址,默认值是224.0.0.12
   vrrp_mcast_group6:ipv6的组播地址
   vrrp_iptables [keepalived]:添加iptables规则,不加keepalived表示不添加iptables规则
}

vrrp_instance lvs_1 {
    state BACKUP:虚拟路由器的初始状态,MASTER,BACKUP
    interface ens33:虚拟ip绑定在哪个接口上
    virtual_router_id 55:虚拟路由器的id,处于同一虚拟路由器中的id必须一致
    priority 95:优先级
    advert_int 1:通告心跳信息的时间间隔
    authentication {认证相关
        auth_type PASS:认证方式,PASS|AH
        auth_pass 052fad0e:密码,最多8位,多了会从开头截取前8位
    }
    virtual_ipaddress {虚拟路由器的ip地址列表
        192.168.132.85/24:注意这里定义掩码的长度,默认是32,其定义格式非常灵活,现在这种格式定义的ip地址只能通过ip命令查看到,如果想用ifconfig也查询到可以定义label
        <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
    }
    nopreempt:工作在非抢占模式下
    preempt:工作在抢占模式下
    preempt_delay time:抢占模式下节点上线后触发新选举操作的延迟时长,单位秒

    notify_master "/path/to/script":节点成为主节点时触发
    notify_backup "/path/to/script":节点成为备用节点时触发
    notify_fault "/path/to/script":节点成为失败状态时触发的脚本
}

virtual_server ip port {
        delay_loop 6:检查real server健康性的时间间隔
        lb_algo rr:ipvs使用的调度算法
        lb_kind DR:集群的类型,NAT,DR,TUN
        protocol TCP:指定传输层协议类型,TCP,UDP

        real_server 192.168.132.81 80 {
                weight 1:指定权重
                HTTP_GET {:健康状态检查,可以使用HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK
                        url {
                                path /health_check.html:要检查的URL
                                status_code 200:当状态码为200时说明还存活
                        }
                        connect_timeout 3:连接realserver的超时时长
                        nb_get_retry 3:连接超时后重试的次数
                        delay_before_retry 3:重试的时间间隔
                }
        }
}

bighero

这个人太懒什么东西都没留下

文章评论(0)