一 、keepalived简介
keepalived:它的诞生最初是为ipvs(一些服务,内核中的一些规则)提供高可用性的,最初最主要目的是能够自主调用ipvsadm来生成规则,并且能够自动实现将用户访问的地址转移到其他节点上进行实现的。keepalived:核心包含两个ckechers和VRRP协议。
ckeckers#检查服务检查reserved的健康状况的,基于脚本也可以服务本身的健康状况。这里是实现ipvs后端健康状况的检测的。VRRP# Virtual Router Redundancy Protocol 虚拟路由器冗余协议 -----keepalived依赖的最重要的核心技术
二、VRRP协议详解
(一)VRRP技术优点
VRRP是一种容错协议,它保证当主机的下一跳路由器出现故障时,由另一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性, VRRP中每个节点之间都有优先级的一般为0-255 (0,255有特殊用法)数字越大优先级越高。1、简化网络管理。#在具有多播或广播能力的局域网(如以太网)中,借助VRRP 能在某台设备出现故障时仍然提供高可靠的缺省链路,有效避免单一链路发生故障后网络中断的问题,而无需修改动态路由协议、路由发现协议等配置信息,也无需修改主机的默认网关配置。 2、适应性强。#VRRP 报文封装在IP 报文中,支持各种上层协议。 3、网络开销小。#VRRP 只定义了一种报文――VRRP 通告报文,并且只有处于Master 状态的路由器可以发送VRRP 报文。
(二)VRRP协议中的相关术语
1 虚拟路由器#由一个 Master 路由器和多个Backup 路由器组成。主机将虚拟路由器当作默认网关。 2 VRID#虚拟路由器的标识。有相同VRID 的一组路由器构成一个虚拟路由器。3 Master 路由器#虚拟路由器中承担报文转发任务的路由器。4 Backup 路由器#Master 路由器出现故障时,能够代替Master 路由器工作的路由器。5 虚拟 IP 地址#虚拟路由器的IP 地址。一个虚拟路由器可以拥有一个或多个IP 地址。6 IP 地址拥有者#接口IP 地址与虚拟IP 地址相同的路由器被称为IP 地址拥有者。7 虚拟 MAC 地址#一个虚拟路由器拥有一个虚拟MAC 地址。虚拟MAC 地址的格式为00-00-5E-00-01-{VRID}。通常情况下,虚拟路由器回应ARP 请求使用的是虚拟MAC 地址,只有虚拟路由器做特殊配置的时候,才回应接口的真实MAC 地址。8 优先级# VRRP 根据优先级来确定虚拟路由器中每台路由器的地位。9 非抢占方式#如果 Backup 路由器工作在非抢占方式下,则只要Master 路由器没有出现故障,Backup 路由器即使随后被配置了更高的优先级也不会成为Master 路由器。10 抢占方式#如果Backup 路由器工作在抢占方式下,当它收到VRRP 报文后,会将自己的优先级与通告报文中的优先级进行比较。如果自己的优先级比当前的Master 路由器的优先级高,就会主动抢占成为Master 路由器;否则,将保持Backup 状态。
(三)VRRP的工作过程
1 Master 路由器的选举;2 Master 路由器状态的通告;3 同时,为了提高安全性,VRRP 还提供了认证功能;
(四) VRRP主备备份
主备备份方式表示业务仅由Master路由器承担。当Master路由器出现故障时,才会由选举出来的Backup路由器接替它工作,如图
#初始情况下,Device A是Master路由器并承担转发任务,Device B和Device C是Backup路由器且都处于就绪监听状态。如果Device A发生故障,则虚拟路由器内处于Backup状态的Device B和Device C路由器将根据优先级选出一个新的Master路由器,这个新Master路由器继续为网络内的主机转发数据。
(五)VRRP负载分担
在路由器的一个接口上可以创建多个虚拟路由器,使得该路由器可以在一个虚拟路由器中作为Master路由器,同时在其他的虚拟路由器中作为Backup路由器。负载分担方式是指多台路由器同时承担业务,因此负载分担方式需要两个或者两个以上的虚拟路由器,每个虚拟路由器都包括一个Master路由器和若干个Backup路由器,各虚拟路由器的Master路由器可以各不相同,
三、keepalived 原理详解
#keepalived也是模块化设计,不同模块负责不同的功能,下面是keepalived的组件 core check vrrp libipfwc libipvs-2.4 libipvs-2.6
core#是keepalived的核心,负责主进程的启动和维护,全局配置文件的加载解析check#负责healthchecker(健康检查),包括各种健康检查方式,以及对应的配置的解析包括LVS的配置解析vrrp #VRRPD子进程,VRRPD子进程就是来实现VRRP协议的libipfwc#iptables(ipchains)库,配置LVS会用到libipvs* #配置LVS会用到
keepalived模块化结构
keepalived 启动后会启动三个进程 如下所示: PID 111 Keepalived <--Parent process monitoring children 父进程 112 \_Keepalived <--VRRP child VRRP子进程 113 \_Keepalived <--Healthchecking child healthchecker子进程
如上图所示:#两个子进程都被系统WatchDog看管,两个子进程各自复杂自己的事healthchecker子进程复杂检查各自服务器的健康程度,例如HTTP,LVS等等,如果healthchecker子进程检查到MASTER上服务不可用了,就会通知本机上的兄弟VRRP子进程,让他删除通告,并且去掉虚拟IP,转换为BACKUP状态。
四 、keepalived 配置文件介绍
keepalived 安装#yum -y install keepalived
keepalived 只有一个配置文件,该配置文件中有多个配置区域 /etc/keepalived/keepalived.conf#分别为:global_defs (全局配置区域)、vrrp_script (脚本区域)、vrrp_instance(实例区域)、virtual_server(虚拟服务器区域)
各个区域配置详解
1 global_defs区域 :主要配置故障发生时的通知对象以及机器标识 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL }
上述参数解析# notifacation_email 故障发生时给谁发邮件通知# notifacation_email_from 通知邮件从哪个地址发出# smpt_server 通知邮件的smtp地址# smtp_cnnect_timeout 连接smtp服务器的超时时间# router_id 标识本节点的字条串,通常为hostname,但不一定非得是hostname。故障发生时,邮件通知会用到
2 vrrp_script 脚本区域 vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 }
上述参数解析#vrrp_script 定义vrrp_script 区域名称#script 所要执行的脚本#interval 脚本执行的间隔时间#weight 脚本执行结果导致的优先级变更
3 vrrp_instance 实例区域:用来定义对外提供服务的VIP区域及相关属性 vrrp_instance VI_1 { interface eth0 state MASTER priority 101 virtual_router_id 51 garp_master_delay 1 authentication { auth_type PASS auth_pass 1111 } track_interface { eth0 } virtual_ipaddress { 172.16.100.1/16 dev eth0 label eth0:0 } track_script { chk_haproxy } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault"}
:
上述参数解析#vrrp_instance : 定义实例名称#state :可以是MASTER或BACKUP,不过当其他节点keepalived启动时,会依据prioroty进行比较来选举MASTER#interface : 节点固有IP的网卡,用来发送VRRP包#virtual_router_id : 取值在0-255之间,用来区分多个instence之间的VRRP组播#priority : 用来选举master#advert_int : master向外通告VRRP信息的间隔 ,默认为1s#garp_master_delay :转换为master时,对延迟设定的定时器#authentication :设置认证信息#auth_type PASS :认证方式,可以是PASS或AH两种认证方式#auth_pass :设置认证密码#track_interface :追踪的端口#virtual_ipaddress :设置浮动ip---VIP#track_script :对vrrp_script脚本区域中定义的脚本进行追踪#chk_haproxy :对这个区域进行追踪 #notify_master /path/to/to_master.sh :切换到MASTER状态要发的通知#notify_backup/path/to/to_backup.sh :切换到BACKUP状态要发的通知#notify_fault "/path/fault.sh VG_1" :故障时要执行的通知 注:以上三个参数指定的脚本需要自己定义
4 virtual_server 区域:定义与lvs相关的集群服务和集群服务中的realserver virtual_server 172.16.7.1 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 0 protocol TCP sorry_server 127.0.0.1 80 real_server 172.16.7.200 80 { weight 3 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.7.201 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }}
上述参数解析virtual_server 172.16.7.1 80#对外通过ip地址172.16.7.1 提供80端口的服务delay_loop#延迟轮询时间(s)lb_algo #后端指定的调度算法lb_kind #调度模式nat_mask #网络地址persistence_timeout #会话保持时间(s),用户在50s内被分配到同一个后端realserverprotocol TCP#健康检查使用的TCP协议sorry_server#当所有机器都出现故障时使用的服务器real_server <IPADDR> <PORT> #后端真实节点主机的权重等设置,(主要),后端有几台这里就要设置几个weight#每一台realserver 的权重TCP_CHECK#健康状态检测方式connect_port#连接的端口connect_timeout#超时时长nb_get_retry #重试次数delay_before_retry#下次重试的时间延迟在realserver也可以自定义服务器状态发生变化后执行的脚本 notify_up <STRING> | <QUOTED-STRING> 检查服务器正常(up)后,要执行的脚本 notify_down <STRING> | <QUOTED-STRING> 检查服务器失败(down)后,要执行的脚本
PS:水平有限,关于更多的参数详解及概念请参阅官网www.keepalived.org及 man keepalived.conf 获得。
本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1406908