LVS+keepalived——高可用集群

news2024/9/23 1:31:08

LVS+keepalived——高可用集群

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

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

lvs的高可用集群是建立在主调度器和备调度器(可以有多个)一般是一主两备或一主一备。

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

一旦主调度器恢复工作,继续由主调度器进行处理,备调度器又成了冗余。

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

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

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

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

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

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

lvs-DR模式结合keepalived

keepalived+LVS-DR实验

主调度器 20.0.0.20

备调度器 20.0.0.30

真实服务器1 20.0.0.25

真实服务器2 20.0.0.26

vip地址 20.0.0.100

客户端 随机

关闭五台机器的防火墙和安全机制

在主备服务器上安装架构

yum -y insstall ipvsadm keepalived

在后端真实服务器25 26 都安装nginx

回到调度器主机20

给文件做备份

vim keepalived.conf

keepalived的体系模块

全局模块:

core模块,负责整个keepalived启动加载和维护。

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

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

回到实验

在全局模块中配置邮箱地址 127.0.0.1

router_id LVS_01
#主和备的id不能一致

注释vrrp_strict
#取消严格遵守VRRP协议功能。不取消vip无法连接

进入vrrp模块

state MASTER
#标识身份,主:MASTER  备:BACKUP

interface  ens33
#指定vip地址的物理接口

virtual_router_id 51
#虚拟路由器的id号。主备必须保持一致

priority 100
#优先级

advert_int 1
#发送报文的间隔时间。工作环境中不用频繁的发送。工作中设置10秒左右或者30秒左右即可

auth_type PASS

auth_pass 1111
#可以不动如果需要改动。必须主备一致。默认即可

virtual_ipaddress {

20.0.0.100

}
#指定集群的vip地址

virtual_server 20.0.0.100 80 {

delay_loop 6
#健康检查的间隔时间。检查的是后端真实服务器

lb_algo rr
#负载均衡的调度算法

lb_kind DR
#指定LVS集群的工作方式。工作方式要大写

persistence_timeout 0
#连接保持时间50秒,方便实验所以改成0

protocol TCP
#协议端口

}

real_server 20.0.0.25 80 {

weight 1
#后端真实服务器的轮询权重

添加配置

TCP_CHECK {
#心跳线。检查后端真实服务器的心跳线

connect_port 80
#检测目标的端口号

connect_timeout 3
#检测连接超时时间。3秒

nb_get_retry 3
#重试的次数。3次

delay_before_retry 4
#重试的间隔秒数。4秒

}
}

real_server 20.0.0.26 80 {

weight 1
#后端真实服务器的轮询权重

添加配置

TCP_CHECK {
#心跳线。检查后端真实服务器的心跳线

connect_port 80
#检测目标的端口号

connect_timeout 3
#检测连接超时时间。3秒

nb_get_retry 3
#重试的次数。3次

delay_before_retry 4
#重试的间隔秒数。4秒

}
}

}

保存退出后重启服务

restart keepalived

ipvsadm -ln #查看是否成功

ipaddr不需要手动配置会自动生成

关闭调度功能

主调度器20配置完毕

到备调度器30

远程复制

更改备的id名称

更改优先级和名称

进入后端真实服务器25

cd html

vim index.html

this is test 1

配置虚拟网卡

vim ifcfg-lo:0

ifup ifcfg-lo:0

ifconfig 查看一下

curl 20.0.0.25 测试一下

进入后端26

vim ifcfg

到客户端主机 curl 20.0.0.100 测试一下

集群工作正常。开始测试keepalived

回到主调度器20

关闭主调度器20的keepalived

ip addr 查看vip地址是否还在

再到副调度器30查看是否有vip地址

再到客户端测试是否能访问

回到主调度器20

恢复keepalived

看看主调度器的vip能否回来

再回到30调度器查看vip在不在

回到客户端测试能否访问

实验结束

实验结果测试关闭主站vip转移

验证节点服务器失效和恢复

关闭和开启nginx服务测试

如果节点失效还可以加入集群

主站图:

副站图:

测试结果:

重启主站图:

副站图:

结果图:

测试轮询

轮询结果

keepalived+nginx实验

主nginx1 20.0.0.20

备nginx2 20.0.0.30

vip地址 20.0.0.100

客户端 20.0.0.40

准备三台nginx

关闭三台机器的防火墙和安全机制

启动20和30的nginx服务不需要安装ipvs只安装keepalived

改配置文件之前先备份

先配置主20

vim keepalived

在全局配置和vrrp配置中间插入周期性执行的脚本

vrrp_script check_nginx {

script "/opt/check_nginx.sh"

interval 5
#表示每5秒检测一下nginx状态

}

在vrrp下方添加命令

track_script {

check_nginx

}

到30远程复制到备30

cd /opt

