手把手搭建 Nginx + VIP + Keepalived 高可用集群

news2025/9/15 3:42:08

文章目录

  • 1、前置讲解
    • 1.1、常用方案
    • 1.2、实现流程
  • 2、集群搭建
    • 2.1、环境准备
    • 2.2、关于 Nginx
      • 2.2.1、安装 Nginx
      • 2.2.2、调整 Nginx 首页
    • 2.3、关于 Keepalived
      • 2.3.1、安装 Keepalived
      • 2.3.2、编写 Shell
      • 2.3.3、调整 KeepAlived 配置

1、前置讲解

其实阿里云ECS本身不支持使用服务器子网中 VIP 实现高可用 Nginx 集群,

1.1、常用方案

搭建高性能、高可用的负载均衡集群方案其实有很多,常见的例如:

  • 购买、使用硬件负载均衡器 F5(性能无敌,价格贵,轻松抗下百万QPS)
  • 购买、使用阿里云SLB服务(高效便捷,即买即用)
  • 通过服务器搭建 Nginx + VIP + Keepalived 高可用集群(价格低,低成本,不上云场景!)

对于绝大多数的业务场景来说,都是需要使用云服务器的,所以绝大多数情况根本不会考虑使用 Nginx + VIP + Keepalived 这套高可用负载均衡方案,这套方案一般用于自建,接下来讲解以下这套集群方案搭建。

1.2、实现流程

keepalived在之前单体架构开发时,是一个用的较为频繁的高可用技术,比如MySQL、Redis、MQ、Tomcat等都会通过keepalived提供的虚拟IP(VIP)机制,实现单节点应用的高可用。Keepalived是一个基于VRRP协议来实现的服务高可用方案,VRRP协议允许一台机器可以拥有一个或者多个VIP。

在高可用Nginx集群中,有一个为主Nginx,多个备Nginx,整个集群对外提供一个VIP,通过VIP访问主Nginx,备用Nginx负责监控主节点运行状态,如果发现主节点宕机,则选举其中一个备用Nginx接管主节点的工作,VIP绑定到新选举的主Nginx节点上,这个流程俗称IP漂移,从而实现了高可用。
在这里插入图片描述

2、集群搭建

2.1、环境准备

集群部署使用的是虚拟机,不能使用阿里云ECS这种服务,不支持VIP漂移:

服务器1:内网ip1
服务器2:内网ip2
虚拟IP:内网ip3

两台服务器上,都需要安装好 Docker 环境,参考该文章第1章节:

https://blog.csdn.net/weixin_46594796/article/details/122750009

2.2、关于 Nginx

2.2.1、安装 Nginx

首先,创建需要挂载宿主机目录文件夹,两台服务器上都执行:

# 创建 Nginx 挂载目录
mkdir -p /opt/nginx
mkdir -p /opt/nginx/html
mkdir -p /opt/nginx/logs
mkdir -p /opt/nginx/conf

通过下述命令先创建、启动 Nginx 容器,两台服务器上都执行:

docker run -p80:80 --name nginx -d nginx:latest

启动 Nginx 完毕后,将 nginx 配置文件拷贝到宿主机文件夹,两台服务器上都执行:

# 拷贝配置内容
docker container cp nginx:/etc/nginx /opt/nginx/conf/

