keepalived+VIP 解决nginx单机故障
-
原理
keepalived 可以给指定网卡设置一个额外的虚拟IP,并且这个VIP,会更具keepalived的存活情况选择合适活跃的keepalived节点。
比如有两台主机,他们上都装有keepalived,他们可以指定一个集群ID,他们都可以给自己所在的节点的某个网课设置同一个虚拟IP。同一时间这个虚拟IP只会映射到一台主机。如果这个 虚拟IP指向的主机所在节点的keepalived挂了,那么别的keepalived节点中的一个就会把这个虚拟IP指向自己的节点。 -
nginx 安装
centos7安装nginx:https://www.cnblogs.com/cxygg/p/16949508.html
-
keepalived安装
centos7安装keepalived和双活主机配:https://www.cnblogs.com/cxygg/p/18006980
-
keepalived的配置
/ect/keepalived/keepalived.conf文件内容(主节点)
! Configuration File for 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 vm200 } #检查nginx的脚本,这脚本需要定义在调用之间,否者会找不到 vrrp_script chk_nginx{ script "/usr/checknginx.sh" #监控脚本 interval 2 #监控脚本检测周期秒 weight 10 rise 2 #表示需要连续成功2次才能认为是成功的 fall 2 #表示需要连续失败2次才能认为是失败的 timeout 2 #脚本检测超时时间,超过这个时间则认为检测失败 } #定义实例 vrrp_instance VI_101.250 { state BACKUP //我们想用非抢占式,所有都设置为BACKUP interface ens33 virtual_router_id 166 //路由ID(路由的集群ID,ID相同是一组),主从要一直 priority 100 //优先级,主比从高,非抢占模式下,实际是那个先启动就默认用的那个 advert_int 1 nopreempt //非抢占式 authentication { //主从识别认证,参数一样就能通过 auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.100.250 //vip } #指定追踪脚本 track_script { chk_nginx //检查nginx的 脚本和周期参数 } }
/ect/keepalived/keepalived.conf文件内容(从节点)
! Configuration File for 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 vm200 } #检查nginx的脚本,这脚本需要定义在调用之间,否者会找不到 vrrp_script chk_nginx{ script "/usr/checknginx.sh" #监控脚本 interval 2 #监控脚本检测周期秒 weight 10 rise 2 #表示需要连续成功2次才能认为是成功的 fall 2 #表示需要连续失败2次才能认为是失败的 timeout 2 #脚本检测超时时间,超过这个时间则认为检测失败 } #定义实例 vrrp_instance VI_101.250 { state BACKUP //我们想用非抢占式,所有都设置为BACKUP interface ens33 virtual_router_id 166 //路由ID(路由的集群ID,ID相同是一组) priority 80 advert_int 1 nopreempt //非抢占式 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.100.250 //vip } #指定追踪脚本 track_script { chk_nginx } }
-
插件nginx是否活着的脚本
这个脚本里面检查nginx如果死了,尝试启动nginx,如果起不来,就会把当前节点的keepalived杀了,这样就会触发VIP的飘逸,VIP就会指向活着的节点
/usr/checknginx.sh#!/bin/bash #检测nginx是否启动了 A=`ps -C nginx --no-header |wc -l` if [ $A -eq 0 ];then systemctl start nginx sleep 1 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then systemctl stop keepalived elif [ `ps -C keepalived --no-header |wc -l` -eq 0 ];then systemctl restart keepalived fi fi
-
需要注意的是,如果nginx启动后需要重启keepalived,才能继续保持高可用。
能耍的时候就一定要耍,不能耍的时候一定要学。
--天道酬勤,贵在坚持posted on 2024-01-24 00:53 zhangyukun 阅读(68) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!