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:重试的时间间隔
}
}
}
文章评论(0)