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

LVS+keepalived高可用负载均衡集群

keepalived介绍

keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。

但是keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用。

LVS高可用集群的组成

主调度器+备调度器(一般是一主二备)

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器都处于冗余状态。备用调度器是不参与集群的运转,只有主调度器出现了故障,无法运行,此时备调度器才会承担主调度器的工作

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成为冗余(基于VRRP)

  • 主服务器作用:转发数据;发送报文告诉备服务器自己在线。
  • 备服务器作用:监听主服务器发来的数据;收不到消息的时候就接替主服务器。

VRRP:keepalived是基于VRRP协议,实现LVS的高可用。解决了调度器和单节点的故障问题。

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

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

vrrp的组播通信:224.0.0.18 vrrp协议当中的主备服务器通过这个组播地址进行通信,交换主备服务器之间的运行状态。主服务器会周期性的发送VRRP报文消息,以告知其他服务器,主服务器现在的状态。

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

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

高可用集群的脑裂现象以及预防措施

高可用集群的脑裂现象及其诱发原因

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

解决方法

软件层面:

1.配置文件有问题

2.通过tcpdump抓包分析

3.重启两边服务

网络层面:

1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

2.硬件层面:

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

2.2网卡或者网卡驱动失效,IP地址配置冲突

2.3 防火墙没有配置心跳线消息的传输通道

2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

脑裂预防预防措施 

 针对脑裂现象的产生,运维人员第一时间要做的不是处理发生故障的调度器或则故障线路,而是首先确保业务不会因此中断,进行脑裂的预防尤为重要。出现问题,先保证业务的进行,再进行排障。

keepalived的体系和模块

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

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

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

LVS+keepalived的实时和部署

test1  主调度器 20.0.0.10
test2  备调度器 20.0.0.20
后端真实服务器1 : 20.0.0.50
后端真实服务器2 : 20.0.0.90
vip地址:20.0.0.100
客户端:20.0.0.60

test1
//关闭防火墙
systemctl stop firewalld
setenforce 0yum -y install ipvsadm keepalived
//安装所需工具cd /etc/keepalived.conf
cp keepalives.conf keepalives.conf.bak
//对重要文件进行备份

