keepalived+nginx实现高可用的案例详解(主主模式)

news2024/9/27 20:35:43

文章目录

    • 前言
      • keepalived主备模式和主主模式有什么区别
        • 1. 主备模式(Master-Backup Mode)
        • 2. 主主模式(Active-Active Mode 或 Dual Master Mode)
        • 主备模式 vs 主主模式 的区别
        • 总结:
      • 环境
      • 案例实现具体步骤
        • ngx1
        • ngx2
        • 验证


前言

keepalived主备模式和主主模式有什么区别

Keepalived 是用于实现高可用性和负载均衡的软件,通常用于配置虚拟路由冗余协议(VRRP)。在使用 Keepalived 时,可以配置两种常见的模式:主备模式 和 主主模式。它们在高可用性和负载均衡的实现上有不同的工作方式。下面详细解释这两种模式及它们的区别。

1. 主备模式(Master-Backup Mode)

概念:
主备模式是最常见的一种高可用性配置方式。在这种模式下,只有一个主节点(MASTER)在提供服务,其他节点作为备份节点(BACKUP),只有在主节点宕机或失效时,备份节点才会自动接管并提供服务。

工作流程:
主节点(MASTER):主节点运行正常时,它负责处理所有的流量或请求。它拥有指定的虚拟 IP 地址(VIP),客户端通过这个虚拟 IP 进行访问。
备节点(BACKUP):备节点处于待命状态,持续监控主节点的状态。如果主节点宕机或无法提供服务,备节点就会自动提升为主节点,接管虚拟 IP 并开始处理流量。
故障切换:当主节点恢复时,它可以再次成为主节点(根据优先级高低),备节点会退回到待命状态。

主要特点:
单点提供服务:在任何时候,只有一个节点(主节点)在提供服务。备份节点不处理流量,除非主节点失效。
高可用性(HA):这是典型的高可用性架构,目的是避免服务中断。
低资源利用率:备节点在大多数时候只是等待,没有实际工作,资源利用率相对较低。

场景举例:
一个简单的 Web 服务高可用性场景,主节点在正常情况下处理所有的 HTTP 请求,备份节点在主节点宕机时接管服务。
举例配置(简化版):

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 90
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}

state MASTER 的节点负责处理流量,state BACKUP 的节点则等待主节点失效。

2. 主主模式(Active-Active Mode 或 Dual Master Mode)

概念:
在主主模式下,两个节点同时工作,都可以提供服务。它们各自处理部分流量,通常结合负载均衡来实现,同时提高资源利用率和服务的可用性。这里没有严格的“主”和“备”的区分,而是两个节点都处于活动状态。

工作流程:
两个节点同时处理流量:在主主模式下,两个节点共享流量。可以通过负载均衡策略(如轮询、最少连接等)来将客户端的请求分发到不同的节点上。
虚拟 IP(VIP)共享:两个节点可能共享多个虚拟 IP,每个节点管理不同的 VIP。
故障切换:如果其中一个节点宕机或失效,另一个节点可以接管其负责的虚拟 IP 和流量,继续提供服务。

主要特点:
负载均衡:主主模式的主要特点是负载均衡,两台服务器同时提供服务。
高资源利用率:因为两个节点都在工作,资源得到了充分利用。
高可用性(HA)+ 负载均衡(LB):除了高可用性之外,主主模式还能提供负载均衡功能。
复杂性:相对主备模式,配置和管理更加复杂,特别是在同步数据、会话保持等方面。

场景举例:
高并发的 Web 应用服务器。客户端的请求通过负载均衡算法分配给两台服务器,以减轻单台服务器的负担。
数据库集群:两个数据库节点同时提供读服务,写操作通过主节点进行。
举例配置(简化版):

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.10.112
    }
}

这里,两个节点分别作为不同 VRRP 实例的 MASTER,各自处理不同的虚拟 IP(192.168.10.111 和 192.168.10.112)。这就实现了两个节点同时工作。

主备模式 vs 主主模式 的区别
项目主备模式主主模式
节点角色一个主节点,其他节点为备节点两个节点都是主节点,均同时工作
流量处理只有主节点处理流量两个节点都处理流量(负载均衡)
资源利用率备节点不处理流量,资源利用率较低两个节点同时工作,资源利用率高
故障切换主节点失效时备节点接管一个节点失效时另一个节点接管该节点的任务
适用场景简单的高可用性场景,避免单点故障需要高可用性且负载较大的场景,如负载均衡
复杂性配置简单,管理容易配置复杂,管理需要负载均衡和同步机制
总结:

