当前位置: 首页 > news >正文

LVS+keepalived高可用集群

1、定义

keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,keepalived实现的是调度器的高可用,但keepalived不只为lvs集群服务的,也可以做其他代理服务器的高可用,比如nginx+keepalived也可实现高可用(重点)

2、作用

解决代理服务器的高可用问题

lvs的高可用集群:主调度器和备调度器(一主一备、一主两备)

3、工作方式

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理,其余的备用调度器都处于冗余状态,不参与集群的运转,当主调度器出现故障无法运行时,备用调度器承担主调度器的工作,一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又处于冗余状态

4、keepalived是基于VRRP协议实现lvs服务的高可用,解决了调度器单节点的故障问题

5、VRRP协议:提高网络路由器的可靠性开发的一种协议

工作原理:

(1)选举主备。预先设定好主和备的优先级,选举出主和备。主的优先级较高,备的优先级低,一旦开启服务,优先级高的会自动抢占主的位置

(2)检测主备。依靠VRRP组播通信检测主、备是否正常运转。组播通信地址:224.0.0.18。VRRP协议当中的主备服务器通过组播地址进行通信,交换主备服务器之间的运行状态,主服务器会周期性的发送VRRP报文消息,告知其他备服务器主服务器现在的状态

(3)主备切换。主服务器发生故障或者不可达,VRRP协议会把请求转移到备服务器。通过组播地址224.0.0.18,VRRP可以迅速的通知其他服务器立即主备切换,并确保新的主服务器可以正常的处理客户端的请求

(4)故障恢复。一旦主服务器恢复通信,由组播地址224.0.0.18进行通信,发现恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器调度和接收请求

6、LVS-DR模式结合keepalived数据流向

7keepalived的体系模块

全局模块:core模块。负责整个keepalived的启动、加载和维护

VRRP模块:实现VRRP协议,主备切换

check模块:配置在真实服务器的模块中。负责健康检查,检查后端真实服务器的健康状况

8、(重点)脑裂:主备同时拥有VIP地址

1、定义:在高可用系统中,联系两个节点的心跳线,本来是一体的,是一个动作协调的高可用系统。若心跳线断开后分裂成两个独立的个体,主备之间失去了联系,都以为对方出现了故障,两个调度器像脑裂人一样开始抢占主的位置和VIP地址,此时主服务器有VIP地址,备服务器也有VIP地址,导致整个集群失败

2、问题原因

  1. 软件层面:

重启主备服务器的keepalived服务(先重启主,再重启备,再模拟一下故障恢复)

配置文件

②tcpdump抓包分析

  1. 网络层面:

高可用服务器之间心跳线检测失败(主备之间无法进行通信,ping测试一下)

  1. 硬件层面:

①连接主备之间的心跳线老化

②网卡或网卡的驱动失效

③IP地址配置冲突

④防火墙没有配置心跳线消息的传输通道,导致检测失败(VRRP消息发不出去)

⑤后端服务器的配置问题(心跳方式不同、心跳广播冲突、软件bug等)

3、如何解决脑裂问题?

①硬件:准备两条心跳线,这样断了一条依然能够传送心跳消息

②设置防火墙,一定让心跳消息通过

③依靠监控软件实时监测(zabbix软件)

环境:

dev开发环境——开发人员专用(与运维无关)

sit测试环境——测试人员使用(开发、运维都可以用)

pre预生产环境——运维和开发使用(和最终的生产环境保持一致)

prd生产环境——面向用户的最终环境

常用的是开发、测试环境一块用,再加上生产环境

9、LVS+keepalived实现高可用实验

keepalived不能有注释;启动keepalived会自动生成ipvsadm配置,不需要配置ipvsadm配置文件;keepalived配置错误照样能重启

实验条件:

test1——主调度器——20.0.0.10——keepalived、ipvsadm服务

test2——备调度器——20.0.0.20——keepalived、ipvsadm服务

nginx1——后端真实服务器1——20.0.0.11——nginx服务

nginx2——后端真实服务器2——20.0.0.21——nginx服务

nginx3——客户端——20.0.0.31

VIP地址:20.0.0.100(自定义,必须和DIP和RIP在同一网段)

实验步骤:

1、主调度器test1——20.0.0.10

(1)安装、重启keepalived、ipvsadm服务

保存配置文件:ipvsadm-save > /etc/sysconfig/ipvsadm

(2)保存配置文件

(3)修改keepalived配置文件,绑定VIP地址和后端真实服务器地址

主和备的名称不能一样,否则报错

虚拟路由器的id号(virtual_router_id 51),主备一致

(4)关闭主服务器的转发功能和重定向

net.ipv4.ip_forward = 0

