nginx+Keepalived高可用负载

nginx+Keepalived实现高可用

1、为什么要高可用?

在使用 Nginx 做反向代理或者负载均衡的时候,都是以 Nginx 为入口,如果 Nginx 宕机了,那么所有的服务都无法正常提供,影响非常严重。所有我们需要保证 nginx 高可用。

高可用(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。如果一个系统能够一直提供服务,那么这个可用性则是百分之百,但是我们不能保证一个系统能永远不出问题,所以我们只能通过设计来尽可能的去减少由于系统的故障所造成的影响。

2、Keepalived是什么及作用?

Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态。

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

后来Keepalived又加入了VRRP的功能,VRRP(虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行。

健康检查和失败切换是keepalived的两大核心功能。

所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;

而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

高可用至少需要 2 台服务器,主备都得装上keepalived,当请求访问主服务器时,备份服务器会一直检查主服务器的状态。

keepalived 需要绑定一个虚拟地址 vip ( Virtual IP Address ) ,这个虚拟 ip 地址绑定在哪台服务器上请求就会发送到哪台服务器,一开始会绑定在主服务器上。

3、安装nginx和Keepalived

1)准备两台服务器和一个vip:

  • 192.168.80.10(nginx01)
  • 192.168.80.20(nginx02)
  • 192.168.8.200(vip)

2)安装nginx和Keepalived

yum -y install nginx
# 查看nginx版本
nginx -v

yum -y install keepalived
# 验证Keepalived安装
rpm -aq keepalived

3)配置Keepalived

keepalived 的配置文件在 /etc/keepalived 目录下。

[root@ttp01 keepalived]# cat keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {     # keepalived服务宕机异常出现的时候,发送通知邮件 可以是多个
     acassen@firewall.loc    #  收件人邮箱1
     failover@firewall.loc    #  收件人邮箱2
     sysadmin@firewall.loc    #  收件人邮箱3
   }
   notification_email_from Alexandre.Cassen@firewall.loc     #邮件发件人
   smtp_server 192.168.200.1    #主服务器的ip地址。邮件服务器地址
   smtp_connect_timeout 30    # 超时时间
   router_id LVS_DEVEL    # 机器标识 局域网内唯一即可。 LVS_DEVEL这字段在/etc/hosts文件中看;通过它访问到主机
   vrrp_skip_check_adv_addr    # 跳过对 VRRP 广告(通告)地址的检查。
   #vrrp_strict   # 启用严格的 VRRP 检查。
   vrrp_garp_interval 0    # 设置为 0 表示禁止发送 GARP 消息。
   vrrp_gna_interval 0    # 设置为 0 表示禁止发送 GNA 消息。
}

vrrp_script chk_http_ port {
    script "/usr/local/src/nginx_check.sh"   #检测脚本存放的路径
    interval 2   # 检测脚本执行的间隔,即检测脚本每隔2s会自动执行一次
    weight 2  #权重,如果这个脚本检测为真,服务器权重+2
}

vrrp_instance VI_1 {
    state MASTER   # 指定keepalived的角色,MASTER为主,BACKUP为备。备份服务器上需将MASTER 改为BACKUP
    interface ens33    # 通信端口 通过ip addr可以看到,根据自己的机器配置
    virtual_router_id 51    # vrrp实例id  keepalived集群的实例id必须一致,即主、备机的virtual_router_id必须相同
    priority 100    #优先级,数值越大,获取处理请求的优先级越高。主、备机取不同的优先级,主机值较大,备份机值较小
    advert_int 1    #心跳间隔,默认为1s。通过心跳检测当前服务器是否还正常工作,如果发送心跳没反应,备份服务器就会立刻接管;
    authentication {     # 服务器之间通信密码
        auth_type PASS    #设置验证类型和密码,MASTER和BACKUP必须使用相同的密码才能正常通信
        auth_pass 1111
    }
    virtual_ipaddress {   # 自定义虚拟IP。自定义的虚拟ip得根据真实ip设置。
        192.168.80.200    # 定义虚拟ip(VIP),可多设,每行一个
    }
}

备份服务器的 keepalived 配置文件:

[root@ttp02 keepalived]# cat 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
}

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.80.200
    }
}

检测脚本的名称和位置,即 /usr/local/src/nginx_check.sh,创建一个 nginx_check.sh 脚本文件,文件内容如下:

#! /bin/bash
#检测nginx是否启动了
A=`ps -C nginx -no-header | wc - 1`
if [ $A -eq 0];then    #如果nginx没有启动就启动nginx 
    /usr/local/nginx/sbin/nginx    #通过Nginx的启动脚本来重启nginx
    sleep 2   # 睡眠2秒
    if [`ps -C nginx --no-header| wc -1` -eq 0 ];then   #如果nginx重启失败,则下面就会停掉keepalived服务,进行VIP转移
        killall keepalived
    fi
fi

最后分别启动主备服务器的 Nginx 和 keepalived:

systemctl start nginx    #启动nginx
ps -ef | grep nginx  #查看 Nginx 进程的状态
systemctl start keepalived    #启动keepalived
ps -ef | grep keepalived  #查看 keepalived 进程的状态

在这里插入图片描述


在这里插入图片描述

查看ip会发现多了一个192.168.80.200的ip,这个就是vip。

这个vip在哪台服务器上,请求就会打在哪台服务器的nginx上。此时访问为:

在这里插入图片描述

停止master节点上的nginx,再次访问虚拟ip,如下:

systemctl stop nginx   # 关闭nginx
systemctl stop keepalived.service   # 关闭keepalived

在这里插入图片描述

此时就会发现vip在backup节点的nginx服务器上。

在这里插入图片描述


在这里插入图片描述

这就是nginx+ Keepalived的高可用了,可以有效的避免nginx故障。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值