基于keepalived的Nginx高可用架构

一、概述

Keepalived 是一个基于 VRRP(Virtual Router Redundancy Protocol)协议 的高可用性解决方案,为了解决静态路由器出现的单点故障问题,它能偶保证网络的不间断、稳定的运行。

二、核心功能

IP 漂移(VIP):通过虚拟 IP(VIP)实现服务的高可用。

健康检查(Health Checking):监控后端服务的状态,自动切换故障节点。

负载均衡:可与 LVS(Linux Virtual Server)结合,提供四层负载均衡

三、keepalived架构与工作原理

   3.1、VRRP协议

多台服务器组成一个虚拟路由器组 ,共享一个虚拟 IP 。通过优先级 选举 Master 节点,其他节点为 Backup。Master 节点定期发送 VRRP 通告,若 Backup 未收到通告,则触发选举新 Master。

   3.2、健康检查

支持 TCP、HTTP、HTTPS、SSL、脚本等多种检查方式。

若 Master 节点的服务异常,Keepalived 自动降低优先级,触发 VIP 漂移到 Backup。

四、配置文件详解

配置文件路径:/etc/keepalived/keepalived.conf

4.1、全局配置块

global_defs {

notification_email {

admin@example.com # 通知邮箱(需邮件服务器支持)

}

notification_email_from keepalived@example.com

smtp_server 127.0.0.1 # SMTP 服务器地址

smtp_connect_timeout 30 # SMTP 连接超时时间

router_id LVS_DEVEL # 节点标识(唯一)

}

4.2、VRRP 实例配置

vrrp_instance VI_1 {
    state MASTER             # 初始状态:MASTER/BACKUP
    interface eth0           # 绑定的物理网卡
    virtual_router_id 51      # 虚拟路由 ID(同一组需相同,范围 0-255)
    priority 100             # 优先级(值越大越优先)
    advert_int 1             # 通告间隔(秒)

    authentication {         # 认证配置
        auth_type PASS       # 认证类型:PASS/AH
        auth_pass 1234       # 密码(同一组需相同)
    }

    virtual_ipaddress {      # 虚拟 IP(VIP)
        192.168.1.100/24 dev eth0
    }

    track_script {           # 关联健康检查脚本
        chk_nginx
    }
}

4.3、健康检查配置

脚本检查实例:

vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"  # 自定义脚本路径
    interval 2    # 检查间隔(秒)
    weight -20    # 检查失败时优先级降低的值
}

HTTP检查实例:

virtual_server 192.168.1.100 80 {
    delay_loop 6        # 检查间隔(秒)
    lb_algo rr          # 负载均衡算法(rr/wlc等)
    lb_kind NAT         # LVS 模式(NAT/DR/TUN)
    protocol TCP

    real_server 192.168.1.101 80 {
        weight 1
        HTTP_GET {
            url {
                path /health
                status_code 200
            }
            connect_timeout 3
            retry 3
        }
    }
}

五、基础项目部署

5.1、部署两个静态站点

5.2、安装keepalived

5.3、配置keepalived

六、项目测试

跟踪服务

开启Master 和 Backup 的keepalived服务

客户端测试:

 

模拟 Master宕机,Backup接替Master对外提供服务

systemctl  stop keepalived

客户端测试:

Master恢复正常,Master继续提供服务,Backup停止服务 

模拟 Master上的nginx服务停止,尝试重新启动nginx

keepalived不会对Nginx应用做健康检查,这里利用killall 命令探测服务的运行状态,在应用异常时,VIP 自动漂移。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学术论文项目网站搭建教程【Github】

本教程使用的是linux系统,ubuntu20.04版本进行学术项目网站搭建 一:创建github的个人组织 我个人习惯使用自己的github组织【Your organizations】来进行学术项目网站的创建: New一个organization,点击Free中的Create a free o…

postman调用ollama的api

按照如下设置,不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住:110,1-12,之后所有数学计算必…

【Linux】多线程 -> 线程同步与基于BlockingQueue的生产者消费者模型

线程同步 条件变量 当一个线程互斥地访问某个变量时,它可能发现在其它线程改变状态之前,它什么也做不了。 例如:一个线程访问队列时,发现队列为空,它只能等待,直到其它线程将一个节点添加到队列中。这…

ChatGPT各模型版本对比分析