net.ipv4.conf.all.send_redirects = 0

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

2、备份服务器test2——20.0.0.20

(1)安装ipvsadm、keepalived服务

(2)备份keepalived配置文件

(3)远程复制主服务器的keepalived配置文件

(4)修改keepalived配置文件vim /etc/keealived/keepalived.conf

3、检测此时VIP地址在哪台服务器上

4、后端服务器nginx1、nginx2设置静态页面,便于检测轮询

5、后端服务器nginx1、nginx2配置虚拟网卡,绑定VIP地址

(1)nginx1

①配置虚拟接口

②绑定回环接口

③内核参数优化(只有真实服务器的RIP地址可以返回响应结果)

(2)nginx2

①配置虚拟接口

②绑定回环接口

③内核参数优化(只有真实服务器的RIP地址可以返回响应结果)

6、测试

7、模拟故障

(1)主服务器故障——验证高可用,主备是否切换

结论:主备切换成功

(2)主服务器恢复正常运行——VIP地址是否能切换到原主服务器

(3)节点服务器出现故障——假设RS1故障

测试结果:只能访问另一个后端真实服务器

(4)节点服务器恢复正常运行——假设RS1正常运行

测试结果:根据轮询算法后端真实服务器

10、nginx+keepalived实现高可用实验

nginx依靠脚本检测主备服务器的健康生命体征

实验条件:

nginx4——主服务器——20.0.0.41——keepalived、ipvsadm服务

nginx5——备服务器——20.0.0.51——keepalived、ipvsadm服务

nginx6——客户端——20.0.0.61——nginx服务

VIP地址:20.0.0.100(自定义,必须和DIP和RIP在同一网段)

实验步骤:

1、主服务器nginx4

(1)安装ipvsadm、keepalived服务

(2)备份keepalived配置文件

(3)修改keepalived配置文件

(4)创建周期性执行脚本check_nginx.sh

(5)下载脚本文件到桌面 sz check_nginx.sh

(6)建立静态页面,便于识别

2、备服务器nginx5

(1)安装ipvsadm、keepalived服务

(2)备份keepalived配置文件

(3)远程连接复制主服务器的keepalived配置文件

(4)修改keepalived配置文件

(5)下载刚刚的周期性脚本执行文件并赋权

(6)建立静态页面,便于识别

3、检测VIP 地址。此时VIP地址在主服务器上

4、测试。没有轮询算法

5、模拟主服务器故障

测试结果:备服务器顶替主服务器工作

6、模拟备服务器故障

测试结果:主服务器恢复正常运行

相关文章:

LVS+keepalived高可用集群

