1、两台主机都需要安装nginx+keepalived
2、安装nginx,参考nginx安装文档:
两台主机安装nginx并启动,监听相应端口。
3、keepalived安装
(1)安装依赖,如果没有yum源,自行下载依赖包安装。
yum -y install openssl-devel ipvsadm popt-devel make
(2)解压安装软件包,需root用户安装
tar -zxvf keepalived-2.3.2.tar.gz
cd keepalived-2.3.2
./configure --prefix=/data/keepalived
make
makeinstall
(3)建立软链接,便于系统管理
ln -s /data/keepalived/sbin/keepalived /sbin/
ln -s /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
mkdir /etc/keepalived
ln -s /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
(4)编辑主备配置文件
vi /data/keepalived/etc/keepalived/keepalived.conf
global_defs
{
script_user sellion # 检测脚本运行的用户
enable_script_security
}
vrrp_script check_nginx {
script "/data/keepalived/etc/keepalived/script/chk_nginx_pid.sh" # 检测本机nginx进程是否开启
interval 5 #检测间隔5秒
fall 2 # 检测两次失败将实例定义为故障,移除vip
rise 1 # 检测一次成功后将状态改为正常(设置不抢占后不会抢占vip)
#weight 10
}
vrrp_instance NGINX {
state BACKUP #主节点为MASTER,备节点BACKUP
interface bond1 #需要绑定的网卡,通常该主机的通信网卡
virtual_router_id 42 # 同一个网络不能和其它vip重复,同一组vip必须相同,可自定义数值
priority 90 #数值越大优先级越高,
#nopreempt # 设置不抢占模式
advert_int 1
authentication {
auth_type PASS #通过密码授权
auth_pass sellion
}
track_script {
check_nginx
}
virtual_ipaddress {
1.1.1.1 #VIP
}
}
(5)编辑chk_nginx_pid.sh脚本文件
vi /data/keepalived/etc/keepalived/scirpt/chk_nginx_pid.sh
#!/bin/bash
#判断 Nginx 是否存活
countng=`ps -C nginx --no-header | wc -l`
if [ $countng -eq 0 ]; then
#如果不存活则尝试启动 Nginx
/data/nginx/sbin/nginx -c /data/nginx/conf/nginx.conf
sleep 3
#等待 3 秒后再次获取一次 Nginx 状态
counter=`ps -C nginx --no-header | wc -l`
#再次进行判断,如 Nginx 还不存活则停止 Keepalived,让地址进行漂移
if [ $counter -eq 0 ]; then
systemctl stop keepalived #停用keepalived服务
fi
fi
chmod +x /data/keepalived/chk_nginx_pid.sh
4、开启keepalived
systemctl start keepalived
5、验证高可用状态
(1)手动关闭任一台主机nginx进程,查看nginx进程会自动拉起
kill -9 <nginx_pid>
ps -ef | grep nginx
(2)修改check_nginx_pid.sh脚本,将脚本内启动nginx一行注释掉,再kiil掉nginx进程。
查看nginx状态(不会重新拉起),查看keepalived状态(本机状态关闭),查看VIP(切换到另一台主机)