主备模式
强调高可用性,主要目的是避免服务中断,但在资源利用率上存在一些浪费,因为备份节点在正常情况下不处理流量。

主主模式
则不仅提供高可用性,还能够同时处理流量,解决资源利用的问题,并通过负载均衡来分摊负载。不过,主主模式的配置和管理更复杂,适用于负载较大的场景。

环境

主机名ip服务虚拟ip
ngx1192.168.10.11nginx+keepalived192.168.10.111
ngx2192.168.10.12nginx+keepalived192.168.10.111

案例实现具体步骤

在双主模式下,两台服务器都处于活动状态,并且各自绑定一个公网虚拟 IP。
当其中一台服务器发生故障时,另一台服务器会接管发生故障服务器的公网虚拟 IP。
配置步骤:
在两台服务器上安装 Nginx 和 Keepalived。
在两台服务器上都配置 Keepalived 为双主模式,设置相同的优先级。
配置健康检查脚本,用于检测 Nginx 服务是否运行正常。
配置两个虚拟 IP 地址(VIP),每个服务器一个。

ngx1

安装nginx和keepalived

yum -y install nginx keepalived

作为主端配置

vim /etc/keepalived/keepalived.conf

留下需要的配置即可
下面是配置完后的示例

global_defs {
   router_id LVS_DEVEL1
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.112
    }
}

解释:
这是一个使用 Keepalived 配置的示例文件。Keepalived 通常用于在 Linux 系统中配置高可用性(HA)和负载均衡。它实现了 VRRP(Virtual Router Redundancy Protocol)协议,用于管理虚拟 IP 地址的主备关系,以确保在主节点故障时备节点能够自动接管虚拟 IP。

1. global_defs 配置块

plaintext
global_defs {
   router_id LVS_DEVEL1
}

global_defs: 全局配置选项。
router_id: 这是一个全局唯一的路由器标识符,可以使用任意字符标识。通常用于日志文件中标识此节点。比如 LVS_DEVEL1 表示这个 Keepalived 配置的名称是 LVS_DEVEL1。
2. vrrp_instance 配置块
文件中有两个 vrrp_instance 配置块,分别命名为 VI_1 和 VI_2,表示两个不同的 VRRP 实例。

vrrp_instance VI_1
plaintext
vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_1: 定义一个 VRRP 实例,实例名称为 VI_1。
state MASTER: 指定当前节点为该实例的主节点(MASTER)。在同一实例中,主节点和备节点(BACKUP)之间共享虚拟 IP 地址。
interface ens33: 指定 Keepalived 监控的网络接口(如 ens33)。这个接口是虚拟 IP 将绑定的物理网络接口。
virtual_router_id 51: 虚拟路由器的 ID,用于识别 VRRP 实例。这个 ID 应该在网络中是唯一的(通常范围为 1-255)。
priority 100: 优先级,取值范围为 1-255,数值越大优先级越高。这里设置了 100,因此在正常情况下,该节点将作为 MASTER。
advert_int 1: 设置 VRRP 心跳包的通告间隔时间(秒)。表示每 1 秒发送一次 VRRP 报文。
authentication:
auth_type PASS: 设置验证类型为密码验证。
auth_pass 1111: 设置密码。两台设备在同一个 VRRP 实例中进行通信时,密码需要相同。
virtual_ipaddress: 定义该实例管理的虚拟 IP 地址(VIP)。在该示例中是 192.168.10.111。

vrrp_instance VI_2
plaintext
vrrp_instance VI_2 {
    state BACKUP
    interface ens33
    virtual_router_id 52
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.112
    }
}

vrrp_instance VI_2: 定义了另一个 VRRP 实例,实例名称为 VI_2。
state BACKUP: 指定该节点在 VI_2 实例中的状态为备节点(BACKUP)。
virtual_router_id 52: 此实例的虚拟路由器 ID 与 VI_1 中的 51 不同,表明 VI_2 是一个独立的实例。
priority 99: 优先级设置为 99,表示在 VI_2 实例中,该节点的优先级比 VI_1 的 MASTER 节点优先级低,因此它不会成为 MASTER。
virtual_ipaddress: 定义该实例管理的虚拟 IP 地址(VIP)。在该示例中是 192.168.10.112。

