Keepalived高可用集群--几个实验带你认识集群的坚实后盾

news2024/11/12 14:53:06

一、KeepAlived的发展

        Keepalived起初是为LVS设计的,专门用来监控集群系统中各个服务节点的状态,它根据TCP/IP参考模型的第三、第四层、第五层交换机制检测每个服务节点的状态,如果某个服务器节点出现异常,或者工作出现故障,Keepalived将检测到,并将出现的故障的服务器节点从集群系统中剔除,这些工作全部是自动完成的,不需要人工干涉,需要人工完成的只是修复出现故障的服务节点。

        后来Keepalived又加入了VRRP的功能,VRRP(VritrualRouterRedundancyProtocol,虚拟路由冗余协议)出现的目的是解决静态路由出现的单点故障问题,通过VRRP可以实现网络不间断稳定运行,因此Keepalvied一方面具有服务器状态检测和故障隔离功能,另外一方面也有HAcluster功能。

        健康检查失败切换是keepalived的两大核心功能。所谓的健康检查,就是采用tcp三次握手,icmp请求,http请求,udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主负载均衡器出现问题时,由备负载均衡器承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。

        keepalived服务简单来说,就是用来防止单点故障的。所谓的单点故障就是,主服务器挂了之后从服务器充当主服务器,原来的主服务器恢复后,当从服务器来使用,保证服务的高可用性。也可以这样理解,老大挂了之后手下的小弟过来接班,老大复活后,当小弟使用。

二、Keepalived的通信原理

  1. 1、在网络中,主机之间的通信都是通过配置静态路由或者(默认网关)来完成的,而主机之间的路由器一旦发生故障,服务就会中断,因此这种通信模式当中,路由器就成了一个单点瓶颈,为了解决这个问题,就引入了VRRP协议。
  2. 2、VRRP协议是一种容错的主备模式的协议,保证当主机的下一跳路由出现故障时,由另一台路由器来代替出现故障的路由器进行工作,通过VRRP可以在网络发生故障时透明的进行设备切换而不影响主机之间的数据通信。
  3. 3、VRRP是通过一种竞选协议机制来将路由任务交给某台VRRP路由器的。
  4. 4、工作时主节点发包,备节点接包,当备节点接收不到主节点发的数据包的时候,就启动接管程序接管主节点的资源。备节点可以有多个,通过优先级竞选,但一般Keepalived系统运维工作中都是一对
  5. 5.VRRP路由器在运行过程中有三种状态:
  6. a、Initialize状态:系统启动后就进入Initialize,此状态下路由器不对VRRP报文做任何处理;
  • b、 Master状态;
  • c、 Backup状态;
  • 一般主路由器处于Master状态,备份路由器处于Backup状态

6、VRRP选举机制

  • a、VRRP组中IP拥有者。如果虚拟IP地址与VRRP组中的某台VRRP路由器IP地址相同,则此路由器为IP地址拥有者,这台路由器将被定位主路由器。
  • b、比较优先级。如果没有IP地址拥有者,则比较路由器的优先级,优先级的范围是0~255,优先级大的作为主路由器
  • c、比较IP地址。在没有Ip地址拥有者和优先级相同的情况下,IP地址大的作为主路由器。

7、VRRP通过一竞选(election)协议来动态的将路由任务交给LAN中虚拟路由器中的某台VRRP路由器。

三、Keepalived的部署

1.架构

2.搭建环境

vip为172.25.254.100

基础准备

1.网络环境配置需求在上图可查,需要各主机能够互相ping通
2.SElinux需要为禁用状态(对于所有主机)

vim  /etc/selinux/config  进入配置文件更改

reboot    重启生效

3.为了直观的看到测试效果写入语句(webserver1,webserver2)

[root@server1 ~]# yum install httpd -y
[root@server2 ~]# yum install httpd -y
[root@server1 ~]# echo 172.25.254.110 > /var/www/html/index.html

[root@server2 ~]# echo 172.25.254.120 > /var/www/html/index.html

更改完配置记得重启服务器

[root@server1 ~]# systemctl enable --now httpd

[root@server2 ~]# systemctl enable --now httpd

4.确认测试,出现我们写入的东西即可(KA1/KA2)

5.安装keepalived(KA1/KA2)

[root@KA1 ~]# yum install keepalived -y
 

[root@KA1 ~]# yum install keepalived -y

3.实验项目

1.全局配置(ka1、ka2)

vim  /etc/keepalived/keepalived.conf

