keepalived 介绍
keepalived 是 Linux下一个轻量级的高可用解决方案
keepalived 主要通过虚拟路由冗余(VRRP)来实现高可用功能
优点:部署及使用简单,只需一个配置文件即可完成
功能:1. 服务器状态检测和故障隔离功能 2. HA(High Available) cluster
keepalived 发展
keepalived起初是为LVS(Linux Virtual System)设计,专门监控集群系统中各个服务节点的状态
根据TCP/IP参考模型 第三、第四、第五层交换机制检测每个服务节点的状态
(详细见本页keepalived工作原理)
** e.g: keepalived检测WEB服务器的状态;**
如果一台WEB服务器死机/工作出现故障,keepalived检测到此状况后会将故障服务器从系统中剔除,直至该服务器工作正常后keepalived自动将该服务器加入到服务器群中, 以上工作keepalived自动完成,无需人工干涉,人工干预仅是修复出现故障的服务节点.
keepalived 后续加入了VRRP功能
VRRP(Virtaul Router Redunadancy Protocol,虚拟路由器冗余协议)
目的:解决静态路由出现的单点故障问题,实现网络不间断稳定运行
VRRP 协议与工作原理
❉ 引入VRRP概念

*说明*:图片来源百度百科;左侧图片为局域网组网;右侧图片为VRRP组网
** 局域网组网 e.g:**
网络内的所有主机会设置一条默认网关(10.100.10.1),当主机发出的目的地址不在本网段(10.100.10.0/24)的报文;
通过默认网关发往路由器A,从而实现主机与外部网络的通信
该组网缺点:当路由器A坏掉时,本网段内通过以RA为默认网关下一跳的主机将断掉与外界的通信,产生单点故障
VRRP组网 e.g:
RA:Master 活动路由器 10.100.10.2
RB:Backup 备份路由器 10.100.10.3
VRIP : 虚拟路由器IP 10.100.10.1
VRRP将局域网中的一组路由器【 RA和RB】组成一个虚拟路由器------>>>备份组
虚拟路由器拥有自己的IP地址 10.100.10.1
局域网内的主机仅知道虚拟路由器IP地址为10.100.10.1,不知道具体的Master与Backup路由器IP
局域网内的主机将默认网关下一跳的地址设置为该虚拟路由器IP地址,通过该地址与其他网络进行通信
该组网优点:当备份组内的Master路由器DOWN掉,会进行选举策略选出一个新的Master路由器,继续往网络内的主机提供路由服务,从而实现网络内的主机不间断地与外部网络进行通信
❉ VRRP 协议
VRRP:解决局域网中配置静态网关出现单点失效的路由协议
设计目标:网络发生故障时透明地进行设备切换而不影响主机间的数据通信
❉ VRRP 工作原理
VRRP协议将两台或多台路由器设备虚拟成一个虚拟路由器,对外提供虚拟路由器IP(一个或多个);
而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER, 或者是通 过算法选举产生;
MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;
其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外 的网络功能。
当主机失效时,BACKUP将接管原先MASTER的网络功能。
❀ 如何判定多个路由器在同一组虚拟路由器中?
VRID:每个虚拟路由器都有一个唯一标识(VRID是一个0~255的正整数)
配置VRRP协议时需要配置每个路由器的虚拟路由器ID(VRID)和优先权值,
使用VRID将路由器进行分组,具有相同VRID值的路由器为同一个组
❀ BACKUP 为什么没有发生抢占?
VRRP通告:它使用IP多播数据包进行封装,组地址为224.0.0.18,发布范围只限于同一局域网内
在一个虚拟路由器中,只有处于MASTER角色的路由器会一直发送VRRP通告信息;
处于BACKUP状态的路由器只接收MASTER发过来的报文信息,用来监控MASTER运行状态, 除非它的优先级比MASTER更高
❀ 什么时候发生选举?
当MASTER不可用时,BACKUP无法收到MASTER发过来的报文信息;
认定MASTER出现故障,然后多台BACKUP就开始进行选举;
❀ Master选举
虚拟路由器IP=路由器本身配置IP
该路由器始终将是MASTER;IP地址所有者自动具有最高优先级:255
优先级选举主控路由器(优先级范围是0—255)
优先级0一般用在IP地址所有者主动放弃主控者角色时使用。可配置的优先级范围为1—254
优先级相等,则比较路由器的实际IP,IP值较大的优先权高
❉ VRRP 应用实例
1 +-----------+ +-----------+ 2 | Rtr1 | | Rtr2 | 3 |(MR VRID=1)| |(BR VRID=1)| 4 |(BR VRID=2)| |(MR VRID=2)| 5 VRID=1 +-----------+ +-----------+ VRID=2 6 IP A ---------->* *<---------- IP B 7 | | 8 | | 9 ------------------+------------+-----+--------+--------+--------+-- 10 ^ ^ ^ ^ 11 | | | | 12 (IP A) (IP A) (IP B) (IP B) 13 | | | | 14 +--+--+ +--+--+ +--+--+ +--+--+ 15 | H1 | | H2 | | H3 | | H4 | 16 +-----+ +-----+ +--+--+ +--+--+ 17 Legend: 18 ---+---+---+-- = Ethernet, Token Ring, or FDDI 19 H = Host computer 20 MR = Master Router 21 BR = Backup Router 22 * = IP Address 23 (IP) = default router for hosts
-------------------------------------------------------------------------------------------------------------
+ VRID 1 | Rtr1(Master) | Rtr2(Backup) + 正常情况下 H1与H2走R1;反之 走R2
-------------------------------------------------------------------------------------------------------------
+ VRID 2 | Rtr1(Backup) | Rtr2 (Master) + 正常情况下 H3与H4走R2;反之 走R1
------------------------------------------------------------------------------------------------------------
Keepalived 工作原理
根据TCP/IP参考模型各层所能实现的功能,Keepalived运行机制如下:
网络层
协议: IP(Internet Protocol网际协议)
ARP(Address Resolution Protoco 地址转换协议)
RARP(Reverse Address Resolution Protocol 反向地址转换协议 )
ICMP(Internet Control Message Protocol 网络控制报文协议)
常用:通过ICMP协议向服务器集群中的每个节点发送一个ICMP的数据包(类似ping实现)
如果某个节点没有返回响应数据包,那么认为此节点发生了故障
keepalived将报告该节点失效,并从服务器集群中剔除故障节点
传输层
协议: TCP (传输控制协议)(三次握手、安全可靠)
UDP (用户数据协议)
------------------------------------------------------------------------------------
TCP提供可靠的数据传输服务、IP地址和端口,代表TCP的一个连接端
获取TCP服务,需要在发送机的一个端口上和接收机上一个端口上建立连接
-------------------------------------------------------------------------------------
常用:利用TCP协议的端口连接和扫描技术来判断集群节点是否正常
e.g: SSH服务默认22端口,WEB服务器80端口····Keepalived在传输层探测某端口没有响应数据
判定端口异常,强制将此端口对应的节点从服务器及群组中移除
应用层
协议:FTP、TELNET、SMTP、DNS ····
-----------------------------------------------------------------------
用户可以通过自定义Keepalived的工作方式
-----------------------------------------------------------------------
e.g:用户编辑程序运行Keepalived,而Keepalived 根据用户设定检测各种程序或服务是否允许正常
❉ keepalived 结构体系