配置文件整体解析
配置文件定义了两个 VRRP 实例 VI_1 和 VI_2,分别管理 192.168.10.111 和 192.168.10.112 两个虚拟 IP 地址。
VI_1 的 state 为 MASTER,优先级为 100,因此该节点在 VI_1 实例中为主节点。
VI_2 的 state 为 BACKUP,优先级为 99,因此该节点在 VI_2 实例中为备节点。
VI_1 和 VI_2 实例使用相同的网络接口(ens33)进行 VRRP 通信。
两个实例使用了相同的身份验证密码(auth_pass 为 1111),保证了通信的安全性。

然后创建一个测试页面

echo web1 > /usr/share/nginx/html/index.html

启动nginx和keepalived

systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
ngx2

安装nginx和keepalived

yum -y install nginx keepalived
vim /etc/keepalived/keepalived.conf

留下需要的配置即可
下面是配置完后的示例

global_defs {
   router_id LVS_DEVEL2
}
vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
}

vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.112
    }
}

然后创建一个测试页面

echo web2 > /usr/share/nginx/html/index.html

启动nginx和keepalived

systemctl start nginx
systemctl enable nginx
systemctl start keepalived
systemctl enable keepalived
验证

ngx1查看ip

ip add

可以看见ngx1为主的虚拟ip 192.168.10.11
在这里插入图片描述

ngx2查看ip

ip add

可以看见ngx2为主的虚拟ip 192.168.10.12
在这里插入图片描述

访问测试
192.168.10.111
在这里插入图片描述
关闭ngx1后

systemctl stop keepalived

虚拟地址消失

ip add

在这里插入图片描述
出现在ngx2上
在这里插入图片描述
同时访问也是ngx2的页面
在这里插入图片描述

同时也能访问192.168.10.112
在这里插入图片描述

192.168.10.112同理
就不多叙述了。

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

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

相关文章

【教学类-56-05】数感训练——数字05(指定数字出现次数,速度快)

