nginx1.14.0版本高可用——keepalived双机热备
nginx不支持主从,所以我们需要使用keepalive支持高可用。
keepalived重要知识点
在局域网内,每个主机上各安装一个keepalived,注意关闭防火墙firewalld,然后设定一个VIP(虚拟IP),主keepalived会获得授权在自己的主机上设置一个虚拟IP提供给应用层使用。
一旦此keepalived用shell脚本监测到此机器上的nginx挂掉之后,立刻kill掉自己,同时也注销VIP。
局域网内另一个keepalived感知(需关闭防火墙才能互相感知)到主keepalived挂掉,会把虚拟IP在自己所在机器上虚拟一个,此操作叫IP漂移。从而达到应用层对某个nginx挂掉无感知。
安装keepalived
yum -y update
yum -y remove keepalived
yum install keepalived –y
使用yum安装的会有一个默认配置文件模板
路径为/etc/keepalived/keepalived.conf
启动keepalived服务
systemctl start keepalived
如果是这样就是启动成功了:
如果是这样就是启动失败,要检查是否是conf文件没改正确:
keepalived配置——发送邮件设置
global_defs { notification_email { 收件邮箱列表 acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 发件邮箱设置 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 }
keepalived 配置——获取网卡名称
查看本机网卡: IP a
keepalived.conf 配置——VIP配置 (virtual IP)
! Configuration File for keepalived global_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script "/etc/keepalived/chk_nginx.sh" 监测nginx是否存活脚本,如果否,keepalived将kill掉自己 interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state MASTER 字符串标识,可以随便写,比如backup interface eno16777736 virtual_router_id 51 priority 100 指定keepalived的优先级,最高优先级为主,可以设置所在机器的虚拟IP,其它从keepalived则不能。 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.10.200 指定一个虚拟IP : VIP,后续做IP漂移。这个IP也是应用访问的IP
#192.168.10.210 可以设置多个虚拟IP
}
track_script {
chk_nginx 此虚拟IP检测存活对象的脚本,这里检测nginx
}
}
chk_nginx.sh脚本
A=`ps -C nginx --no-header |wc -l` 检测nginx存活数,如果是0,则是nginx已经挂掉了 if [ $A -eq 0 ] ; then echo 'nginx server is died' killall keepalived kill掉自己 fi
keepalived启动、停止、查看存活状态命令
systemctl start keepalived.service 启动
systemctl stop keepalived.service 停止
systemctl status keepalived.service 查看状态
nginx启动、停止、查看运行状态
cd nginx目录
./sbin/nginx -t 检查nginx.conf脚本语法是否正常
./sbin/nginx 启动
./sbin/nginx -s stop 停止 Stop 是快速关闭,不管有没有正在处理的请求。
./sbin/nginx -s quit 退出 Quit 是一个优雅的关闭方式,Nginx在退出前完成已经接受的连接请求。
./sbin/nginx -s reload 重启
ps -ef|grep nginx 查看运行状态
ps -C nginx --no-header |wc -l 查看存活数。一般情况下,2是正常数,因为一个nginx启动会有两个nginx进程?