vim check_nginx.sh

/usr/bin/curl -I http://localhost &> /dev/null

if [ $? -ne 0 ]

then

systemctl stop keepalived

fi

chmod 777 check_nginx.sh

sz check_nginx.sh

从桌面拖到20主里面

chmod 777 check_nginx.sh

重启keepalived服务

在主20和30上做页面配置

html/index.html

到客户机测试

curl 20.0.0.100

是否能查看到

关闭主20的nginx的服务

ipaddr 查看是否能查看到vip

再到备30的nginx服务

ipaddr 查看

再到客户机测试

测试成功

再回到主20

先重启nginx再重启keep

ipaddr查看vip

再到备30查看用ipaddr查看vip

最后回到客户端测试能否联通

实验完成

总结

keepalived的工作方式是基于VRRP协议:

1、 确定主备

2、 VIP地址只能有一个,会出现在主服务器上

3、 通过VRRP组播地址:224.0.0.18 发送VRRP报文,检测主的心跳。

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

5、 主服务器恢复,vip地址要回到主

6、 脑裂:主备都有vip。软件层面:检查配置文件,重启。

7、 keepalived不是只能和lvs集群搭配,也可以和其他服务配合,实现高可用。

1、 什么叫脑裂?

脑裂:主和备同时拥有vip地址

在高可用系统当中,联系两个节点的心跳线,本来是一体的动作协调的高可用系统。

如果心跳线断开后,分裂成了两个独立的个体。主备之间失去了联系,都以为是对方出现了故障。

两个调度器,就像脑裂人一样开始抢占主的位置,抢占vip。主也有vip,备也有vip。导致整个集群失败。

2、 脑裂应该怎么解决?

软件层面: 1、查看配置文件是否有问题。 2、 tcpdump抓包分析。 只要配置文件没问题,两边通信正常。只需要重启keepalived服务即可,要先重启主,再重启备。再模拟一下故障恢复即可。

网络层面: 高可用服务器之间心跳线检测失败。主备之间无法进行通信。

硬件层面: 1、 连接主备之间的心跳线老化 2、 网卡或者网卡的驱动失效,ip地址配置冲突。 3、 防火墙没有配置心跳线消息的传输通道,导致检测失败 4、 后端服务器的配置问题。心跳方式不同。心跳广播冲突。软件BUG。

3、 如何解决keepalived脑裂的问题? 硬件: 1、 准备两条心跳线,这样断了一条,依然能够传送心跳消息。

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

3、 监控软件,实时检测(zabbix)

面试时候如何去说?

1、 先简单描述一下脑裂的现象是什么。

2、 说一下解决思路,是软件层面还是网络层面问题。

3、 硬件层面说一两个即可。

4、 最后说一下如何解决脑裂问题。软件层面如何解决,网络层面如何解决,硬件层面如何解决。

环境介绍

dev 开发环境:开发人员专员

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

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

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

运维人员一般在 sit测试环境 pre预生产环境 prd生产环境

小公司:一般两种环境 开发测试混合 生产

中型公司:开发 测试 生产

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

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

相关文章

Adobe Creative Cloud没有管理应用程序的权限怎么办?

许多Mac用户在Adobe Creative Cloud自动升级之后显示没有管理应用程序的权限,导致很多Adobe软件无法安装,接下来为大家带来解决方法。 1、前往-前往文件夹-输入以下路径 /Library/Application Support/Adobe/OOBE/Configs/ServiceConfig.xml 2、复制Ser…

k8s-----24、亲和力Affinity

1、应用场景 pod和节点间的关系: 某些Pod优先选择有ssdtrue标签的节点,如果没有在考虑部署到其它节点;某些Pod需要部署在ssdtrue和typephysical的节点上,但是优先部署在ssdtrue的节点上; pod和pod间的关系: 同一个应用的Pod不…

容器类之QT

容器类之QT 顺序容器 关联容器 STL迭代容器 STL风格的反向迭代容器 QVariant类 QFlags类 QRandomGenerator类

2-Java进阶知识总结-6-多线程

文章目录 多线程--基本概念并发和并行进程和线程多线程 多线程--实现方式一,继承Thread类方法介绍实现步骤注意事项 方式二,实现Runnable接口Thread构造方法实现步骤 方式三,实现Callable接口方法介绍实现步骤 三种多线程实现方法对比 多线程…

Java实现多线程内容通俗易懂,一篇文章了解多线程并且能到简单的使用多线程

导学了解 什么是进程? 进程:程序的基本执行实体 更加通俗的讲:一个软件执行后,它就是一个进程,绿色的内容都是一个进程。 什么是线程? 线程是操作系统能够进行运算调度的最小单位。它被包含在进程当中&…

【蓝桥】小蓝的疑问