背景需求: 昨天有客户订购“阿拉伯数字的数感训练” 我查看文件夹,发现前期没有生成过0-50的数字(只研究了学号数感训练的学具) 赶紧用之前写过的代码生成了一份 【教学类-56-01】数感训练——数字01(同样的数字涂色…

猫头虎分享已解决Bug:npm warn old lockfile Could not fetch metadata for yallist@3.1.1

🐯猫头虎分享已解决Bug:npm warn old lockfile Could not fetch metadata for yallist3.1.1 今天有粉丝问猫哥:“🐯猫头虎,我在使用 npm 安装依赖时遇到了一个错误提示 Could not fetch metadata for yallist3.1.1&am…

凿岩机械液压比例多路阀控制器

工程机械应用的BEUEC比例放大器控制比例多路阀主要应用于以下几大类设备中: 1. 挖掘机械:包括挖掘机、挖掘装载机、挖掘船等,主要用于挖掘土壤、煤和矿石等物料。 2. 铲土运输机械:如推土机、铲运机、装载机等,主要用…

亚马逊测评,容易掉评是什么原因,怎么解决

大家好,今天来深入探讨如何有效提升亚马逊测评中的留评率,并解析那些导致评论掉落或难以留下的常见原因,以便采取针对性的策略来优化这一过程。作为卖家,提升留评率无疑是提升产品曝光度和销量的关键一环。 亚马逊测评掉评与留评…

【机器学习】目标分类算法概述

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 目标分类算法概述传统机器学习方法支持向量机(SVM)决策树和随机森林特征提取 基…

docker_阿里云镜像仓库

1.创建个人实例 登录阿里云——控制台——容器镜像服务——创建个人版实例 2.设置密码 设置后可在终端复制上图2测试 [rootserver ~]# sudo docker login --usernameyou_aliyun_name crpi-8y14tvgewmc6tisz.cn-hangzhou.personal.cr.aliyuncs.com Password: WARNING! Your …

Linux环境下安装python

Linux 环境下安装python 以下是在Linux环境下安装Python - 3.9.4.tgz的详细步骤:1. 下载Python - 3.9.4.tgz(如果未下载)2.解压文件3.安装依赖项(如果需要)4.配置和编译5.安装6.创建一个别名(alias&#xf…

中国车主,撑起天猫又一个万亿赛道

"今年双十一,预计会有超过1亿消费者来淘宝天猫汽车类目消费。3~5年之后,天猫汽车有望冲刺为阿里继大服饰、大快消、家装家电等之后又一个GMV(商品成交总额)破万亿的品类。" 淘天集团汽车事业部总经理、天猫养车总裁无封…

UART配置流程

S3C2440A 的通用异步收发器(UART)配有3 个独立异步串行I/O(SIO)端口,每个都可以是基于中断或基于DMA 模式的操作。换句话说,UART 可以通过产生中断或DMA 请求来进行CPU 和UART 之间的数据传输。UART 通过使…

网络安全 DVWA通关指南 DVWA Weak Session IDs(弱会话)

DVWA Weak Session IDs(弱会话) 文章目录 DVWA Weak Session IDs(弱会话)Low LevelMedium LevelHigh LevelImpossible Level 参考文献 WEB 安全靶场通关指南 相关阅读 Brute Force (爆破) Command Injection(命令注入…

Kafka学习笔记(一)Kafka基准测试、幂等性和事务、Java编程操作Kafka

文章目录 前言4 Kafka基准测试4.1 基于1个分区1个副本的基准测试4.2 基于3个分区1个副本的基准测试4.3 基于1个分区3个副本的基准测试5 Java编程操作Kafka5.1 引入依赖5.2 向Kafka发送消息5.3 从Kafka消费消息5.4 异步使用带有回调函数的生产消息6 幂等性6.1 幂等性介绍6.2 Kaf…

【linux】linux中如何通过Logstash处理、结合logrotate分割日志

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

盘点:App 移动自动化测试工具

App移动端测试工具非常多,首先 区分 Android 和 iOS,以及 harmonyos 平台,每个平台下都有自己的自动化测试工具。自动化工具又区分 调试工具、monkey 工具、UI自动化工具。 本文就来盘点以下,当下主流的app自动化测试工具。 Andr…

文档信息提取系统源码分享

文档信息提取检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

客户服务升级指南:如何以细节赢得客户忠诚

在当今这个竞争激烈的市场环境中,客户忠诚度已成为企业生存与发展的关键所在。而要想赢得并维持客户的忠诚,仅凭优质的产品或服务已远远不够,更需要企业在客户服务上下足功夫,从每一个细节入手,打造超越客户期待的服务…

C++简单缓冲区类设计

目录 1.引言 2.静态缓冲区 3.动态缓冲区 4.数据引用类 5.自动数据引用类 6.几种缓冲区的类关系图 7.注意事项 8.完整代码 1.引言 在C中,设计静态和动态缓冲区类时,需要考虑的主要差异在于内存管理的方式。静态缓冲区类通常使用固定大小的内存区域…

【机器学习案列】基于随机森林和xgboost的二手车价格回归预测

一、项目分析 1.1 项目任务 kaggle二手车价格回归预测项目,目的根据各种属性预测二手车的价格。 1.2 评估准则 评估的标准是均方根误差: 1.3 数据介绍 数据连接https://www.kaggle.com/competitions/playground-series-s4e9/data?selecttrain.csv 其…

基于 Java Swing 实现的超级玛丽游戏

一、项目概述 > 这是一个基于 Java Swing 的游戏项目,旨在实现一个支持自定义地图的超级玛丽游戏。 > 游戏画面精美,包含多种功能和亮点,如地图编辑器、不同状态的马里奥、多种怪物和道具等。 二、项目演示 > 地图编辑器 > …

Mac写入U盘文件如何跨平台使用 Mac电脑怎么把U盘文件传送到电脑 mac怎么用u盘拷贝文件

不知道你在使用Mac电脑拷贝文件的时候有没有遇到过无法写入U盘的问题,这通常是由于Mac和Windows之间的兼容问题引起的。下面我将为大家详细介绍Mac写入U盘文件如何跨平台使用以及Mac如何将U盘文件复制到电脑。 一、Mac写入U盘文件如何跨平台使用 在Mac电脑上将文件…

MySQL第11讲--多表查询的介绍

文章目录 前言多表关系多表查询概述多表查询的分类连接查询内链接外链接自连接 联合查询子查询标量子查询列子查询行子查询表子查询 前言 在MySQL第10讲–约束的介绍中讲了数据库的几种约束条件:非空约束、唯一约束、主键约束、外键约束、检查约束、默认约束。下图对…