一、部署Web,这里使用openresty
cd /usr/local/src/openresty
yum -y install pcre-devel openssl openssl-devel
yum install -y gcc gcc-c++ zlib-devel pcre-devel openssl-devel readline-devel
wget https://openresty.org/download/openresty-1.9.7.5.tar.gz
tar xzvf openresty-1.9.7.5.tar.gz
cd openresty-1.9.7.5
./configure --prefix=/opt/openresty --with-pcre --with-http_ssl_module --with-openssl --with-luajit
./configure --prefix=/data/openresty --with-luajit --with-http_iconv_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module
gmake && gmake install
二、配置nginx代理后端应用
省略
三、配置keepalived
yum install -y keepalived
配置keepalived
3.1、主nginx配置
more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #定义邮箱报警的邮箱地址
}
notification_email_from root@localhost #定义发送报警信息的地址
smtp_server 127.0.0.1 #定义发送邮件的邮件服务器地址
smtp_connect_timeout 30 #定义发送邮件的超时时间
router_id ha_nginx #全局标识
}
vrrp_script chk_nginx { #定义检查nginx服务的脚本
script "/etc/keepalived/chk_nginx.sh" #脚本重启nginx,如果进程还是无法检测到,则强制停止keepalived
interval 2 #检查的间隔时间
weight -2 #检查失败的话权重减2
fall 2 #检查失败2次才认为是真正的检查失败
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100 #备用机器的keepalived的权重要小于这个权重,并且当nginx服务挂掉后100-2要小于备用机器的权重。
advert_int 1
smtp_alert #比较重要 定义使用邮件发送,不然上面的邮件定义都是没有用的,使用了这个当状态发生改变就会发送邮件报警
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #定义使用哪个脚本来检查。
chk_nginx
}
virtual_ipaddress {
10.0.0.100/16
}
}
3.2、从nginx配置
more /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #定义邮箱报警的邮箱地址
}
notification_email_from root@localhost #定义发送报警信息的地址
smtp_server 127.0.0.1 #定义发送邮件的邮件服务器地址
smtp_connect_timeout 30 #定义发送邮件的超时时间
router_id ha_nginx #全局标识
}
vrrp_script chk_nginx { #定义检查nginx服务的脚本
script "/etc/keepalived/chk_nginx.sh" #脚本重启nginx,如果进程还是无法检测到,则强制停止keepalived
interval 2 #检查的间隔时间
weight -2 #检查失败的话权重减2
fall 2 #检查失败2次才认为是真正的检查失败
}
vrrp_instance VI_1 {
state BACKUP
interface eno16777736
virtual_router_id 51
priority 99 #备用机器的keepalived的权重要小于这个权重,并且当nginx服务挂掉后100-2要小于备用机器的权重。
advert_int 1
smtp_alert #比较重要 定义使用邮件发送,不然上面的邮件定义都是没有用的,使用了这个当状态发生改变就会发送邮件报警
authentication {
auth_type PASS
auth_pass 1111
}
track_script { #定义使用哪个脚本来检查。
chk_nginx
}
virtual_ipaddress {
10.0.0.100/16
}
}
需要授权644;不然会报错
chmod 644 /etc/keepalived/keepalived.conf
解决nginx进程和keepalived不同时存在问题
keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。
四、配置检测nginx进程脚本
more /etc/keepalived/chk_nginx.sh
#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l` ## 查看是否有 nginx进程 把值赋给变量A
if [ $A -eq 0 ];then ## 如果没有进程值得为 零
systemctl stop keepalived.service ## 则结束 keepalived 进程
fi
或者使用这个脚本(因为上面那个脚本不完善;没有自动启动nginx)
#!/bin/bash
A=`ps -C nginx --no-heading | wc -l`
if [ $A -eq 0 ];then
/home/www/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-heading | wc -l` -eq 0 ];then
killall keepalived
fi
fi
添加执行权限
chmod +x /etc/keepalived/nginx_check.sh
说明:
check_nginx.sh 要在/etc/keepalived目录下
脚本测试:
将nginx停止,将keepalived启动,执行脚本:sh /etc/keepalived/check_nginx.sh
会自动杀掉keepalived进程
一旦主节点恢复,则VIP会直接漂回去,因为我们配置的抢占模式
验证web
for i in {1..10};do curl -I http://10.0.0.100/index.html;done
五、配置supervisor守护keepalived
more /etc/supervisor/conf.d/keepalived.conf
[program:keepalived]
command=keepalived -n
stderr_logfile=/data/keepalived/log/keepalived.error.log
stdout_logfile=/data/keepalived/log/keepalived.log
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=5
生效配置文件
supervisorctl update
supervisorctl restart keepalived
原文:https://blog.51cto.com/11676712/2541825