Nginx + Keepalive

《Nginx + Keepalive》

Nginx的主要用途有反向代理,负载均衡等,无论它作为哪种用途,Nginx本身也需要高可用来预防单点故障,Nginx的高可用可以通过搭配Keepalive来实现。

《Nginx + Keepalive》

安装keepalive

#yum -y install keepalived
//修改配置文件:
#vi /etc/keepalived/keepalived.conf

#systemctl restart keepalived
#systemctl enable keepalived

主机

global_defs { 
	#notification_email { 
	#acassen@firewall.loc 
	#failover@firewall.loc 
	#sysadmin@firewall.loc 
	#} 
	#notification_email_from Alexandre.Cassen@firewall.loc  
	#smtp_server 127.0.0.1 
	#smtp_connect_timeout 30 
	router_id NGINX_80   #这台keppalive主机的名称
} 

# 健康监测nginx
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"      # 设置检查nginx是否存活的脚本位置
        //在vrrp_script模块中,如果不设置“weight”选项值,那么集群优先级的选择将由Keepalived配置文件中的“priority”值决定,而在需要对集群中优先级进行灵活控制时,可以通过在vrrp_script模块中设置“weight”值来实现。
}
#心跳监测mysql
vrrp_script check_mysql {
	script "/etc/keepalived/check_mysql.sh"      # 设置检查nginx是否存活的脚本位置
}

# keepalive 热备组配置
vrrp_instance VI_1 { 
	state MASTER               # 配置当前keepalive为master角色
	interface enp7s0           # 网卡名字,必须和实际网卡名称一致,默认是ens33
	virtual_router_id 85      # VRRP 路由 ID实例,每个组的id是相同的(属同一个组内) , master和slave保持一致即可   值:0~255
	priority 100                  # 优先级,备服务器设置 90   值:1~254    越大越优先
	advert_int 1                  # 指定VRRP 心跳包通告间隔时间,默认1秒 
	authentication { 
		auth_type PASS      
		auth_pass 1111       # 设置keepalive的master和slave之间简单的秘钥认证
	}  
	# 设置keepalive虚拟IP地址
	virtual_ipaddress { 
		#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
		#192.168.31.240/24 dev ens33 label ens33:0
		192.168.0.85/24
	} 
	track_script {
		check_nginx
	} 
}

备机

global_defs { 
	#notification_email { 
	#acassen@firewall.loc 
	#failover@firewall.loc 
	#sysadmin@firewall.loc 
	#} 
	#notification_email_from Alexandre.Cassen@firewall.loc  
	#smtp_server 127.0.0.1 
	#smtp_connect_timeout 30 
	router_id NGINX_110   #这台keppalive主机的名称<<<<<<<<<<<<<<<<<<<<<<<<<<
} 

# 健康监测nginx
vrrp_script check_nginx {
	script "/etc/keepalived/check_nginx.sh"      # 设置检查nginx是否存活的脚本位置
}
#心跳监测mysql
vrrp_script check_mysql {
	script "/etc/keepalived/check_mysql.sh"      # 设置检查nginx是否存活的脚本位置
}
# keepalive 热备组配置
vrrp_instance VI_1 { 
	state BACKUP               # 配置当前keepalive为BACKUP角色<<<<<<<<<<<<<<<<<
	interface eno1              # 网卡名字,必须和实际网卡名称一致,默认是ens33<<<<<<<<<<<<<<<<<<<<
	virtual_router_id 85      # VRRP 路由 ID实例,每个组的id是相同的(属同一个组内) , master和slave保持一致即可   值:0~255<<<<<<<<<<<<<<<
	priority 95                    # 优先级,备用服务器95,主机100   值:1~254    越大越优先<<<<<<<<<<<<<<<<<<<<<
	advert_int 1                  # 指定VRRP 心跳包通告间隔时间,默认1秒 
	authentication { 
		auth_type PASS      
		auth_pass 1111       # 设置keepalive的master和slave之间简单的秘钥认证
	}  
	# 设置keepalive虚拟IP地址
	virtual_ipaddress { 
		#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
		#192.168.31.240/24 dev ens33 label ens33:0
		192.168.0.85/24        #<<<<<<<<<<<<<<<
	} 
	track_script {
		check_nginx
	} 
}

添加nginx健康监测脚本

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#如果nginx没有启动就启动nginx
if [ $A -lt 1 ];then
     #重启nginx
    /bin/systemctl restart nginx
    if [ `ps -C nginx --no-header |wc -l` -lt 1 ];then
        #nginx重启失败,则停掉keepalived服务,进行Vir-IP转移
        #/bin/systemctl stop keepalived
        exit 1
    else
        exit 0
    fi
else
    exit 0
fi

//最后给执行权限
#chmod +x /etc/keepalived/check_nginx.sh

可以有多个虚拟ip不同的网卡,如下

《Nginx + Keepalive》

验证生效

《Nginx + Keepalive》
点赞

发表评论

邮箱地址不会被公开。 必填项已用*标注