1、题目 问题描述 小蓝和小桥上完课后,小桥回顾了课上教的树形数据结构,他在地上画了一棵根节点为 1 的树,并且对每个节点都赋上了一个权值 w i w_i wi​。 小蓝对小桥多次询问,每次询问包含两个整数 x , k x,k x,k&#xff…

Iterator迭代器

一、基本概念 Iterator迭代器是一种接口,为不同的数据结构提供一种访问机制,即for … of 循环。当使用for…of循环遍历某种数据结构时,该循环会自动去寻找 Iterator 接口。任何数据结构只要部署Iterator接口,就可以完成遍历操作(…

基于Pytorch的驾驶员分心行为实时检测

本文使用深度学习和Pytorch(PyTorch 2.0.1\Torchvision 0.15.2)实时检测驾驶员的分心行为,并附录完整代码。 检测分心驾驶是现代汽车中最重要的功能之一。无论是自动驾驶汽车还是其它高端汽车,都配备了驾驶员监控系统,以持续跟踪驾驶员的行为。这对确保驾驶员保持目光在道路…

Unity的碰撞检测(二)

温馨提示:本文基于前一篇“Unity的碰撞检测(一)”继续探讨Collider输出,阅读本文则默认已阅读前文。 (一)测试说明 对于Collider输出,我们首先应该保证两个游戏对象具备的是碰撞器而非触发器,所以碰撞器的…

LSTM算法精解(附案例代码)

概念 LSTM(Long Short-Term Memory)是一种循环神经网络(RNN)的变种,用于处理序列数据,特别是在需要长期依赖关系的情况下。LSTM旨在解决传统RNN存在的梯度消失和梯度爆炸问题,这些问题使得RNN难…

18 Transformer 的动态流程

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html 机…

【BI看板】superset api接口分析

superset 的图表功能已经非常强大了,但是要满足个性化需求,定制是比不可少的了。。。来吧,我们一起看看他的API。 自带api文档 URL 127.0.0.1:5000/swagger/v1 截图 是不是很熟悉,没错就是swagger了。 图表接口地址 127.0.0.1:…

2698 求一个整数的惩罚数 (子集和,DFS)

class Solution { public:bool dfs(int target, string s, int index, int sum) {// 只有整个字符串都被分割,求和,和看结果是不是等于targetif(index s.size()) {return sum target;}int num 0; // 在现在的子集中去依次加入余下的元素// 1 2 9 6// …

vue3 code format bug

vue code format bug vue客户端代码格式化缺陷,为了方便阅读和维护,对代码格式化发现这个缺陷 vue.global.min.3.2.26.js var Vuefunction(r){"use strict";function e(e,t){const nObject.create(null);var re.split(",");for(le…

VLAN实现二层流量隔离(mux-vlan)应用基础配置

MUX VLAN能够提供VLAN内的二层流量隔离机制。 MUX VLAN的类型如下所示 主VLAN: 加入主VLAN的接口可以和MUX VLAN内的所有接口进行通信 从VLAN: (1)隔离型从VLAN: 同一VLAN内接口之间不能互相通信,可以与主VLAN接口通信,不同从VLAN之间不能互相通信。 …

Xcode iOS app启用文件共享

在info.plist中添加如下两个配置 Supports opening documents in place Application supports iTunes file sharing 结果都为YES,如下图所示: 然后,iOS设备查看,文件->我的iPhone列表中有一个和你工程名相同的文件夹出现&…

MySQL——MySQL常见的面试知识

1、事务四大特性 原子性: 根据定义,原子性是指一个事务是一个不可分割的工作单位,其中的操作要么都做,要么都不做。即要么转账成功,要么转账失败,是不存在中间的状态!MySQL的InnoDB引擎是靠 un…

Mysql数据库 4.SQL语言 DQL数据操纵语言 查询

DQL数据查询语言 从数据表中提取满足特定条件的记录 1.单表查询 2.多表查询 查询基础语法 select 关键字后指定要查询到的记录的哪些列 语法:select 列名(字段名)/某几列/全部列 from 表名 [具体条件]; select colnumName…

UI设计公司成长日记2:修身及持之以恒不断学习是要务

作者:蓝蓝设计 要做一个好的UI设计公司,不仅要在能力上设计能力一直(十几年几十年)保持优秀稳定的保持输出,以及心态的平和宽广。创始人对做公司要有信心,合伙人之间要同甘共苦,遵守规则,做好表…

text-indent 的特殊性

目录 前言 1. text-indent 的基本用法 代码示例 理解 2. text-indent 的特殊性质 2.1 负值 代码示例 理解 2.2 与其他文本属性的交互 代码示例 理解 2.3 在不同元素上的表现 代码示例 理解 3. 如何正确使用 text-indent 前言 text-indent 是 CSS 中一个用来控制…