通过keepalived实现nginx的HA高可用,在原有nginx服务器基础上再新增一台nginx备用服务器,并且两台服务器同时配置keepalived,如果主服务器宕机,就会自动切换到备用服务器
安装keepalived
一、yum install -y keepalived(默认安装在/etc/keepalived下)
二、修改keepalived.conf配置文件
#主服务器 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc # ip的地址 smtp_ server 192.168.111.188 smtp_connect_timeout 30 router_id 192.168.111.188 } # 执行脚本 vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 # 每2s执行一次该脚本 weight -20 # keepalive宕机 权重-20 优先级 } vrrp_instance VI_1 { state MASTER # 角色 interface ens33 # 网卡名 virtual_router_id 51 # id 保证主从相同 priority 100 # 优先级 主节点大于从节点 advert_int 1 authentication { auth type PASS auth pass 1111 } virtual_ipaddress { 192.168.111.50 # 虚拟ip. 使用逗号隔开 } track_script { chk_http_port # 追踪nginx脚本 } } #备用服务器 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc # ip的地址 smtp_ server 192.168.111.189 smtp_connect_timeout 30 router_id 192.168.111.189 } # 执行脚本 vrrp_script chk_http_port { script "/usr/local/src/nginx_check.sh" interval 2 # 每2s执行一次该脚本 weight -20 # keepalive宕机 权重-20 优先级 } vrrp_instance VI_1 { state BACKUP # 角色 interface ens33 # 网卡名 virtual_router_id 51 # id 保证主从相同 priority 90 # 优先级 主节点大于从节点 advert_int 1 authentication { auth type PASS auth pass 1111 } virtual_ipaddress { 192.168.111.50 # 虚拟ip. 使用逗号隔开 } track_script { chk_http_port # 追踪nginx脚本 } }
三、编写nginx_check.sh脚本放入/usr/local/src下
A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then #如果nginx没有启动就启动nginx /app/nginx/sbin/nginx #重启nginx if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重启失败,则停掉keepalived服务,进行VIP转移 pkill keepalived fi fi