上为KA1,下为KA2

2.虚拟路由的配置(ka1、ka2)

上为KA1,下为KA2

[root@KA1 ~]# scp /etc/keepalived/keepalived.conf root@172.25.254.20:/etc/keepalived

/keepalived.conf        

因为配置其实差不多,直接将写好的配置拷贝给KA2

测试

tcpdump -i eth0 -nn host 224.0.0.18    利用命令监控,查看组播信息

在两台都开启的状态下,全部是优先级为100的主机172.25.254.10

如果关闭则发现,出现的即为172.25.254.20

此时在KA2上可以看到虚拟的ip,但是ka1没有了

重新启动keepalived的时候,ip又会飘回来ka1,ka2就没了

3.日志分离

vim /etc/sysconfig/keepalived  更改为如下内容

systemctl restart keepalived

vim /etc/rsyslog.conf

systemctl restart rsyslog

ll /var/log/keepalived.log  查看

4.实现独立子配置文件

        当生产环境复杂时, /etc/keepalived/keepalived.conf 文件中内容过多,不易管理。将不同集群的配置,比如:不同集群的VIP配置放在独立的子配置文件中利用include 指令可以实现包含 子配置文件。

       在keepalived.conf中注释掉子配置文件中的内容,复制相关内容到子配置内容中,并写入子配置文件的地址

[root@KA1 ~]# mkdir -p /etc/keepalived/conf.d
[root@KA1 ~]# vim /etc/keepalived/conf.d/172.25.254.100.conf
[root@KA1 ~]# systemctl restart keepalived.service
再重启也发现也可以正常使用keepalived 

5.非抢占模式和延迟模式

非抢占模式

        默认为抢占模式preempt,即当高优先级的主机恢复在线后,会抢占低优先级的主机的master角色, 这样会使vip在KA主机中来回漂移,造成网络抖动,建议设置为非抢占模nopreempt ,即高优先级主机恢复后,并不会抢占低优先级主机的master角色 非抢占模块下,如果原主机down机, VIP迁移至的新主机, 后续也发生down时,仍会将VIP迁移回原主机

        在KA1改变后,重启服务

      在KA2改变后,重启服务

测试:

在关闭KA1中的keepalived之前,vip在KA1上

关闭keepalived之后,发现vip飘至KA2,再重启KA1还是没有vip

延迟模式

跟上面的非抢占模式相比,就是KA1/KA2更换了这个配置即可

测试情况则是,当KA1down机之后,vip会飘到KA2上,当KA1恢复设定的时间之后vip又会被KA1夺走。

6.vip单播配置

        默认keepalived主机之间利用多播相互通告消息,会造成网络拥塞,可以替换成单播,减少网络流量

启用 vrrp_strict 时,不能启用单播

重启服务后,分别在KA1、KA2中测试

[root@KA1 ~]# tcpdump -i eth0 -nn src host 172.25.254.10 and dst 172.25.254.20

抓包数据传递由来
[root@KA2 ~]# tcpdump -i eth0 -nn src host 172.25.254.20 and dst 172.25.254.10

7.邮件通知(KA1/KA2中操作相同,以其中一个为例)

        在企业应用中我们需要时时刻刻掌握主机的状态,但也不排除某些突发情况,所以为了保险起见,我们需要能够通过邮件的形式给工程师发出主机的变化消息,实现方式如下:

安装邮件发送工具

yum install mailx -y 

[root@KA2 ~]# echo hello world yara | mail -s test 1799044965@qq.com

打开vim /etc/mail.rc写入内容

在这里获得密码(也就是说的授权码)

#发送测试邮件

[root@KA2 ~]# echo hello world yara |mail -s test 1799044965@qq.com  

打开邮箱查看就收到了主机发送的信息~

当然手动的效率很低下,所以可以通过脚本自动进行

这个脚本主要是提醒运维人员服务器的异常状态,在第一时间通知

vim   /etc/keepalived/mail.sh

在任意KA1/KA2中关闭keepalived服务模拟故障,紧接着你的邮箱就会收到消息了

由于我还写了一个163的邮箱地址所以也收到了

8.双主架构

         master/slave的单主架构,同一时间只有一个Keepalived对外提供服务,此主机繁忙,而另一台主机却 很空闲,利用率低下,可以使用master/master的双主架构,解决此问题。

        master/master 的双主架构: 即将两个或以上VIP分别运行在不同的keepalived服务器,以实现服务器并行提供web访问的目的,提高服务器资源利用率

