Nginx+Keepalived 高可用

本文介绍了如何使用Keepalived结合Nginx构建高可用环境。Keepalived作为高可用解决方案,不仅能监控服务器状态,还支持VRRP协议,以确保在网络故障时实现透明的设备切换。在CentOS 7环境下,详细步骤包括Nginx的安装与测试、Keepalived的安装与配置,以及通过VIP漂移实现服务不间断。在Master宕机后,Slave会接管服务,保持对外提供服务的连续性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

Keepalived是Linux下的一个高可用解决方案,Keepalived 可以用来防止服务器单点故障的发生。

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

后来Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied 一方面具有服务器状态检测和故障隔离功能,另外一方面也有HA cluster功能,下面介绍一下VRRP协议实现的过程。

官网地址:https://www.keepalived.org

VRRP协议与工作原理

现实的网络环境中。主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,通信就会失效,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。

VRRP协议是一种主备模式的协议,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信,这其中涉及到两个概念:物理路由器和虚拟路由器。

VRRP可以将两台或者多台物理路由器设备虚拟成一个虚拟路由,这个虚拟路由器通过虚拟IP(一个或者多个)对外提供服务,而在虚拟路由器内部十多个物理路由器协同工作,同一时间只有一台物理路由器对外提供服务,这台物理路由设备被成为:主路由器(Master角色),一般情况下Master是由选举算法产生,它拥有对外服务的虚拟IP,提供各种网络功能,如:ARP请求,ICMP 数据转发等,而且其它的物理路由器不拥有对外的虚拟IP,也不提供对外网络功能,仅仅接收MASTER的VRRP状态通告信息,这些路由器被统称为“BACKUP的角色”,当主路由器失败时,处于BACKUP角色的备份路由器将重新进行选举,产生一个新的主路由器进入MASTER角色,继续提供对外服务,整个切换对用户来说是完全透明的。

每个虚拟路由器都有一个唯一的标识号,称为VRID,一个VRID与一组IP地址构成一个虚拟路由器,在VRRP协议中,所有的报文都是通过IP多播方式发送的,而在一个虚拟路由器中,只有处于Master角色的路由器会一直发送VRRP数据包,处于BACKUP角色的路由器只会接受Master角色发送过来的报文信息,用来监控Master运行状态,一般不会发生BACKUP抢占的情况,除非它的优先级更高,而当MASTER不可用时,BACKUP也就无法收到Master发过来的信息,于是就认定Master出现故障,接着多台BAKCUP就会进行选举,优先级最高的BACKUP将称为新的MASTER,这种选举角色切换非常之快,因而保证了服务的持续可用性。

Keepalived安装
master centos 7 192.168.91.129
slave centos 7 192.168.91.131
vip 192.168.91.181

用户访问的是VIP,由于VIP与真实服务器网卡绑定了(与网卡Mac地址绑定),当Master 宕机后Slave接受不到Master广播信息,Slave会通过ARP 协议广播VIP 和Slave的Mac地址,Slave就成为了Master对外提供服务,VIP也就漂移到Slave服务器。
在这里插入图片描述

1.Master和Slave都安装Nginx并测试通过

http://192.168.91.129/
在这里插入图片描述
http://192.168.91.131/
在这里插入图片描述
2.Master和Slave都是用 yum -y install keepalived 安装keepalived,并配置keepalived

Master 配置/etc/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 LVS_DEVEL
   vrrp_skip_check_adv_addr
   #vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#  keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。
#  如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。
vrrp_script nginx_check.sh {
   script "/etc/keepalived/nginx_check.sh"
   interval 2
   weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33       # 绑定的网卡,可通过ifconfig查看
    virtual_router_id 51  # 拟路由的ID号,Master、Slave节点设置必须一样
    priority 100          # 节点优先级,值范围 0-254,MASTER要比BACKUP高
    advert_int 1          # 组播信息发送时间间隔
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress { # 虚拟ip配置,可配置多个
        192.168.91.181
    }
}

Slave 配置 /etc/keepalived/keepalived.conf

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
}

vrrp_script nginx_check.sh {
   script "/etc/keepalived/nginx_check.sh"
   interval 2
   weight -2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.91.181
    }
}

3.Master 和 Slave节点 /etc/keepalived 目录放置检查脚本nginx_check.sh

#!/bin/bash


A=`ps -C nginx --no-header | wc -l`
echo `date "+%Y-%m-%d %H:%M:%S"` >> /etc/keepalived/log.txt
if [ $A -eq 0 ];then
   /usr/local/nginx/sbin/nginx
   sleep 2
   if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
       systemctl stop keepalived
   fi
fi
echo "check finish ${A}" >> /etc/keepalived/log.txt

4.启动Maste 和Slave 节点的keepalived 并查看日志

systemctl start keepalived
tail -f /var/log/messages

在这里插入图片描述
查看VIP 与网卡绑定信息: ip a
在这里插入图片描述
从其他节点ping VIP,ping 192.168.91.181
在这里插入图片描述
注意: keepalived.conf配置文件中在golobal_defs 中注释了vrrp_strict,如没有注释会导致ping不通。官网信息如下:
在这里插入图片描述

5.通过浏览器访问VIP, http://192.168.91.181

在这里插入图片描述

6.停止Master 上的keepalived 和 nginx,再次使用浏览器刷新VIP

systemctl stop keepalived
/usr/local/nginx/sbin/nginx -s stop

浏览器刷新192.168.91.129 已经访问不到

在这里插入图片描述

ip a 查看Slave节点ip信息,VIP 已经漂移到了Slave

在这里插入图片描述

再次刷新192.168.91.181依然可以访问到nginx服务
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值