# 移动配置
mv /opt/nginx/conf/nginx/* /opt/nginx/conf/ 

# 移除多余文件夹
rm -rf /opt/nginx/conf/nginx

两台服务器,重新启动 Nginx:

# 停止、删除容器
docker stop 容器id
docker rm 容器id

# 启动容器
docker run -p 80:80 --name nginx -d \
-v /opt/nginx/html:/usr/share/nginx/html \
-v /opt/nginx/logs:/var/log/nginx \
-v /opt/nginx/conf:/etc/nginx \
--privileged=true \
--restart always nginx:latest

2.2.2、调整 Nginx 首页

分别在两台服务器上修改 Nginx 的 index.html 文件内容,这样方便我们测试查看本次请求到底访问的是哪一台服务器:

# 服务器1上执行
echo "Nginx 111" > /opt/nginx/html/index.html

# 服务器2上执行
echo "Nginx 222" > /opt/nginx/html/index.html

通过访问两台服务器的IP地址,就可以看到对应的首页内容了(注意:服务器记得开放80安全组):

2.3、关于 Keepalived

2.3.1、安装 Keepalived

首先,通过 yum 安装 keepalived 程序,两台服务器都需要进行下载:

yum install -y keepalived

2.3.2、编写 Shell

接着需要编写 Nginx 故障检测 Shell 脚本,Keepalived会定时执行ps -C nginx --no-heading|wc -l命令,如果返回0,代表Nginx挂了,然后尝试重启,如果重启失败,停止keepalived触发故障转移如果返回大于0,代表 Nginx 正常运行:

# 两台服务器都需要创建该脚本(注意切换容器ID)
sudo cat >/etc/keepalived/check_nginx.sh<<-'EOF'
#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    docker start 容器id
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        systemctl stop keepalived
    fi
fi
EOF

然后,两台服务器都需要调整一下脚本权限:

# 两台服务器都需要执行
chmod 755 /etc/keepalived/check_nginx.sh

2.3.3、调整 KeepAlived 配置

两台服务器需要调整的配置内容有些区别,所以分别在两台服务器上执行下述命令:

# 服务器1上的配置内容
sudo cat >/etc/keepalived/keepalived.conf<<-'EOF'
! Configuration File for keepalived
# 全局配置,路由ID,固定不变
global_defs {
    router_id LVS_DEVEL
}
# 定义Nginx状态脚本
vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" 
    # 间隔时间,单位为秒,默认1秒
    interval 2 
    # 权重,当脚本成功或失败对当前节点的优先级是增加还是减少
    weight -5 
}

#VRRP实例
vrrp_instance VI_1 {
    # 主节点
    state MASTER
    # 绑定的网卡,使用ifconfig命令查看获取
    interface eth0
    # 虚拟路由id,保证相同
    virtual_router_id 51
    # 优先级,抢占模式下优先级高的称为主
    priority 101
    # 指定发送VRRP通告的间隔。单位是秒。
    advert_int 2
    # 安全认证用的密码,自定义即可
    authentication {
        auth_type PASS
        auth_pass 1111
    }

    # 对外暴露的VIP地址
    virtual_ipaddress {
        内网ip3
    }

    # 指定Nginx执行状态脚本
    track_script {
       chk_nginx 
    }
}
EOF
# 服务器2上执行
sudo cat >/etc/keepalived/keepalived.conf<<-'EOF'
! Configuration File for keepalived
global_defs {
    router_id LVS_DEVEL
}

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh" 
    interval 2 
    weight -5 
}

vrrp_instance VI_1 {
    # 初始角色Backup
    state BACKUP
    interface eth0
    virtual_router_id 51
    # 优先级比master低
    priority 100
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        内网ip3
    }
    track_script {
       chk_nginx 
    }
}
EOF

两台服务器,都启动 Keepalived :

# 启动 Keepalived
systemctl start keepalived

# 查看日志
tail -f /var/log/messages

通过控制台日志可以看到高可用集群部署完毕,此时通过访问内网ip3就能够看到Nginx首页,停止掉某台机器上的keepalived就会出现故障转移,VIP漂移现象!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet&#xff0c;修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段&#xff0c;定义网络标识和 NFS 动态存储卷&#xff0c;然后在容器部分用“volumeMounts”挂载到容器里的数据目…

一文搞懂阻塞赋值和非阻塞赋值

目录 2.非阻塞赋值举例3.阻塞赋值举例4.总结 微信公众号获取更多FPGA相关源码&#xff1a; # 1.阻塞赋值和非阻塞赋值的区别&#xff1a; (1)阻塞赋值""&#xff0c;必须是阻塞赋值完成后&#xff0c;才进行下一条语句的执行&#xff1b;赋值一旦完成&#xff0c;等号…

docker环境中配置phpstorm php xdebug调试工具

本文介绍通过docker compose的使用方式 第一步&#xff1a;在php镜像中安装phpxdebug扩展&#xff0c;比如php7.4对应的是xdebug3.1.6 第二步&#xff1a;设置项目中的docker-compose.yml docker-compose 增加开启xdebug的环境变量,host.docker.internal是宿主机的地址&#…

MBTI:探索你的性格类型

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

4.音视频 AAC SSAASS

目录 AAC 1.什么是ADIF和ADTS&#xff1f; 2.ADTS的数据结构是怎样的&#xff1f; SSA/ASS 1.SSA/ASS的基本结构 AAC AAC(Advanced Audio Coding&#xff0c;高级音频编码)是一种声音数据的文件压缩格式。AAC分为ADIF和ADTS两种文件格式。 1.什么是ADIF和ADTS&#xff…

Day01 C语言嵌入式

目录 1、嵌入式知识体系 2、计算机的组成原理 3、计算机之父 4、C语言标准 5、关键字 6、字符编码 7、字符集 1、嵌入式知识体系 备注&#xff1a;图片来源于网络&#xff0c;为嵌入式知识体系思维导图&#xff0c;分为软件、硬件和理论知识三个部分&#xff0c;仅供各位…

【LeetCode】4,寻找两个正序数组中的中位数

题目地址 B站那个官方解答视频实在看不懂&#xff0c;我就根据他那个代码和自己的理解写一篇文章 1. 基本思路 在只有一个有序数组的时候&#xff0c;中位数把数组分割成两个部分。中位数的定义&#xff1a;中位数&#xff0c;又称中点数&#xff0c;中值。中位数是按顺序排列…

全志摄像头屏幕预览、录制(H264)

一、录像 使用dvr_test录制视频 运行dvr_test demo出现space not enought问题&#xff0c;修改/etc/dvrconfig.ini文件下对应的camera节点下cur_filedir属性无效 修改以下内容解决; 录制时出现摄像头画面异常&#xff0c;如下 摄像头型号与打印信息匹配&#xff1a; 但是出现画…

整蛊软件/插件使用方法与配置步骤~

今天出一期整蛊软件的使用方法与配置步骤 很多人在使用整蛊软件的时候 想自己添加更多的玩法内容 但是还不知道如何去配置 这期给大家出一下图文教程步骤 基本上也是软件的功能介绍使用方式~ 案例可扫码查看 第一步&#xff1a;打开软件输入卡密登录&#xff1a; 卡密费用&…

最好用的邮箱管理软件推荐,邮箱管理软件哪个好?(干货篇)

在快节奏的工作与生活中&#xff0c;有效管理电子邮件成为提升个人与团队效率的关键。 面对海量信息流&#xff0c;一款好的邮箱管理软件不仅能够帮助我们高效地整理收件箱&#xff0c;还能确保重要邮件不会错过&#xff0c;同时提升通讯的便捷性和安全性。 本文将为您推荐几款…

AUTOSAR平台中的信息安全标准模块

面向MCU端的AUTOSAR CP平台加密组件——Crypto ECU中所有的软件单元都遭受到信息安全攻击的可能。AUTOSAR为保障ECU信息和数据安全&#xff0c;定义了CRYPTO 组件,包含 SecOC、KeyM、IdsM、Csm、CryIf 和Crypto Driver 等标准模块。CRYPTO组件提供各种加解密算法以及密钥管理功…

另辟蹊径的终端防病毒

在数字时代的浪潮中&#xff0c;网络安全问题愈发凸显&#xff0c;防病毒成为了保护信息安全的重要一环。而白名单作为一种有效的安全策略&#xff0c;在防病毒方面发挥着不可或缺的作用。 首先&#xff0c;我们需要明确白名单的概念。白名单是一种管理和安全实践&#xff0c;用…

掌握这招,串口通信高频收发32W数据,0丢包!

我做过挺多串口通讯类的产品&#xff0c;有用485通讯的pdu&#xff0c;有wifi/4G/蓝牙通讯类的网关... 做串口的应用&#xff0c;把串口外设调通只是第一步&#xff0c;串口只是数据传输的媒介&#xff0c;在此基础上&#xff0c;两个设备/器件要进行通信&#xff0c;传递更有意…

软件使用教程

昨天分享了一款专业软件&#xff0c;但是大家不知道怎么pj&#xff0c;好多小伙伴被文件夹下面的说明带跑偏了&#xff0c;所以今天特地发个文说一下科学使用的过程&#xff0c;需要软件的可以看昨天的文章&#xff01; 话不多说那好小板凳&#xff0c;教程开始了 1、第一步&…

18. 四数之和 - 力扣

1. 题目 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; 0 …

空间搜索geohash概述;redis的geo命令

概述 通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。 但是这些中间件又是怎么实现位置搜索的呢&#xff1b; 查了一番资料&#xff0c;发现背后一个公共的算法Geohash。 搜索的时候可以根据距离对…

认识Redis 主从同步、事务和Memcached的区别

08- 什么是 Redis 主从同步&#xff1f; Redis 的主从同步(replication)机制&#xff0c;允许 Slave 从 Master 那里&#xff0c;通过网络传输拷贝到完整的数据备份&#xff0c;从而达到主从机制。 主数据库可以进行读写操作&#xff0c;当发生写操作的时候自动将数据同步到从…

Spring Boot:Java 应用开发高效之道

Spring Boot 是一种革命性的框架&#xff0c;旨在简化 Java 应用的创建和部署过程。通过自动化配置和简化项目搭建流程&#xff0c;Spring Boot 大大加速了开发周期&#xff0c;让 Java 应用开发变得更加高效和便捷。 核心优势&#xff1a; 快速启动和简化配置&#xff1a;Spr…

【C++】STL中list的使用

前言&#xff1a;在前面学习的 过程中我们学习了STL中的string,vector&#xff0c;今天我们来进一步的学习STL中的list的使用方法。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&#xff23;学习 &#x1f448; &#x1f4af;代…

设置sqlserver management的字体大小

在用sqlserver management的时候&#xff0c;总感觉怪怪的&#xff0c;然后发现是字体太小的原因。 1&#xff09;设置一下字体&#xff0c;工具--选项&#xff1a; 2&#xff09;环境--字体和颜色--显示其设置&#xff08;环境&#xff09; 3&#xff09;选择微软雅黑&#xf…