0.Keepalived服务介绍
Keepalived起初是专为LVS设计的,专门用来监控LVS集群系统中各个服务节点的状态,后来又加入了VRRP的功能,因此除了配合LVS服务外,也可以作为其他服务(nginx,haproxy)的高可用软件,VRRP是Virtual Router Redundancy Protoco1(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由出现的单点故障问题,它能够保证网络的不间断、稳定的运行。所以,keepalived一方面具有LVS cluster nodes healthchecks功能,另一方面也具有LVS directors failover功能。
Keepalived服务两大用途:healthchecks和failover
- LVS directors failover功能
ha failover功能:实现LB master主机和Backup主机之间故障转移和自动切换。
这是针对有两个负载均衡器Director同时工作而采取的故障转移措施。当主负载均衡器(MASTER)失效或出现故障时,备份负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作(VIP资源及相应服务);一旦主负载均衡器(MASTER)故障修复,MASTER又会接管回它原来处理的工作,而备份负载均衡器(BACKUP)会释放master失效时它接管的工作,此时两者将恢复到最初各自的角色状态。
- LVS cluster nodes healthchecks功能
rs healthcheck功能:负载均衡定期检查Rs的可用性决定是否给其分发请求。当虚拟服务器中的某一个甚至是几个真实服务器同时发生故障无法提供服务时,负载均衡器会自动将失效的RS服务器从转发队列中清除出去,从而保证用户的访问不受影响;当故障的RS服务器被修复以后,系统又会自动地把它们加入转发队列,分发请求提供正常服务。
- Keepalived故障切换转移原理介绍、
keepalived高可用对之间是通过VRRP协议通信的,VRRP协议是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会获得所有的资源,备节点处于等待状态,当主挂了时候,备节点,接管主节点的资源,然后顶替主节点对外提供服务。
VRRP协议是通过IP多播包的方式(224.0.0.18)发送的。
在keepalived之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度可以小于1秒。VRRP使用加密协议加密发送广播包。
那么,什么是VRRP协议呢?
- VRRP协议简单介绍
VRRP是Virtual Router Redundancy Protoco1(虚拟路由器冗余协议)的缩写,VRRP协议的出现就是为了解决静态路由的单点故障,VRRP协议是通过一种竞选协议机制来将路有任务交给某台VRRP路由器
MASTER and BACKUP
在一个VRRP虚拟路由器中,有多台物理的VRRP路由器.但是这多台物理的机器并不同时工作,而是由一台称为MASTER的负责路由工作,其他的都是BACKUP,MASTER并非一成不变,VRRP协议让每个VRRP路由器参与竞选.最终获胜的就是MASTER。MASTER有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器由VRID(范围0-255)和一组IP地址组成.对外表现为一个周知的MAC地址:00-00-5E-00-01-{VRID}。所以,在一个虚拟路由器中不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP),客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这种主从的切换是透明的。
在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占是非常快速的(<ls),以保证服务的连续性。
出于安全性考虑,VRRP包使用了加密协议进行加密。
- 小结:keepalived工作原理:
- VRRP协议,全称Virtual Router Redulldancy Protocol,中文名,虚拟路由器冗余协议,VRRP的出现就是为了解决静态路由的单点故障。
- VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器。
- VRRP是用过IP多播的方式实现通信。、
- 主发包,备接包,当备接不到主发的包的时候,就启动接管程序接管主的资源。备可以有多个,通过优先级竞选。
- VRRP使用了加密协议。
Keepalived工作原理,
keepalived高可用对之间是通过VRRP协议通信的,VRRP协议是通过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会获得所有的资源,备节点处于等待状态,当主挂了时候,备节点,接管主节点的资源,然后顶替主节点对外提供服务。
VRRP协议是通过IP多播包的方式(224.0.0.18)发送的。、
在keepalived之间,只有作为主的服务器会一直发送VRRP广播包,告诉备他还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性。接管速度可以小于1秒。VRRP使用加密协议加密发送广播包。
- 安装Keepalived实现服务高可用功能
keepalived官方网站:http://www.keepalived.org/
官方文档是:http://www.keepalived.org/documentation.html
注意:在两台nginx反向代理服务器上同时操作
yum install openssl-devel popt-devel -y
cd /server/tools
wget http://www.keepalived.org/software/keepalived-1.2.16.tar.gz
ln -s /usr/src/kernels/2.6.32-504.el6.x86_64/ /usr/src/linux
#也可以不执行,此步是配合lvs使用
提示:读者安装时,有可能会没有/usr/src/kernels/2.6.32-504.el6.x86_64。这是因为缺少kernel-devel软件包,此时需要提前通过yum install kernel-devel -y命令来安装。
tar zxvf keepalived-1.2.16.tar.gz
cd keepalived-1.2.16
./configure
yum install openssl-devel -y
./configure
make
make install
- 配置规范启动
/bin/cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/ #生成启动脚本
/bin/cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/ #配置启动脚本参数
mkdir /etc/keepalived #创建默认的keepalived配置文件路径
/bin/cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/ #生成keepalived配置模板
/bin/cp /usr/local/sbin/keepalived /usr/sbin/
/etc/init.d/keepalived start
/etc/init.d/keepalived stop
man keepalived 查看帮助
- 配置文件说明
[root@lb2 keepalived]# cat keepalived.conf
global_defs { #全局配置,此处可以不配置
notification_email {
sysadmin@firewall.loc #收件人
}
notification_email_from Alexandre.Cassen@firewall.loc #发件人
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL #相当于mysql的server_id,需要唯一
}
vrrp_instance VI_1 { #定义vrrp实例
state MASTER
interface eth0 #LVS监控的网络接口
virtual_router_id 51 #同一实例下virtual_router_id必须相同
priority 150
advert_int 1 #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
authentication { #验证类型和密码
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.10/24 #VIP,如果有多个,往下加就行了
}
}
注意:黑体部分是backup服务器需要修改的
/etc/init.d/keepalived start #启动服务,ip addr查看主备两边只有一个虚拟IP存在
ip addr add 192.168.80.10/24 dev eth0 #配置虚拟IP,不能使用ifconfig配置,此步不需要执行,启动服务会自动添加
- keepalived+nginx企业案例
- nginx反向代理停掉及企业解决方案
keepalived只实现服务器级别的接管,nginx宕机不会接管,当nginx反向代理停掉后,应该停掉keepalived,可以写脚本实时监控nginx反向代理
[root@lb2 scripts]# vi check_web.sh
#!/bin/bash
while true
do
if [ `ps -ef|grep nginx|grep -v grep|wc -l` -lt 2 ]
then
/etc/init.d/keepalived stop && exit 1
fi
sleep 5
done
两台keepalived后台执行此脚本
[root@lb2 scripts]# sh check_web.sh &
- keepalived高可用裂脑问题解决
开发脚本检测裂脑
思路:可以ping通主节点,备节点有VIP就认为裂脑。
[root@nginx scripts]# vi check_split_brain.sh
#!/bin/bash
while true
do
ping -c 2 -w 3 192.168.80.101 &>/dev/null
if [ $? -eq 0 -a `ip addr|grep 192.168.80.10|wc -l` -eq 1 ]
then
echo “ha is split brain.warning”
else
echo “ha is ok”
fi
sleep 5
done
待测试
- keepalived日志配置
keepalived日志默认为系统日志/var/log/messages
配置指定文件接收keepalived服务日志
[root@lb2 ~]# vi /etc/sysconfig/keepalived #修改最后一行
KEEPALIVED_OPTIONS=”-D -S 0 -d”
[root@lb2 ~]# vi /etc/rsyslog.conf #在最后一行添加
local0.* /var/log/keepalived.log
[root@lb2 ~]# /etc/init.d/rsyslog restart #重启rsyslog
[root@lb2 ~]# /etc/init.d/keepalived restart #重启keepalived
[root@lb2 ~]# tail /var/log/keepalived.log #查看日志
- keepalived高可用多实例
编辑keepalived.conf配置文件,再添加一个vrrp_instance VI_2模块
vrrp_instance VI_2 {
state MASTER
interface eth0
virtual_router_id 52
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.11/24
}
}
仅仅修改以上黑体部分,注意:可以让两台keepalived做不同实例的主,同一实例不能做双主
- 对Nginx反向代理后端Web服务器的健康检查
功能描述
通过html页面,实时观测nginx负载均衡后端每台Web服务器及其Web服务的状态变化。html页面初始时,列出配置文件中管理池内所有服务器当前的“类型”、“主机名”及“状态”。当有Web服务器断开或Web服务处于非启动状态时,脚本将自动把服务器从配置文件中的管理池内剔除,同时更新html页面的“状态”字段为“Bad”字样,更新“类型“字段为“Unknow”字样;当有Web服务器的Web服务恢复启动状态时,脚本将自动把服务器加回配置文件中的管理池内,同时更新html页面“状态“字段为“Good”字样,更新“类型”字段为真实服务器类型。