通过访问keepalived虚拟ip实现nginx双机热备,防止服务器单点故障
架构图
CentOS 7 + keepalived1.2.18 + nginx1.16.0
nginx安装
keepalived官网安装文档
keepalived安装
点击下载官网安装文件
这里使用的版本是1.2.18 点击下载
首先安装keepalived需要的依赖
yum install curl gcc openssl-devel libnl3-devel net-snmp-devel
解压压缩文件
tar -zxvf keepalived-1.2.18.tar.gz
创建安装目录
mkdir /usr/local/keepalived
指定路径安装
cd keepalived-1.2.18
./configure --prefix=/usr/local/keepalived
安装
make && make install
keepalived的默认路径安装(默认是/usr/local),安装完成之后,复制默认配置文件到默认路径
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/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置keepalived开机启动
chkconfig keepalived on
添加主机IP映射文本最后一行添加127.0.0.1 keep201
vi /etc/hosts
配置主节点
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id keep201
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 200
mcast_src_ip 192.168.241.201
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.241.200
}
}
创建nginx检测脚本(nginx_check.sh)
vi /etc/keepalived/nginx_check.sh
添加如下内容
#!/bin/bash
CHECK_NGINX=`ps -C nginx -no-header | wc -1`
if [ $ CHECK_NGINX -eq 0 ];then
/usr/local/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx –no-header |wc -1` -eq 0];then
service keepalived stop
fi
fi
启动keepalived
service keepalived start
备机安装与主机类似
配置备节点
! Configuration File for keepalived
global_defs {
router_id keep202
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 200
mcast_src_ip 192.168.241.202
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.241.200
}
}
配置说明,详细配置请查看官方文档
! Configuration File for keepalived
global_defs {
router_id keep201
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh" #检测nginx状态的脚本路径
interval 2 #检测时间间隔,单位为秒
weight -20 #条件成力,权重-20,根据配置priority对应的值
}
vrrp_instance VI_1 { #VI_1为虚拟路由的标识符
state MASTER #主节点为MASTER,对应的备份节点为BACKUP
interface ens32 #虚拟IP的网络接口,与本机IP地址所在的网络接口相同
virtual_router_id 200 #虚拟路由的ID号,两个节点必须一致,相同的VRID为一个组,它将决定多播的MAC地址
mcast_src_ip 192.168.241.201 #本机IP地址
priority 100 #节点优先级,值f范围0-254,MASTER要比BACKUP高
nopreempt
advert_int 1 #组播信息发送间隔,两个节点必须一致,单位为秒
authentication { #设置验证信息,两个节点必须一致
auth_type PASS
auth_pass 1111
}
track_script { #将track_script块加入instance配置块
chk_nginx #执行nginx监控的服务
}
virtual_ipaddress { #虚拟IP池,可多个,两个节点设置必须一样
192.168.241.200 #虚拟IP
}
}