当前位置: 首页 > 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.事件…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...