1、安装nginx(省略)
2、安装keepalived(ubuntu 18.04.3)
#安装依赖包
sudo apt-get install libssl-dev openssl libpopt-dev
#安装keepalived
sudo apt-get install keepalived
3、配置文件(keepalived主)
vim /etc/keepalived/keepalived.conf #默认不存在
global_defs {
router_id 192.168.1.10 #随便写,与备机不一样
}
vrrp_script check_nginx
{
script "/opt/check_nginx.sh" #定义检测nginx状态的脚本位置
interval 1 #每秒检查一次
fall 1 #失败一次则认为nginx挂掉
}
vrrp_instance VI_1 {
state MASTER #角色为主,如果设置了nopreempt,这个值无用,主要看优先级的大小
interface eth0 #监听的网卡(用ifconfig可以查)
virtual_router_id 2 #VRRP的ID,如果系统中该ID被占用会导致没有VIP,需要更改,范围0~255
priority 100 #优先级,越大优先级越高
advert_int 1 #检查间隔,默认1秒
authentication { #设置认证
auth_type PASS #认证方式
auth_pass moresec@seckey #认证密码
}
virtual_ipaddress {
192.168.1.30/24 #设置VIP,可以带子网掩码,不带的话默认为32为子网掩码
}
track_script { #捕获脚本
check_nginx
}
notify_master { #通告主脚本
check_nginx
}
notify_backup { #通告备脚本
check_nginx
}
}
#启动服务
systemctl start keepalived
4、配置文件(keepalived备)
vim /etc/keepalived/keepalived.conf #默认不存在
global_defs {
router_id 192.168.1.20 #随便写,与Master不一样
}
vrrp_script check_nginx
{
script "/opt/check_nginx.sh" #定义检测nginx状态的脚本位置
interval 1 #每秒检查一次
fall 1 #失败一次则认为nginx挂掉
}
vrrp_instance VI_1 {
state BACKUP #角色为备,如果设置了nopreempt,这个值无用,主要看优先级的大小
interface eth0 #监听的网卡(用ifconfig可以查)
virtual_router_id 2 #VRRP的ID,主备必须一致,如果系统中该ID被占用会导致没有VIP,需要更改,范围0~255
priority 90 #优先级,越大优先级越高
advert_int 1 #检查间隔,默认1秒
authentication { #设置认证
auth_type PASS #认证方式
auth_pass moresec@seckey #认证密码,必须一直
}
virtual_ipaddress {
192.168.1.30/24 #设置VIP,可以带子网掩码,不带的话默认为32为子网掩码
}
track_script { #捕获脚本
check_nginx
}
notify_master { #通告主脚本
check_nginx
}
notify_backup { #通告备脚本
check_nginx
}
}
#启动服务
systemctl start keepalived
5、nginx检测脚本
vim /opt/check_nginx.sh
#!/bin/bash
# 时间变量 用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
# 计算Nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
# 如果进程为0,则启动Nginx,并且再次检测进程数量
# 如果还为0,说明Nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
/etc/init.d/nginx start
n2=`ps -C nginx --no-heading|wc -l`
if [ $n2 -eq "0" ];then
echo "$d nginx down,keepalived will stop">> /var/log/check_ng.log
systemctl stop keepalived
fi
fi
chmod 777 /opt/check_nginx.sh
6、检测
在主服务器上ip a s查看是否多了一个虚拟IP
主服务器上停止nginx,查看nginx是否会自动起来
主服务器停止keepalived,查看VIP是否漂移到从服务器
主服务器启动keepalived,查看VIP是否被抢占过来