vim keepalived.conf
smtp_server 127.0.0.1  //line 10
route_id LVs_01        // line 12
//主备服务器名称id不能一致#vrrp_strict   //line 15
//取消严格遵守vrrp协议功能,注释该行state MASTER     //LINE 22
//表示身份,主备 备:BACKUP
interface ens33    //line 24
//指定vip的物理接口virtual_router_id 10  //26
//虚拟路由的id号priority 100 
//优先级advert-int 1
//发送报文的间隔时间(工作中一般为30)authenication {auth_type PASSauth_pass 1111
}virtuak_ipaddress {192.168.233.100//指定集群的真实地址
}
virtual-server 20.0.0.100 80 {
delay_loop 6
//健康检查的间隔时间
lb_algo rr
//负载均衡的调度算法
lb_kind DR                 //46
//指定整个LVS的工作方式,要大写
persistence_timeout 0     //48
//连接保持时间
protocol TCP
//
}real_server 20.0.0.30 80 {   //52
weight 1
//后端真实服务器的轮询权重
TCP_CHECK {
//对真实服务器的检查connect_port 80//检测目标的端口号(此处检测是30)connect_timeout 3//检测连接超时时间nb_get_retry 3//重试次数delay_before_retry 4//重试的间隔秒数}
}real_server 20.0.0.40 80 {   //52
weight 1
//后端真实服务器的轮询权重
TCP_CHECK {
//对真实服务器的检查connect_port 80//检测目标的端口号(此处检测是30)connect_timeout 3//检测连接超时时间nb_get_retry 3//重试次数delay_before_retry 4//重试的间隔秒数}
}
}
wq!

systemctl restart keepalived.service
ipvsadm -ln
//重启服务并查看

test2 
//关闭防火墙
systemctl stop firewalld
setenforce 0yum -y install ipvsadm keepalivedcd /etc/keepalived.conf
cp keepalives.conf keepalives.conf.bakscp root@192.168.233.10:/etc/keepalived/keepalived.conf /etc/keepalived
//远程复制到test2本机
//此处得修改route_id号等

安装nginxsystemctl restrat nginx
cd /usr/local/nginx/html
vim index.html
//制作访问页面
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
ifup ifcfg-lo:0
route add -host 20.0.0.100 dev lo:0
vim /etc/sysctl.confnet.ipv4.conf.lo.arp_ignore=1
//设置lo接口忽略任何接口的ARP请求net.ipv4.conf.lo.arp_announce=2
//设置lo接口仅会相应本地的IP地址,其他的接口ARP请求全部忽略
net.ipv4.conf.all.arp_ignore=1
//所有接口忽略来自任务接口的ARP请求net.ipv4.conf.all.arp_announce=2
//所有接口仅会响应本地的IP地址的ARP请求,其他的接口的ARP请求全部忽略sysctl -p 
//刷新

创建页面内容

修改内核

添加虚拟网卡

test3 test4 操作相同
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255
wqifup ifcfg-lo:0
route add -host 20.0.0.100 dev lo:0

测试

本机访问
curl 本机ip

'

客户端访问
curl 20.0.0.100

下面关闭其中一个keepalived

关闭主站

观察备站

curl 20.0.0.100依然可以负载均衡访问成功

测试轮询

查看端口加权成功

结果

keepalived+nginx实验

nginx1   20.0.0.10 主
nginx2   20.0.0.20 备

实验开始前先备份以防报错而无法修改

主站
systemctl restart nginx
yum -y install keepalived
cd /etc/keeplived
cp keepalived.conf keepalived.conf.bak

smtp_server 127.0.0.1
#vrrp_strict
virtual_route_id 51vrrp_script check_nginx {script "/opt/check_nginx.sh"interval 5
}
//添加脚本
vrrp_intance VI_1 {}virtual_ipaddress {
192.168.233.100
}
track_script {
check_nginx
}scp root@192.168.233.61:/etc/keepalived/keepalived.conf /etc/keepalives/nginx2
/opt
vim check_nginx.sh
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
then
systemctl stop keepalived
fi
wq
chmod 777 check_nginx.shnginx1
拖入脚本
chmod 777 check_nginx.sh
systemctl restart keepalived.service
ip addrnginx2
设置访问页面

总结

keepalived的工作方式基于VRRP协议

1.确定主备

2.vrrp只能有一个,出现在主服务器上。

3.通过vrrp 组播地址 224.0.0.18 发送vrrp报文,检测主的心跳

4.主备切换,主出现故障,vip地址会漂移到备服务器。

5.主恢复了,vrrp地址还会回到主

6.脑裂 主备都有VIP

(硬件层面,软件层面)

脑裂解决(软件层面):

1.检查配置文件,重启

7.keepalive不是只能和lvs搭配,也可以和其他服务配合,实现高可用

如何解决keepalived脑裂问题

1.硬件:准备两条心跳线,这样短一条依然能够传送心跳消息

2.设置防火墙一定要让心跳消息通过。

3.依靠监控软件实时检测来实现(zabbix)

脑裂如何解决

软件层面:

1.配置文件有问题

2.通过tcpdump抓包分析

3.重启两边服务

网络层面:

1.高可用服务器之间心跳线检测失败。主备之间无法进行通信。

2.硬件层面:

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

2.2网卡或者网卡驱动失效,IP地址配置冲突

2.3 防火墙没有配置心跳线消息的传输通道

2.4后端服务器的配置问题,心跳方式不同,心跳广播冲突,软件BUG

了解即可

dev 开发环境 开发人员专用

sit 测试环境 测试人员使用(开发,运维)

pre:预生产环境 开发和运维(和最终生产环境保持一致)

prd:生产环境(面向用户的环境)

相关文章:

LVS+keepalived高可用负载均衡集群

keepalived介绍 keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。 但是keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用。 LVS高可用集群的组成 主调度器备调度器&…...

解密Kubernetes:探索开源容器编排工具的内核

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

苹果手机怎么设置壁纸?解锁设置壁纸的2种方法!

手机壁纸便是我们常说的屏幕背景图,一张好看的手机壁纸能使我们的心情变得愉悦。这个壁纸可以是风景、美食、喜欢的偶像、自己养的宠物,或者是你的家人、朋友。 拥有特殊含义的照片会更让人想要设置成壁纸。苹果手机怎么设置壁纸?本文将给大…...

解决LOGITECH 罗技驱动 MAC版出现的一些问题汇总!

安装前将之前的安装文件清理干净!!!!! 罗技驱动最新安装包下载 我的鼠标是G304 1. 驱动安装一直卡在99% 运行官方下载的安装程序,卡住后关掉窗口。 在终端中执行以下命令: sudo /Users/用户名…...

PyQt5入门4——给目标检测算法构建一个简单的界面

PyQt5入门4——给目标检测算法构建一个简单的界面 学习前言要构建怎么样的界面实例使用1、窗口构建a、按钮:获取图片b、Inputs、Outputs文本提示c、Inputs、Outputs图片显示d、箭头显示e、整点祝福 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽…...

Pandas数据分析系列9-数据透视与行列转换

Pandas 数据透视表 当数据量较大时,为了更好的分析数据特征,通常会采用数据透视表。数据透视表是一种对数据进行汇总和分析的工具,通过重新排列和聚合原始数据,可以快速获得更全面的数据洞察。数据透视表在Excel中也是经常使用的一个强大功能,在Pandas模块,其提供了pivot…...

部分背包问题细节(贪心)

有一种情况是,背包可以把金币全部拿走: 如果num小于0则返回值...

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系

如果你在windows域控环境中,例如企业的网络中开启wireshark抓包,你一定会遇到一大堆各种各样的协议。不同于互联网服务(大多基于HTTP),为了实现域控中各种各样的服务,windows的域控环境中采用了非常多的协议…...

uniapp中 background-image 设置背景图片不展示问题

有问题 <view class"file-picker__box jsz" tap"jszxszUpload(jsz)"></view>.jsz {background-image: url(../../static/example_drive.png); }解决1 <view class"file-picker__box jsz" :style"{ background-image: url(…...

Elasticsearch打分机制

一 例子 xx搜索引擎,就搜索结果本身而言,xx返回了正确的结果。因为返回的结果中,都包含了搜索的关键字。而我们从逻辑上来看,这一堆广告算是咋回事!这个吐槽是从用户的角度出发的。很显然,返回的结果中,尤其是前几条,有时甚至是前几页,都跟我们想要的结果相差深远! …...

【pdf密码】为什么我的PDF文件不能复制文字?

大家现在接触PDF文件越来越多&#xff0c;有的时候在网上下载的PDF文件打开之后&#xff0c;发现选中文字之后无法复制。甚至其他功能也都无法使用&#xff0c;这是怎么回事&#xff1f;该怎么办&#xff1f; 当我们发现文件打开之后&#xff0c;编辑功能无法使用&#xff0c;很…...

vim程序编辑器

最近读书读完感觉没有读一样&#xff0c;所以决定写笔记记录下 vi的使用包括三种模式 一般模式 编辑模式 a&#xff0c;i&#xff0c;o&#xff0c;r&#xff0c;A,I,O,R 用来插入或者替换内容 命令行模式 &#xff1a;wq保存退出&#xff1a;wq!强制保存退出&#xf…...

新手如何学习挖漏洞?看这篇就够了【网络安全】

什么是漏洞挖掘 漏洞挖掘是指通过分析软件、系统或网络中存在的安全漏洞来发现并利用这些漏洞。漏洞挖掘是信息安全领域的一项重要工作&#xff0c;可以帮助企业和组织提高系统的安全性&#xff0c;避免黑客攻击和数据泄露。 漏洞挖掘的流程一般可以概括为以下几个步骤&#x…...

CentOS 7.8 kubeadm安装 k8s 1.26

CentOS 7.8 kubeadm安装 k8s 1.26 规划 集群 主机名IP地址k8s-master01192.168.200.101k8s-master02192.168.200.102k8s-master03192.168.200.103k8s-node01192.168.200.201k8s-node02192.168.200.202 VIP(虚拟IP) 192.168.200.80 Harbor http://192.168.200.50 基础 …...

成都瀚网科技有限公司抖音小店:创新营销引领电商潮流

在当今数字化时代&#xff0c;抖音作为一款备受欢迎的短视频平台&#xff0c;不仅吸引了大量用户的关注&#xff0c;还为众多电商企业提供了新的销售渠道。成都瀚网科技有限公司抖音小店便是其中之一&#xff0c;凭借其独特的营销策略和优质的产品&#xff0c;成为了抖音电商领…...

警惕!又2本期刊被“On Hold”!

【SciencePub学术】 此前&#xff0c;继一本SSCI期刊被取消“On hold”标识后&#xff0c;仍处于“On Hold”状态的期刊有6本&#xff0c;其中包括4本SCI期刊和2本ESCI期刊。近日&#xff0c;经小编查询&#xff0c;又新增2本“On Hold”期刊&#xff0c;详情如下&#xff1a;…...

一台服务器成了哆啦A梦的神奇口袋

如果我有一台服务器&#xff0c;那简直就像打开了哆啦A梦的神奇口袋&#xff01;可以做的事情可太多啦&#xff0c;比如&#xff1a; 学习和探险 首先嘛&#xff0c;当然是用来学习和探险啦&#xff01;我可以安装和配置各种操作系统、编程语言和工具&#xff0c;深入了解计…...

java 关闭access文件资源后,无法删除文件

复现问题 // 数据库驱动String DRIVER_CLASS "net.ucanaccess.jdbc.UcanaccessDriver";// 数据库连接地址String DB_URL "jdbc:ucanaccess://D/test.mdb";String DB_USER ""; // 数据库用户名称String DB_PASSWORD "";// 数据库用…...

Typecho 添加 Emoji 表情报错「解决方案」

Typecho 添加 Emoji 表情报错 文章目录 Typecho 添加 Emoji 表情报错前言Emoji 表情utf8mb4 与 UTF8 解决方案[1] 数据库编码更改[2] 数据库配置文件更改 前言 Typecho 添加 Emoji 表情不支持&#xff0c;报错 Database Query Error Emoji 表情 Emoji 就是表情符号&#xff0c…...

【C#】委托与事件

目录 一、委托 1.什么是委托 2.委托类型的声明与初始化 3.委托类型引用方法的调用 4.使用委托类型作为方法的参数 5.Action委托 6.Func委托 7.通用类型冒泡排序 8.多播委托 二、Lambda表达式 1.匿名方法 2.Lambda表达式表示匿名方法 三、事件 1.什么是事件 2.事件…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

云原生安全实战:API网关Envoy的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口&#xff0c;负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...

react菜单,动态绑定点击事件,菜单分离出去单独的js文件,Ant框架

1、菜单文件treeTop.js // 顶部菜单 import { AppstoreOutlined, SettingOutlined } from ant-design/icons; // 定义菜单项数据 const treeTop [{label: Docker管理,key: 1,icon: <AppstoreOutlined />,url:"/docker/index"},{label: 权限管理,key: 2,icon:…...

Git 命令全流程总结

以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结&#xff0c;按操作场景分类整理&#xff1a; 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...