1 什么是Keepalived
Keepalived的作用是检测服务器的状态,如果有一台服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其它服务器代替该服务器的工作,当服务器工作 正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
2 Keepalived的工作原理
keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。将N台提供相同功能的服务器组成一个服务器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该服务器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由/网关为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
3 Keepalived的安装
1.安装keepalived需要的扩展
yum install gcc gcc-c++ openssl openssl-devel
wget -q https://www.keepalived.org/software/keepalived-1.2.18.tar.gz
2.解压keepalived并安装
tar -zxvf keepalived-1.2.18.tar.gz
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
make && make install
3.keepalived安装成Linux系统服务
mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/
chkconfig keepalived on
4 keepalived配置文件master配置
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight 2 ## 如果条件成立,权重+2
}
vrrp_instance VI_1 {
state MASTER ##主
interface eno16777736 ##网卡,/etc/sysconfig/network-scripts/
virtual_router_id 79
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.35.200 ##虚拟ip
}
track_script {
chk_nginx ##对应vrrp_script
}
}
5 keepalived配置文件slave配置
! Configuration File for keepalived
global_defs {
router_id LVS_MASTER
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx.sh" ## 检测 nginx 状态的脚本路径
interval 2 ## 检测时间间隔
weight 2 ## 如果条件成立,权重+2
}
vrrp_instance VI_1 {
state BACKUP ##从
interface eno16777736 ##网卡,/etc/sysconfig/network-scripts/
virtual_router_id 79
priority 90 ##权重较低
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.35.200 ##虚拟ip
}
track_script {
chk_nginx ##对应vrrp_script
}
}
注:主要关闭防火墙 systemctl stop firewalld,要不然主从之间无法通讯,两端都会有虚拟IP。
配置完成后,启动keepalived(主、从都要启动)
service keepalived start
#查看虚拟ip是否存在,成功则主服务器存在虚拟ip
ip a
6 nginx状态检测脚本nginx.sh(注意权限!)
完成以上配置后,主备服务器能够实现ip漂移,但是我们需要的功能实际是keepalived检测nginx负载均衡服务,一旦nginx负载均衡服务宕机,keepalived需要尝试去启动nginx,否则停止keepalived,让ip漂移到备用机上。
#! /bin/bash
START_NGINX="service nginx start"
LOG_FILE="/usr/local/nginx/logs/nginx_upstreams.log"
HAPS=`ps -C nginx --no-header |wc -l`
date "+%Y-%m-%d %H:%M:%S" >> $LOG_FILE
echo "check nginx status" >> $LOG_FILE
#判断nginx是否启动,启动退出,未启动启动
if [ $HAPS -eq 0 ];then
echo $START_HAPROXY >> $LOG_FILE
#需要配置service nginx命令
service nginx start
sleep 3
#判断nginx是否启动成功,未启动成功,停止当前机器上的keepalived
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
echo "start nginx failed, killall keepalived" >> $LOG_FILE
#pkill貌似不可以消除虚拟ip
killall keepalived
service keepalived stop
fi
fi
网友评论