Nginx + LVS + KeepAlived实现高可用集群

一、名词解释

1、高可用集群

对于中小型互联网公司,产品所承受的请求量还是比较低的,所以一般使用单节点Nginx + 多服务集群,这种方式就能够满足需求。

但是有些公司产品请求量是非常大的,此时单台Nginx可能没办法满足需求(如果单节点宕机,整个系统崩溃),此时就会考虑搭建Nginx高可用集群,通过LVS提供统一的访问入口,将请求负载均衡到我们的Nginx集群。

当某个Nginx节点宕机,Keepalived会进行监控,备用节点也会继续向外提供服务,确保程序还是正常运行,这就是高可用集群的魅力

2、LVS

LVS(Linux Vritual Server),大白话翻译过来就是一种负载均衡调度器,可以虚拟出来一个IP地址(公网IP),这样可以为我们的Nginx集群生成一个唯一的访问IP地址,该IP一般称之为VIP(Vriutal IP,虚拟IP),用户访问虚拟IP就可以实现Nginx集群的负载均衡功能
在这里插入图片描述

3、Keepalived

LVS只提供负载均衡功能,但是不能监控Nginx节点状态。如果某Nginx节点宕机,就没办法处理客户端发送过来的请求,造成服务不可用!

Keepalived 基于 VRRP 协议实现的保证集群高可用,主要功能是实现真机的故障隔离和负载均衡器间的失败切换,防止单点故障

VRRP协议保证当主机的下一路由器出现故障时,由另外一台路由器来代替出现故障的路由器进行工作,从而保持网络通信的连续性和可靠性。
在这里插入图片描述

二、搭建流程

我使用的是两台阿里云ESC(2核2G服务器),IP地址分别为:
47.94.210.20:22(Master)
8.218.185.242:22(Backup)
大家可以在Windows本地安装虚拟机来代替。

1、安装Docker

两台ESC分别安装好Docker,参考该博客第1小节,即可顺利安装:https://blog.csdn.net/weixin_46594796/article/details/122750009

2、安装Nginx

两台ESC安装好Nginx,流程参考该博客第5小节(跳过配置证书流程):
https://blog.csdn.net/weixin_46594796/article/details/130446464

按照第5小节执行完毕后,两台服务器执行下方命令,此时Nginx容器启动成功:

# 进入 /usr/local/nginx/html 
cd /usr/local/nginx/html

# 创建nginx首页(两台服务器首页内容要区分,第二台服务内容可以为"Backup Nginx")
echo "Master Nginx" > index.html

# 启动容器
docker run \
--name nginx \
-p 443:443 -p 80:80 \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /usr/local/nginx/conf.d:/etc/nginx/conf.d \
-v /usr/local/nginx/ssl:/etc/nginx/ssl/  \
--privileged=true -d --restart=always nginx
3、安装Keepalived

两台ESC分别安装Keepalived:

# 通过yum工具安装Keepalived
yum install -y keepalived
  1. 操作主节点keepalived配置文件
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived

# Keepalived 检测脚本
vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" # nginx宕机以后,自动开启shell
        interval 2                              # 检测时间间隔
        weight -20                              # 如果条件成立,权重为-20
}

vrrp_instance VI_1 {
    state MASTER              # 主、备标识
    interface eth0            # 网卡
    virtual_router_id 51      # 主、备需要相同
    mcast_src_ip 47.94.210.20 # 本机IP
    priority 100              # 优先级(主节点大)
    advert_int 1              # 心跳检测间隔
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 将 chk_nginx 加入instance 配置块
    track_script {
        chk_nginx
    }

    # 虚拟IP
    virtual_ipaddress {
        192.168.200.16
    }
}
  1. 操作备节点keepalived配置文件
# 编辑配置文件
vim /etc/keepalived/keepalived.conf

配置内容如下:

! Configuration File for keepalived

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

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 8.218.185.242
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    track_script {
        chk_nginx
    }

    virtual_ipaddress {
        192.168.200.16
    }
}
4、编写nginx_check.sh脚本

两台ESC分别执行:

# 编辑脚本
vim /etc/keepalived/nginx_check.sh

内容如下:

counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    	docker restart nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived
    fi
fi
# 脚本文件授权
chmod 777 /etc/keepalived/nginx_check.sh
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx是一款开源的高性能HTTP服务器和反向代理服务器。它通过处理客户端的请求,并将其转发到后端的多个服务器上以实现负载均衡,提高系统的稳定性和可扩展性。 而要实现nginx高可用性,可以使用keepalivedLVS(Linux Virtual Server)。 keepalived可以将多台服务器组成一个虚拟的高可用集群,其中一台服务器作为主服务器(Master),其他服务器作为备份服务器(Backup)。keepalived通过监控主服务器的状态,当主服务器宕机时,会自动将备份服务器切换为主服务器,确保服务的持续可用。这种方式实现高可用性,提高了系统的稳定性。 而LVS则是一种软件负载均衡解决方案,它将多个服务器组成一个虚拟服务器,利用IP负载均衡技术将客户端请求平均分发到后端的多台服务器上,实现负载均衡高可用性。LVS可以通过不同的调度算法(如RR、WRR、DR等)来选择合适的后端服务器,以提高系统的性能和可扩展性。 结合keepalivedLVS,我们可以搭建一个高可用nginx集群。通过keepalived的主备切换机制,以及LVS负载均衡技术,可以确保即使其中一台服务器发生故障,整个系统仍然可以正常运行,从而提高了系统的可靠性和可用性。 总之,nginx可以通过结合keepalivedLVS实现高可用性和负载均衡,这对于保障系统的稳定运行和提升用户体验具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值