修改配置文件,写入下面的内容(复制并更改)

上图是KA1,下图是KA2

配置的两套虚拟路由,对于100来说KA1是主,对于200来说KA2是主

测试:同时开启keepalived,eth0:1在KA1上,而eth0:2在KA2上

9.实现ipvs的高可用性

单主的LVS-DR模式

server1、server2中同样的动作

wq保存退出之后,sysctl system令配置生效

为了更好地观察实验结果我们需要在KA1主机中下载ipvsadm

如此结果就代表我们写入的dr模式生效了

10.vrrp脚本控制vip

        vrrp_script:自定义资源监控脚本,vrrp实例根据脚本返回值,公共定义,可被多个实例调用,定 义在vrrp实例之外的独立配置块,一般放在global_defs设置块之后。

        通常此脚本用于监控指定应用的状态。一旦发现应用的状态异常,则触发对MASTER节点的权重减至 低于SLAVE节点,从而实现 VIP 切换到 SLAVE 节点

编写脚本 vim /etc/keepalived/test.sh

再去关闭打开KA1、KA2任意keepalived服务,ifconfig观察vip的动向

        测试结果是:当KA1关闭服务后,vip会飘向KA2,此时脚本值为1,但当服务重新启动,vip会回到KA1中,脚本值为0

11.keepalived+haproxy的高可用集群

KA1、KA2下载haproxy

对haproxy写入配置内容

测试:

在另外一台主机上测试,关闭重启haproxy服务,会看到vip飘移,但是数据测试依旧是按照策略走,并且在保活时间内是保持连接的。

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

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

相关文章

神经串联式语音转换:对基于串联的单次语音转换方法的再思考 论文笔记

NEURAL CONCATENATIVE SINGING VOICE CONVERSION: RETHINKING CONCATENATION-BASED APPROACH FOR ONE-SHOT SINGING VOICE CONVERSION 笔记 发现问题: 在any-to-any的转换中,由于内容和说话人音色的解耦不足,导致源说话人的音色部分仍保留在转换后的音频中&#x…

Dom4j详细介绍

Dom4j 1.1 解析概览 将数据存储为XML格式后,程序化地访问这些数据变得至关重要。虽然Java基础的IO操作能够实现这一目标,但这一过程往往既复杂又繁琐,尤其是在处理大型文件或需要频繁读写操作的场景下。为了解决这些问题,开发者…

多条折线图修改图例以及自定义tooltip

在图例后面添加所有数据之和修改之后 series 中的name之后导致tooltip也加上了重新自定义tooltip,去掉总量统计 核心代码 监听数据改变计算总量修改name字段自定义 tooltip // 计算每条线的总和 const sum1 this.VALUE1.reduce((acc, val) > acc val, 0); co…

【python】在Python中读取和加解密PDF文件的详细教程与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Python酷库之旅-第三方库Pandas(082)

目录 一、用法精讲 341、pandas.Series.str.startswith方法 341-1、语法 341-2、参数 341-3、功能 341-4、返回值 341-5、说明 341-6、用法 341-6-1、数据准备 341-6-2、代码示例 341-6-3、结果输出 342、pandas.Series.str.strip方法 342-1、语法 342-2、参数 …

go语言源码解读之数据结构堆

概述 堆(heap),是一种计算中常用的数据结构。本文我们将探讨对的特性、实现细节以及实际应用场景。 基本概念 堆是一种特殊的完全二叉树。堆分为大顶堆与小顶堆。 大顶堆的特点是,父节点的值总是大于或等于其子节点的值。 小顶堆的特点是&#xff0c…

SocialFi新纪元:Match革新金融与社交的融合艺术

前言 Match在SocialFi领域的创新探索,或将金融与社交的融合艺术推向新的高度! SocialFi自带"爆点”属性,Web 3.0巨型流量池 统计数据显示,2023年第三季度,全球约有54亿人活跃在互联网上,而社交媒体领…

江协科技STM32学习笔记(第13章 WDG看门狗)

第13章 WDG看门狗 13.1 WDG看门狗 13.1.1 WDG简介 看门狗就是程序运行的一个保障措施,我们得在程序中定期地喂狗,如果程序卡死了,没有在规定的时间里喂狗,那么看门狗硬件电路就会自动帮我们复位一下,防止程序长时间…

<keep-alive> 一分钟了解