1、定义 keepalived为lvs应运而生的高可用服务。lvs的调度器无法做高可用,keepalived实现的是调度器的高可用,但keepalived不只为lvs集群服务的,也可以做其他代理服务器的高可用,比如nginxkeepalived也可实现高可用(重…...

虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比

伴随着 IT 云化转型的逐步推进,越来越多的用户加入应用容器化改造的行列,并使用 Kubernetes(K8s)进行容器部署管理。然而,令不少用户感到困惑的是,由于大部分应用此前都部署在虚拟化或超融合环境&#xff0…...

C语言程序设计——题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 程序分析: 假设该数为 x。 1、则:x 100 n2, x 100 168 m2 2、计算等式:m2 - n2…...

Python中使用cv2.resize()函数批量自定义缩放图像尺寸

目录 常用插值缩放方法缩放示例代码总结 常用插值缩放方法 cv2.resize()函数中的interpolation参数指定了图像缩放时使用的插值方法。以下是常用的插值方法: cv2.INTER_NEAREST:最近邻插值。该方法通过选择最接近目标像素的原始像素来进行插值。它是最…...

驱动开发5 阻塞IO实例、IO多路复用

1 阻塞IO 进程1 #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> #include <unistd.h> #include <string.h>int main(int argc, char co…...

ElasticSearch:实现高效数据搜索与分析的利器!项目中如何应用落地,让我带你实操指南。

1.难点解答 收集到几个问题&#xff1a; elasticsearch是单独建一个项目&#xff0c;作为全文搜索使用&#xff0c;还是直接在项目中直接用&#xff1f; ES 服务器是要单独部署的&#xff0c;你可以把 ES 理解为 Redis。 新增数据时&#xff0c;插入到mysql中&#xff0c;需不…...

2023了,是时候使用pnpm了!

2023了&#xff0c;是时候使用pnpm了&#xff01; Excerpt 2023了&#xff0c;是时候使用pnpm了&#xff01; 什么是pnpm pnpm代表performant npm&#xff08;高性能的npm&#xff09;&#xff0c;同npm和Yarn&#xff0c;都属于Javascript包管理安装工具&#xff0c;它较npm和…...

asp.net文档管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net文档管理系统是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言开发 asp.net文档管理系统 二、功能介绍 (1…...

Parallels Client for Mac:改变您远程控制体验的革命性软件

在当今数字化的世界中&#xff0c;远程控制软件已经成为我们日常生活和工作中不可或缺的一部分。在众多远程控制软件中&#xff0c;Parallels Client for Mac以其独特的功能和出色的性能脱颖而出&#xff0c;让远程控制变得更加简单、高效和灵活。 Parallels Client for Mac是…...

Julia数组详解

文章目录 向量数列矩阵特殊数组数组函数 Julia系列&#xff1a;编程初步 向量 Julia中有两种向量&#xff0c;一种是类型统一的&#xff0c;另一种则可包含不同类型的变量&#xff0c;例如下面两个向量都是允许存在的 aNum [1,2,3] # 类型为 3-element Vector{Int64} aAny…...

用事务代码查看视图的函数

文章目录 1 Introduction2 Code 1 Introduction If we continue to see view with T-code. We can use the function for it . 2 Code REPORT z_websrv_con.CALL FUNCTION VIEW_MAINTENANCE_CALLEXPORTINGaction U "操作类型&#xff1a;U修改…...

LuatOS-SOC接口文档(air780E)--libcoap - coap数据处理

libcoap.new(code, uri, headers, payload) 创建一个coap数据包 参数 传入值类型 解释 int coap的code, 例如libcoap.GET/libcoap.POST/libcoap.PUT/libcoap.DELETE string 目标URI,必须填写, 不需要加上/开头 table 请求头,类似于http的headers,可选 string 请求体…...

js控制checkbox单选,获取checkbox的值,选中checkbox

声明&#xff1a;网上的资料杂七杂八的搞得我一个不熟悉前端的后端开发者弄起来贼难受&#xff0c;现在将实现了的做一个整合&#xff0c;希望能给你们带来点帮助&#xff08;主要还是帮助我自己(●ˇ∀ˇ●)&#xff0c;防止丢失&#xff09; html代码组件示例 <div styl…...

MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)

一)MYSQL中的锁(知识补充) 可以通过In_use字段来进行判断是否针对于表进行加了锁 1)对于undo log日志来说:新增类型的&#xff0c;在事务提交之后就可以清除掉了&#xff0c;修改类型的&#xff0c;事务提交之后不能立即清除掉这些日志会用于mvcc只有当没有事务用到该版本信息时…...

ubuntu tools

1 cloc calculate lines of your code sudo apt-get install cloccloc ./file...

LeetCode 155. 掷骰子等于目标和的方法数:动态规划

【LetMeFly】1155.掷骰子等于目标和的方法数&#xff1a;动态规划 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-dice-rolls-with-target-sum/ 这里有 n 个一样的骰子&#xff0c;每个骰子上都有 k 个面&#xff0c;分别标号为 1 到 k 。 给定三个整数 …...

PostgreSQL数据库从入门到精通系列之五:安装时序数据库TimescaleDB的详细步骤

PostgreSQL数据库从入门到精通系列之五:安装时序数据库TimescaleDB的详细步骤 一、下载PostgreSQL数据库yum源二、创建TimescaleDB存储库三、更新本地存储库列表四、安装TimescaleDB五、初始化PostgreSQL数据库六、启动Postgresql数据库服务七、以超级用户身份连接到PostgreSQ…...

软件测试(五)自动化 selenium

文章目录 自动化测试单元测试&#xff1a;单元测试&#xff1a;UI自动化 selenium工具定义特点&#xff1a;原理&#xff1a;seleniumjava环境搭建SeleniumAPI获取测试结果&#xff1a;添加等待浏览器操作键盘事件鼠标事件多层框架/窗口定位下拉框处理弹窗处理上传文件操作关闭…...

Android grantUriPermission的使用场景和方式

#grantUriPermission 作用 临时授权。 背景&#xff1a;FileProvider引入后应用之间想访问文件&#xff0c;都需要使用此接口。特别是两个独立的应用之间互通数据的时候。例如我们应用从图库获取文件的uri&#xff0c;显示在应用内的ImageView中。 #grantUriPermission 使用方…...

2023高频前端面试题-vue

1. 什么是 M V VM Model-View-ViewModel 模式 Model 层: 数据模型层 通过 Ajax、fetch 等 API 完成客户端和服务端业务模型的同步。 View 层: 视图层 作为视图模板存在&#xff0c;其实 View 就是⼀个动态模板。 ViewModel 层: 视图模型层 负责暴露数据给 View 层&…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...