nginx不支持主从,因此咱们须要使用keepalive支持高可用。nginx
keepalived重要知识点shell
在局域网内,每一个主机上各安装一个keepalived,注意关闭防火墙firewalld,而后设定一个VIP(虚拟IP),主keepalived会得到受权在本身的主机上设置一个虚拟IP提供给应用层使用。ui
一旦此keepalived用shell脚本监测到此机器上的nginx挂掉以后,马上kill掉本身,同时也注销VIP。spa
局域网内另外一个keepalived感知(需关闭防火墙才能互相感知)到主keepalived挂掉,会把虚拟IP在本身所在机器上虚拟一个,此操做叫IP漂移。从而达到应用层对某个nginx挂掉无感知。3d
安装keepalivedcode
yum -y updaterouter
yum -y remove keepalivedserver
yum install keepalived –y
使用yum安装的会有一个默认配置文件模板
路径为/etc/keepalived/keepalived.conf
启动keepalived服务
systemctl start keepalived 对象
若是是这样就是启动成功了:blog
若是是这样就是启动失败,要检查是不是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进程?