搭建Nginx高可用集群(keepalived+双机热备)

一、Nginx高可用

首先了解一下什么是高可用,高可用是分布式系统架构中必须考虑的因素。

我们都知道,使用nginx的反向代理和负载均衡可以解决tomcat等web容器的单点故障以及高并发等问题

反向代理是指以代理服务器来接收浏览器的请求,然后再将请求转发到内网的服务器,然后再将从服务器上得到的结果返回给客户端。负载均衡就是要解决一个web服务器压力过大的问题,此时可以通过多个web服务器根据不同的算法将并发过来的请求分配到多个服务器上,从而减轻单个服务器压力过大的问题。

这样的话,当一台web服务器挂掉了,还有其他的服务器可以处理客户端的请求,也解决了单点故障问题,这是对web服务器的高可用。

但是,上述架构仍然存在单点故障问题吗,如果这台Nginx挂了,那么所有对外提供的接口都将导致无法访问,所以我们也需要给Nginx配置高可用机制。

可以使用keepalived来实现Nginx的高可用。

二、Nginx双机热备

双机热备方案是目前使用最为普遍的一种高可用方案,双机热备就是指一台服务器整在提供服务,另外一台作为备用状态,当一台服务器挂掉之后另外一台就会代替他继续提供服务。

双机热备主要解决的是Nginx的单点故障问题。

三、LVS负载均衡

再来了解一下LVS,LVS(Linux Vritual Server)即Linux虚拟服务器,他是一个开源的软件,可以实现传输层四层负载均衡,通过 LVS 达到的负载均衡技术可以实现一个高性能高可用的 Linux 服务器集群。

大概流程就是:当客户端发出请求时,会先连接到互联网的DNS服务器,然后解析到LVS负载均衡调度器上,LVS可以帮我们虚拟出来一个IP地址(外网IP),此时客户端用户就会去连接这个虚拟出来的IP,当用户连接到虚拟IP之后LVS会根据指定的调度算法确定具体要连接到哪一台Nginx服务器上。客户端连接到虚拟IP的过程对用户是透明的,而LVS具体连接到哪一台Nginx服务器对用户来说是不知道的。

LVS负载均衡调度器仅仅只是一个调度器,并不是真正的服务。

四、keepalived健康监测

来了解了解为什么要引入keepalived

LVS可以实现负载均衡,但是不能够进行健康检查。意思就是,假如一台Nginx服务器挂掉了,LVS仍然会把客户端的请求发送到这个挂掉了Nginx上(因为LVS并不知道此Nginx挂了),这样就会导致请求无效无法处理客户端的请求。

keepalive 软件可以进行健康检查,所以我们需要使用他来进行监测,而且可以实现Nginx的高可用性,解决Nginx的单点故障问题及LVS不能进行健康检查的问题。

keepalived的工作原理

keepalived是基于VRRP协议实现的保证集群高可用的一个服务软件,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障。VRRP协议保证当主机的下一路由器出现故障时,由另外一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。

VRRP虚拟出来的是路由。

五、开始搭建Nginx高可用集群

1、首先准备两台Nginx服务器,一个作为主服务器MASTER,一个作为备服务器BACKUP,再利用LVS虚拟出来一个IP地址。

#搭建keepalived环境
yum install -y  keepalived

#keepalived的启动与停止
service keepalived start
service keepalived stop

2、修改主Nginx服务器keepalived文件:vim  /etc/keepalived/keepalived.conf

设置自己的主Nginx服务器的IP地址等信息,我这里是192.168.66.100,虚拟IP设置为192.168.66.99

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state MASTER #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.66.100 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将track_script块加入instance 配置块
    track_script {
        chk_nginx #执行Nginx监控的服务
    }

    virtual_ipaddress {
        192.168.66.99 #虚拟ip
    }
}

3、修改从Nginx服务器keepalived文件, vim /etc/keepalived/keepalived.conf

设置自己的从Nginx服务器的IP地址等信息,我这里是192.168.66.101,虚拟IP也设置为192.168.66.99

! Configuration File for keepalived
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务
    interval 2 #检测时间间隔
    weight -20 #如果条件成立的话,则权重 -20
}
# 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
    state BACKUP #来决定主从
    interface ens33 # 绑定虚拟 IP 的网络接口,根据自己的机器填写
    virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样
    mcast_src_ip 192.168.66.101 #填写本机ip
    priority 100 # 节点优先级,主要比从节点优先级高
    nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题
    advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 将 track_script 块加入 instance 配置块
    track_script {
        chk_nginx #执行 Nginx 监控的服务
    }

    virtual_ipaddress {
        192.168.66.99 # 虚拟ip
    }
}

4、Nginx+keepalived实现高可用写入脚本:vim /etc/keepalived/nginx_check.sh

(两台机器都需要写)
#!/bin/bash
A=`ps -C nginx —no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

对该脚本文件授权

chmod 777 /etc/keepalived/nginx_check.sh

此时已经配置完成。

在浏览器访问虚拟IP192.168.66.99时即可访问到主Nginx服务器中的服务,即使主Nginx服务器挂了,也会自动连接到从Nginx服务器上,从而保证了Nginx的高可用,当主Nginx恢复正常时,会再次自动连接到主Nginx服务器上继续服务

END......

  • 16
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
nginx是一款开源的性能HTTP服务器和反向代理服务器。它通过处理客户端的请求,并将其转发到后端的多个服务器上以实现负载均衡,提系统的稳定性和可扩展性。 而要实现nginx可用性,可以使用keepalived和LVS(Linux Virtual Server)。 keepalived可以将多台服务器组成一个虚拟的可用集群,其中一台服务器作为主服务器(Master),其他服务器作为份服务器(Backup)。keepalived通过监控主服务器的状态,当主服务器宕机时,会自动将份服务器切换为主服务器,确保服务的持续可用。这种方式实现了可用性,提了系统的稳定性。 而LVS则是一种软件负载均衡解决方案,它将多个服务器组成一个虚拟服务器,利用IP负载均衡技术将客户端请求平均分发到后端的多台服务器上,实现了负载均衡和可用性。LVS可以通过不同的调度算法(如RR、WRR、DR等)来选择合适的后端服务器,以提系统的性能和可扩展性。 结合keepalived和LVS,我们可以搭建一个可用nginx集群。通过keepalived的主切换机制,以及LVS的负载均衡技术,可以确保即使其中一台服务器发生故障,整个系统仍然可以正常运行,从而提了系统的可靠性和可用性。 总之,nginx可以通过结合keepalived和LVS来实现可用性和负载均衡,这对于保障系统的稳定运行和提升用户体验具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值