图片来源:http://www.keepalived.org/documentation.html
keepalived 安装
**实验需求:**
- 安装keepalived(仅安装)
**实验实现:**
-
服务器:CentOS 6.5-minimal
-
软 件:Keepalived ( V_1.2.19 )
**安装过程:**
>>>下载安装包并解压,查看相关参数
1[root@lucia tmp]# wget http://www.keepalived.org/software/keepalived-1.2.19.tar.gz # 下载Keepalived安装包 2[root@lucia tmp]# tar -zxf keepalived-1.2.19.tar.gz #解压安装包 3[root@lucia tmp]# cd keepalived-1.2.19 4[root@lucia keepalived-1.2.19]# ./configure --help #查看confiure编译参数 5 6#================================================ 7# 指定安装在/etc/ {--sysconfdir=/etc} 8# 指定使用内核源码中的头文件 {--with-kernel-dir} 9# 注:使用LVS时,需要用到"--with-kernel-dir" 10#===============================================
>>>编译安装
1[root@lucia keepalived-1.2.19]# [ -z /usr/src/kernels/ ] && yum -y install kernel-headers kernel-devel || echo "The kernel file already exists" 2The kernel file already exists 3 4#=========================== 5# 判断kernels目录是否存在文件 6#=========================== 7 8[root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64 9 10#============================================================================ 11# ./configure 对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系 12#============================================================================ 13 14configure: error: in `/tmp/keepalived-1.2.19': 15configure: error: no acceptable C compiler found in $PATH 16See `config.log' for more details 17 18#============================================================================ 19# 报错:gcc编译器没有安装 20# [root@lucia keepalived-1.2.19]# yum -y install gcc 21#============================================================================= 22 23继续返回上一步预安装./configure 24[root@lucia keepalived-1.2.19]# ./configure --sysconfdir=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.32-573.12.1.el6.x86_64 25 26configure: error: 27!!! OpenSSL is not properly installed on your system. !!! 28!!! Can not include OpenSSL headers files. !!! 29 30#========================================================================= 31# 报错:OpenSSL 没有安装 32# [root@lucia keepalived-1.2.19]# yum -y install openssl* 33#========================================================================= 34 35./configure 成功后,显示是Keepalived 输出的加载模块信息 36 37Keepalived configuration 38------------------------ 39Keepalived version : 1.2.19 40Compiler : gcc 41Compiler flags : -g -O2 42Extra Lib : -lssl -lcrypto -lcrypt 43Use IPVS Framework : Yes 44IPVS sync daemon support : Yes 45IPVS use libnl : No 46fwmark socket support : Yes 47Use VRRP Framework : Yes 48Use VRRP VMAC : Yes 49SNMP support : No 50SHA1 support : No 51Use Debug flags : No 52 53[root@lucia keepalived-1.2.19]# make && make install #编译&&安装 54[root@lucia keepalived-1.2.19]# ln -s /usr/local/sbin/keepalived /sbin/ #软链接到系统使用的管理程序目录中 55[root@lucia keepalived-1.2.19]# chkconfig --add keepalived #添加到系统服务 56[root@lucia keepalived-1.2.19]# chkconfig --level 35 keepalived on #添加到开机启动
❉ Keepalived 配置详解
1[root@lucia keepalived-1.2.19]# cd /etc/keepalived/ 2[root@lucia keepalived-1.2.19]# ls 3keepalived.conf samples 4 5# ================================================================ 6# Keepalived 配置文件路径为/etc/keepalived/keepalived.conf 7# samples 目录下存放着keepalived配置的示例 8# ================================================================ 9 10#============================================================ 11# keepalived.conf 配置 12#------------------------------------------------------------ 13# 1、Keepalived 配置文件以block形式组织,每个块内容都包含在{} 14# 2、“#” “!” 开头行为注释 15# 3、keepalived 配置为三类: 16# 全局配置:对整个keepalived都生效的配置 17# VRRPD 配置:核心配置,主要实现keepalived高可用功能 18# LVS配置 19#============================================================ 20 21 22! Configuration File for keepalived 23 24 25######################## 26# 全局配置 27######################## 28 29 30global_defs { # global_defs 全局配置标识 31 ------------------------------------------ 32 notification_email { # notification_email用于设置报警邮件地址 33 acassen@firewall.loc # 可以设置多个,每行一个 34 failover@firewall.loc # 设置邮件报警,需开启本机Sendmail 服务 35 sysadmin@firewall.loc # yum -y install mailx sendmail 36 } ---------------------------------------------- 37 38 notification_email_from Alexandre.Cassen@firewall.loc # 设置邮件发送地址 39 smtp_server 192.168.200.1 # 设置邮件的smtp server地址 40 smtp_connect_timeout 30 # 设置连接smtp sever超时时间 41 router_id LVS_DEVEL # 表示运行keepalived服务器标识,发邮件时显示在邮件主题中的信息 42} 43 44###################### 45# VRRPD配置 46###################### 47 48vrrp_instance VI_1 { # VRRPD 配置标识 VI_1是实例名称 49 50 state MASTER # 指定Keepalvied角色 MASTER表示此主机为主服务器 BACKUP则是表示为备用服务器 51 interface eth0 # 指定 HA 监测网络的接口 52 virtual_router_id 51 # 虚拟路由标识,标识为数字,同一个VRRP实例使用唯一的标识,即可表示在同一个vrrp_instance下 MASTER_ID = BACKUP_ID 53 priority 100 # 定义节点优先级,数字越大表示节点的优先级越高,同一个VRRP_instance下,MASTE_PRIORITY > BACKUP_PRIORITY 54 advert_int 1 # 设定MASTER与BACKUP主机质检同步检查的时间间隔,单位为秒 55 56 authentication { # 设定节点间通信验证类型和密码,验证类型主要有PASS和AH两种 57 auth_type PASS # 同一个vrrp_instance,MASTER验证密码和BACKUP保持一致 58 auth_pass 1111 59 } 60 61 virtual_ipaddress { # 设置虚拟IP地址 (VIP),又叫做漂移IP地址 62 192.168.200.16 63 192.168.200.17 64 192.168.200.18 65 } 66 67#------------------------------------------------------------------------------- 68# 问:为什么叫漂移IP地址? 69# 答:当Keepalived切换到MASTER状态时,IP地址会自动添加到系统中 70# 当Keepalvied切换到BACKUP状态时,IP地址将自动从系统中删除 71# 72# keepalived通过“ip address add”命令的形式将VIP添加到系统 73# 通过“ip add”查看系统中添加的VIP地址 74#-------------------------------------------------------------------------------- 75 76} 77 78###################### 79# LVS配置 80###################### 81 82 83virtual_server 192.168.200.100 443 { # virtual_server LVS配置标识 84 # 格式:virtual_server VIP port [IP 和 port 之间空格隔开] 85 86 delay_loop 6 # 设置健康检查时间间隔,单位为秒 87 lb_algo rr # 设置负载调度算法,可用的调度算法有:rr、wlc、lc、lblc、sh、dh等 88 lb_kind NAT # 设置LVS实现负载均衡的机制,有NAT、TUN和DR三种模式可选 89 nat_mask 255.255.255.0 # NAT子网掩码 90 persistence_timeout 50 # 会话保持时间 91 protocol TCP # 指定转发协议类型 92#---------------------------------------------------------------------------------------------------- 93# persistence_timeout 会话保持时间对动态网页非常有用,为集群系统中的seesion共享提供了一个很好的解决方案 94# 用户的请求会一直分发到某个服务节点,直至超过这个会话的保持时间(指最大无响应超时时间) 95# =[用户操作动态页面如果在50s没有执行任何操作则被分发到另外的节点] 96#---------------------------------------------------------------------------------------------------- 97 98 real_server 192.168.201.100 443 { # 设置real server段开始的标识 [ IP为真实IP地址] 99 # 格式:real_server realIP port [IP 和 port 之间空格隔开] 100 ----------------------------------------------------------------- 101 weight 1 # 用于配置real server节点的权值,权值大小用数字表示,数字越大,权值越高 102 # 设置权值大小可以为不同性能的服务器分配不同的负载 103 ------------------------------------------------------------------ 104 105 SSL_GET { # 健康检查 SSL_GET 106 url { # 指定SSL检查的URL信息,可以指定多个 107 path /index.html # 后跟详细的URL路径 108 digest ff20ad2481f97b1754ef3e12ecd3a9cc # SSL检查后的摘要信息,可以通过genhash命令工具获取 109#----------------------------------------------------------------- 110# [root@lucia keepalived]# genhash -s 192.168.201.100 -p 80 -u /index.html 111#----------------------------------------------------------------- 112 } 113 url { 114 path /mrtg/ 115 digest 9b3a0c85a887a256d6939da88aabd8cd 116 } 117 connect_timeout 3 # 表示无响应超时时间,单位为秒 118 nb_get_retry 3 # 表示重试次数 119 delay_before_retry 3 # 表示充实间隔 120 } 121 } 122} 123 124virtual_server 10.10.10.2 1358 { 125 delay_loop 6 126 lb_algo rr 127 lb_kind NAT 128 persistence_timeout 50 129 protocol TCP 130 131 sorry_server 192.168.200.200 1358 # 备份节点,在所有real serer失效后,启用备份节点 132}
#---------------------------------------------------------------------------------------------------------------#
VRRP原理参考文档如下:
http://bbs.nanjimao.com/thread-790-1-1.html (此篇写的很好)
http://blog.chinaunix.net/uid-26575352-id-3529109.html
keepalived.conf 参考书籍 《高性能Linux服务器构建实战》
本人高度近视,文档手打会出现个别字符错误,请指出
关于VRRP原理 部分为自己理解所拼凑,逻辑出现问题请指出
Lucia 2016/01
#----------------------------------------------------------------------------------------------------------------#