文章目录 1. GPT-3.5(2022年11月)2. GPT-4(2023年3月)3. GPT-4o(2024年5月)4. GPT-4o mini(2024年7月)5. o1系列(2024年9月至12月)6. o3-mini(202…

萌新学 Python 之自定义函数

函数主要用来封装功能,具有独立功能的代码块,可以提高代码重复利用率,便于模块管理 函数的定义: def 函数名(形参): 函数体,独立功能的代码 return ‘函数的返回值’ 函数注意事项: 1.函数的命名通常使…

【工作流】Spring Boot 项目与 Camunda 的整合

【工作流】Spring Boot 项目与 Camunda 的整合 【一】Camunda 和主流流程引擎的对比【二】概念介绍【1】Camunda 概念:【2】BPMN 概念 【三】环境准备【1】安装流程设计器CamundaModeler【画图工具】(1)下载安装 【2】CamundaModeler如何设计…

【Linux】基于UDP/TCP套接字编程与守护进程

目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…

【图像处理】:两幅图中相同区域的相似度比较

两幅图中相同区域的相似度比较 1.OpenCV和Python实现的两幅图相似度衡量方法1. 均方误差(MSE)2. 结构相似性指数(SSIM)图像协方差能显示结构特征的原因 3. 直方图相似度4. 特征点匹配5. 相关系数(Pearson Correlation&…

[python脚本]论文1.(一)CPU/内存数据分析和分组

CPU 收集到的CPU数据,格式如下: 由于这里6个数据为一组来收集latency的数据以及各个分位值的数据,而本质上每一行都是一次完整的测试,因此这里将这个csv文件分为两个文件,第一个是和latency相关的,将6条数…

綫性與非綫性泛函分析與應用_1.例題(下)-半母本

第1章 實分析與函數論:快速回顧(下) 五、基數;有限集和無限集相關例題 例題1:集合基數的判斷 判斷集合和集合B=\{a,b,c,d,e\}的基數關係。 解析: 可以構造一個雙射,例如,,,,。 所以,兩個集合具有相同的基數。 例題2:可數集的證明 證明整數集是可數集。 解析: …

MQTT实现智能家居------3、源码分析(超详细)

一、连接服务器 1、初始化: mqtt_log_init();是一个空函数,自己定义宏 client mqtt_lease();//创建一个client结构体,从此以后client代表客户端 platform_memory_alloc();//是一个分配内存的总函数,可以适用于Linux、FreeRTos…

Qt常用控件之日历QCalendarWidget

日历QCalendarWidget QCalendarWidget 是一个日历控件。 QCalendarWidget属性 属性说明selectDate当前选中日期。minimumDate最小日期。maximumDate最大日期。firstDayOfWeek设置每周的第一天是周几(影响日历的第一列是周几)。gridVisible是否显示日历…

智慧废品回收小程序php+uniapp

废品回收小程序:数字化赋能环保,开启资源循环新时代 城市垃圾治理难题,废品回收小程序成破局关键 随着城市化进程加速与消费水平提升,我国生活垃圾总量逐年攀升,年均增速达5%-8%,其中超30%为可回收物。然…

SkyWalking集成Kafka实现日志异步采集经验总结

SkyWalking日志异步采集架构 【重点知识】 1、【Agent】kafka-reporter-plugin-x.x.x.jar包放plugins目录后必走kafka(kafka没有正确配置就会报错) 2、【Agent】异步如不开启数据压缩,日志数据较大,pod多、业务大时容易造成网络…

C++第十六讲:红黑树

C第十六讲:红黑树 1.什么是红黑树1.1红黑树的特点 2.MyRBTree实现2.1红黑树的结构2.2红黑树的插入2.2.1插入的总体逻辑2.2.2情况一:变色2.2.3情况二:单旋 变色2.2.4情况三:双旋 变色2.2.4插入代码总结 2.3红黑树的检查2.4完整代…

KubeKey一键安装部署k8s集群和KubeSphere详细教程

目录 一、KubeKey简介 二、k8s集群KubeSphere安装 集群规划 硬件要求 Kubernetes支持版本 操作系统要求 SSH免密登录 配置集群时钟 所有节点安装依赖 安装docker DNS要求 存储要求 下载 KubeKey 验证KubeKey 配置集群文件 安装集群 验证命令 登录页面 一、Ku…

Java 值传递

1 形参&实参 方法的定义可能会用到参数,参数在程序语言中分为: 实参:用于传递给函数/方法的参数,必须有确定的值。 形参:用于定义函数/方法,接收实参,不需要有确定的值。 String hello …

开源一款I2C电机驱动扩展板-FreakStudio多米诺系列

总线直流电机扩展板 原文链接: FreakStudio的博客 摘要 设计了一个I2C电机驱动板,通过I2C接口控制多个电机的转速和方向,支持刹车和减速功能。可连接16个扩展板,具有PWM输出、过流过热保护和可更换电机驱动芯片。支持按键控制…

论文笔记(七十二)Reward Centering(三)

Reward Centering(三) 文章概括摘要3 基于值的奖励中心化4 案例研究: 以奖励为中心的 Q-learning5 讨论、局限性与未来工作致谢 文章概括 引用: article{naik2024reward,title{Reward Centering},author{Naik, Abhishek and Wan…

内部知识库的核心模块是什么?

内容概要 现代企业内部知识库的架构设计遵循系统性、可扩展性与安全性三重原则,其核心模块的协同运作构成完整的知识资产运营体系。在知识存储层,基于结构化分类的存储管理采用多级目录架构(如客户服务库、培训学习库)&#xff0…