首页 > 代码库 > 轻量级高可用实现工具--keepalived详解
轻量级高可用实现工具--keepalived详解
一 、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内被分配到同一个后端realserver protocol 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。