<keep-alive> 一分钟了解 <keep-alive> 是 Vue.js 提供的一个抽象组件&#xff0c;它的主要用途是在页面或组件切换时保留其状态&#xff0c;避免重复执行昂贵的渲染操作&#xff0c;从而提升应用性能。 文章目录 <keep-alive> 一分钟了解 一、 <keep-ali…

Ubuntu如何实现每天定时关机

要在Ubuntu中实现每天定时关机&#xff0c;你可以使用cron来安排定时任务。以下是具体的步骤&#xff1a; 步骤 1: 创建脚本 打开终端。使用文本编辑器创建一个新的文件。例如&#xff1a; nano ~/shutdown_script.sh 步骤 2: 编写脚本 在编辑器中输入以下内容&#xff1a…

华府便利店信息管理系统

TOC springboot239华府便利店信息管理系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规…

花四小时,写了个在线实时绘制等值面图小软件,明晚上线,喜欢的小伙伴关注哦

科研党的福音&#xff0c;绘图再也不需要安装一堆软件了&#xff0c;可以在线绘图了&#xff1b; 只需要传入绘制的区间、色值、以及所需要绘制的数据就可以直接出图了&#xff0c;可绘制各种等值面图&#xff0c;比如降水分布&#xff0c;高温分布&#xff0c;人口分布&#x…

文心快码真的很好用!!!

最近被身边的好友安利到了一个百度的新产品文心快码&#xff08;comate&#xff09;&#xff0c;没想到体验下来真的很好用&#xff0c;非常容易上手&#xff0c;解放了我的双手&#xff0c;提高了代码生产力&#xff01;可能有很多小伙伴不知道怎么使用comate,而我作为这类工具…

C语言-将n个数输入时顺序的逆序排列,用指针函数实现

一、题目要求&#xff1a; 将n个数输入时顺序的逆序排列&#xff0c;用指针函数实现 二、程序: #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int n;printf("请输入一共有多少数:\n");scanf("%d", &n);int arr[100], i;…

大模型之二十五-人工智能新纪元

人类社会正式从信息科技时代步入了人工智能时代&#xff0c;相比信息科技革命&#xff0c;人工智能科技革命的影响要深远的多&#xff0c;在这新旧交替剧烈变革期&#xff0c;绝大多数人都有机会。 为了更好的理解人工智能科技革命&#xff0c;首先我们首先梳理一下技术的发展…

使用VNC-viewer对树莓派5 远程连接桌面—详细记录笔记版

树莓派5 的远程桌面连接&#x1f680; 在完成了对树莓派镜像的安装&#xff0c;以及点亮了屏幕之后&#xff0c;接下来就是为开发做一些准备&#xff0c;就是配置树莓派5的远程的桌面的操作&#xff0c;因为如果不这样的话&#xff0c;我在PC上和树莓派系统上分别进行作业的时候…

了解数据库中常用存储引擎数据结构(2)

目录 深入了解B树及其变种 BTree BTree B*Tree BTree并发机制 B-Link Tree 深入了解B树及其变种 先把我们要解释的B树变种都列出来&#xff0c;B树的变种主要有B树、B*树、B-Link树、COW B树、惰性B树、Bw树等。 下面具体来分析这些变种的优势和发展趋势。 BTree 下图…

C语言整数溢出的问题

补漏&#xff1a; 昨天我在开头提到-1的二进制如何表示&#xff0c;我在这里简单分析一下。 首先我们要明白有符号的数转换是需要补码的&#xff0c;所以我们想这个问题之前将补码的规则思考一遍&#xff08;首先将有符号的首位保留&#xff0c;后面几位取反后加一&#xff0…

数据结构初阶——算法复杂度超详解

文章目录 1. 数据结构前言1. 1 数据结构1. 2 算法 2. 算法效率2. 1 复杂度的概念 3. 时间复杂度3. 1 大O的渐进表示法3. 2 时间复杂度计算示例3. 2. 1 示例13. 2. 2 示例23. 2. 3 示例33. 2. 4 示例43. 2. 5 示例53. 2. 6 示例63. 2. 7 示例7 4. 空间复杂度4. 1 空间复杂度计算…

螺丝虽小,但其质量关乎家具安全——业内解读紧固件生产标准

螺丝是家具组装中不可或缺的部件&#xff0c;其质量直接影响到家具的牢固性和安全性。因此&#xff0c;在生产螺丝时&#xff0c;必须确保螺丝符合家具组装的耐用性和安全性要求。确保生产出来的螺丝符合家具组装的耐用性和安全性要求&#xff0c;需要从设计、材料选择、生产工…