keepalived

keepalived是什么

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障


那么什么是高可用呢

计算机系统的可用性用平均无故障时间(MTTF)来度量,即计算机系统平均能够正常运行多长时间,才发生一次故障。系统的可用性越高,平均无故障时间越长。

负载均衡服务器的高可用性

为了屏蔽负载均衡服务器的失效,需要建立一个备份机。主服务器和备份机上 都运行High Availability监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供服务;当备份管理器又 从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主管理器就开始再次进行集群管理的工作了。为在主服务器失效的情况下系统能正常工作,我们在主、备份机之间实现负载集群系统配置信息的同步与备份,保持二者系统的基本一致。

keepalived工作原理

keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议

虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个 backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当 backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

工作原理

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是第3层、第4层和第5层交换,分别工作在IP/TCP协议栈的IP层、TCP层、应用层,原理分别如下: Layer3: Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器发送一个ICMP的数据包(既Ping),如果发 现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除(这种情况的典型例子是某台服务器被非法关机)。 Layer3方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。 Layer4: Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。 Layer5: Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器相应服务是否运行正常,如果没有正常运行,则Keepalived将把服务器从服务器群中剔除。


Keepalived主从切换

主从切换比较麻烦,需要将backup配置文件的priority选项的值调整的比master高50个点,然后reload配置文件就可以切换了。也可以将master的keepalived停止,这样也可以进行主从切换。
更多的是让keepalived根据VRRP协议自动切换不手动切换。



基于LVS博客做的此实验


先关掉ldirectord以免冲突,并设置开机不启动


在安装keepalived前,先解决依赖性

yum install -y libnfnetlink-devel-1.0.0-1.el6.x86_64.rpm
yum install -y openssl-devel libnl-devel iptables-devel

[root@server1 ~]# tar zxf keepalived-1.4.0.tar.gz  解压


[root@server1 keepalived-1.4.0]# ./configure --prefix=/usr/local/keepalived/ --with-init=SYSV  编译

编译完成,会生成makefile




make 编译
make install 安装

做软连接

[root@server1 keepalived-1.4.0]# ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
[root@server1 keepalived-1.4.0]# ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@server1 keepalived-1.4.0]# ln -s /usr/local/keepalived/etc/keepalived /etc/
[root@server1 keepalived-1.4.0]# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin

加执行权限


[root@server1 keepalived]# /etc/init.d/keepalived start  开启服务

修改配置文件






[root@server1 keepalived]# /etc/init.d/keepalived reload   重新加载

打开server2,3的http服务



客户端测试



当关掉server2的http服务时,客户访问时会出现问题



下面做高可用
当主调度器故障,备用调度器启动


在开启一台server4 做备机,配置与server1一致

[root@server4 yum.repos.d]# vim rhel-source.repo  先配置yum源

在将1上的keepalived移动到4上,保持一样的配置

做软连接,加执行权限


修改配置文件

[root@server4 keepalived]# cd /etc/keepalived/
[root@server4 keepalived]# ls
keepalived.conf  keepalived.conf.bak  samples
[root@server4 keepalived]# vim keepalived.conf

修改 state 和 优先级



[root@server4 keepalived]# /etc/init.d/keepalived start  开启服务

[root@server4 keepalived]# yum install -y ipvsadm   安装

查看



[root@server1 local]# /etc/init.d/keepalived stop        #模拟server1挂掉


客户端测试,如下依旧不影响客户的访问



通过arp -an | grep 100

对比mac 地址来源,可知来自server4,实现了高可用