
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进程?