Keepalived

一、Keepalived概述

1.1 Keepalived定义

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

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

1.2 LVS+Keepalived集群

LVS的高可用集群:主调度器和备调度器(可以有多个)一主两备/一主一备

主调度器能够正常运行时,由主调度器进行后端真实服务器的分配处理。其余的备用调度器都处在冗余状态。

备用调度器不参与集群的运转。主调度器出现故障无法运行,vip飘移至备调度器,此时备调度器才会承担主调度器的工作。

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

1.3 VRRP协议

VRRP协议:提高网络路由器的可靠性开发的一种协议,keepalived是基于vrrp协议实现lvs服务的高可用,解决了调度器单节点的故障问题

由优先级决定服务器的主备角色。一旦开启服务,优先级高的会自动抢占主的位置。

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

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

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

二、LVS+Keepalived的部署

实验配置:
20.0.0.10:主调度器
20.0.0.20:备调度器
20.0.0.61:后端真实服务器1
20.0.0.62:后端真实服务器2
20.0.0.100:vip地址
20.0.0.63:访问客户端

1、配置主调度器

[root@pup1 ~]# yum -y install keepalived
[root@pup1 ~]# yum -y install ipvsadm
[root@pup1 ~]# cd /etc/keepalived/
[root@pup1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@pup1 keepalived]# vim keepalived.conf

Keepalived配置文件修改及解析

--10行--修改
smtp_server 127.0.0.1
--12行--修改,主备服务器的id,主和备不能一致
router_id LVS_01
--14行--注释,取消严格遵守vrrp协议功能,否则VIP无法连接
#vrrp_strict
--21行--修改,指定vip地址的物理接口
interface ens33
--23行--修改,指定优先级,数字越大优先级越高,主设为100,备设为90
priority 100
advert_int 1  #发送报文的间隔时间
--29行--修改,指定集群vip
virtual_ipaddress {20.0.0.100
}  
--34行--修改,指定VIP、端口,定义虚拟服务器和web服务器池参数
virtual_server 20.0.0.100 80 {delay_loop 6           #健康检查的间隔时间lb_algo rr             #负载均衡的调度算法lb_kind DR             #指定lvs集群的工作方式persistence_timeout 0  #连接保持50秒protocol TCP           #应用服务采用TCP协议
--41行--修改,后端真实服务器1的轮询权重real_server 20.0.0.61 80 {weight 1
--添加--
TCP_CHECK {connect_port 80        #添加检查的目标端口connect_timeout 3      #添加连接超时(秒)nb_get_retry 3         #添加重试次数dealy_before_retry 4   #添加重试间隔秒数}
}
--添加--后端真实服务器2real_server 20.0.0.62 80 {weight 1
TCP_CHECK {connect_port 80connect_timeout 3nb_get_retry 3dealy_before_retry 4}
}
}[root@pup1 keepalived]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@pup1 keepalived]# systemctl restart keepalived.service

vim /etc/systcl.confnet.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[root@pup1 keepalived]# sysctl -p

2、配置备调度器

[root@pup1 ~]# yum -y install keepalived
[root@pup1 ~]# yum -y install ipvsadm
[root@pup2 ~]# scp root@20.0.0.10:/etc/keepalived/keepalived.conf /etc/keepalived/
[root@pup2 ~]# vim /etc/keepalived/keepalived.conf
--12行--修改
router_id LVS_02
--20行--修改
state BACKUP
--23行--修改
priority 90[root@pup2 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@pup2 ~]# systemctl restart keepalived.service

3、配置web服务器

61、62相同操作:
[root@nginx1 ~]# cd /usr/local/nginx/html
[root@nginx1 html]# vim index.html 
--删除--添加--
this is test1  #62服务器写入test2[root@nginx1 html]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
--添加--
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255[root@nginx1 html]# ifup ifcfg-lo:0

61、62相同操作
[root@nginx1 html]# route add -host 20.0.0.100 dev lo:0
[root@nginx1 html]# vim /etc/sysctl.conf
--添加--
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2[root@nginx1 html]# sysctl -p

4、访问测试

5、验证高可用

三、Nginx+Keepalived的部署

实验配置:
20.0.0.61:主
20.0.0.62:备
20.0.0.63:客户端

1、配置主

61:
[root@nginx1 ~]# cd /usr/local/nginx/html/
[root@nginx1 html]# vim index.html 
--删除并添加--
this is test1[root@nginx1 ~]# yum -y install keepalived
[root@nginx1 ~]# cd /etc/keepalived/
[root@nginx1 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@nginx1 keepalived]# vim keepalived.conf

[root@nginx1 keepalived]# cd /opt
[root@nginx1 opt]# vim check_nginx.sh#!/bin/bash
/usr/bin/curl -I http://localhost &> /dev/null
if [ $? -ne 0 ]
thensystemctl stop keepalived
fi[root@nginx1 opt]# chmod 777 check_nginx.sh 
[root@nginx1 opt]# sz check_nginx.sh  #发送至桌面
[root@nginx1 opt]# systemctl restart keepalived.service 

2、配置备

[root@nginx2 ~]# cd /usr/local/nginx/html/
[root@nginx2 html]# vim index.html 
--删除并添加--
this is test2[root@nginx2 ~]# yum -y install keepalived
[root@nginx2 ~]# cd /etc/keepalived/
[root@nginx2 keepalived]# cp keepalived.conf keepalived.conf.bak
[root@nginx2 keepalived]# scp root@20.0.0.61:/etc/keepalived/keepalived.conf /etc/keepalived/
[root@nginx2 keepalived]# vim keepalived.conf

[root@nginx2 keepalived]# cd /opt
[root@nginx2 opt]# rz -E  #传入脚本文件
rz waiting to receive.
[root@nginx1 opt]# chmod 777 check_nginx.sh 
[root@nginx2 opt]# systemctl restart keepalived.service 

3、访问测试

4、验证高可用

四、 脑裂现象

脑裂现象:主和备调度器同时拥有vip地址

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

脑裂原因及解决方法

软件层面:
1、配置文件出错
2、通过tcpdump抓包分析

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

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

如何解决

  • 重启
  • 准备两条心跳线,这样断了一条,依然能够传送心跳消息
  • 设置防火墙一定要让心跳消息通过
  • 依靠监控软件实时检测(zabbix)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kubeadm安装k8s集群

目录 一、环境部署 1、关闭防火墙规则、关闭selinux、关闭swap交换分区 2、修改主机名、DNS解析 3、调整内核参数 二、所有节点安装Docker 三、安装k8s集群 1、所有节点配置K8S源 2、所有节点安装kubeadm、kubelet和kubectl 3、部署K8S集群 3.1 初始化操作&#xff08…

车载音频ADI-ADSP21569音频DSP开发

车载音频ADI-ADSP21489音频DSP开发 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送蓝牙音频,车载DSP音频项目核心开发资料, 1 芯片手册 2 电路原理图

网工内推 | 急招网工,思科、华为认证优先,法定节假日三薪

01 江苏臻云技术 招聘岗位:网络工程师 职责描述: 1、负责落实数据中心机房日常网络监测及巡检任务; 2、负责数据中心网络设备日常监控、变更、维护、巡检; 3、负责日常巡检报告、故障维护报告、变更申请的文档的编制;…

竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

番外8.2 --- 后续

### 01:dd命令:在新挂载点创建swap文件大小10MB;(dd if/dev/zero of/swap bs1024 count10240) 02:给swap建立文件系统,将其分属到swap文件(mkswap /swap; swapon /swap &…

21.2 Python 使用Scapy实现端口探测

Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包。能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提…

ExcelPatternTool 开箱即用的Excel工具包现已发布!

文章目录 ExcelPatternTool功能特点:快速开始使用说明常规类型高级类型Importable注解Exportable注解IImportOption导入选项IExportOption导出选项单元格样式StyleMapping样式映射使用数据库作为数据源 示例Sample1:不同类型字段导出Sample2:…

Macos视频增强修复工具:Topaz Video AI for mac

Topaz Video AI是一款使用人工智能技术对视频进行增强和修复的软件。它可以自动降噪、去除锐化、减少压缩失真、提高清晰度等等。Topaz Video AI可以处理各种类型的视频,包括低分辨率视频、老旧影片、手机录制的视频等等。 使用Topaz Video AI非常简单,…

【Linux】部署单机OA项目及搭建spa前后端分离项目

目录 部署OA项目 ​编辑 搭建spa前后端分离项目 后端 前端 配置坏境变量 部署OA项目 在虚拟机中,将项目打包成war文件放置到tomcat根目录下的webapps文件目录下 再在主机数据库中连接数据库,并定义数据库名导入相关的表 继续进入tomcat目录下双击点…

【REDIS】redis-命令大全

【REDIS】redis-命令大全 redis-命令的官方文档 键命令 序号命令及描述1DEL key 该命令用于在 key 存在时删除 key。2DUMP key 序列化给定 key ,并返回被序列化的值。3EXISTS key 检查给定 key 是否存在。4EXPIRE key seconds 为给定 key 设置过期时间&#xf…

升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败

升级 IDE Xcode 15 后本地模拟器 Simulator 全被清空,反复重新尝试 Get 下载频频因网络异常断开而导致失败 ... 注:通过 Get 方式下载一定要保证当前网络环境足够平稳,网络环境不好的情况下该方法几乎成不了 解决办法 Get 方式行不通可以尝试通过 官网 途径先下载 模拟器安装包…

p5.js 到底怎么设置背景图?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 里我们学过加载图片元素,学过过背景色的用法,但当时没提到背景图要怎么使用。 本文就把背景图这部分内容补充完整,并且会提到在 p5.js 里使用背景图的一些注意点。 背景图的用法…

JDK JVM JRE和Java API的关系

Java SE 英文全称是Java Standared Edition,它是Java的标准版。 Java SE由四部分组成:JDK JVM JRE和Java语言。 1.JDK Java Development Kit Java开发工具包。包含了所有编译,运行Java程序所需要的工具,还包含了Java运行环境&a…

npm改变npm缓存路径和改变环境变量

在安装nodejs时,系统会自动安装在系统盘C, 时间久了经常会遇到C盘爆满,有时候出现红色,此时才发现很多时候是因为npm 缓存保存在C盘导致的,下面就介绍下如何改变npm缓存路径。 1、首先找到安装nodejs的路径&#xff0c…

Linux MMC子系统 - 2.eMMC 5.1总线协议浅析

By: Ailson Jack Date: 2023.10.27 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/161.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

C++项目——云备份-⑥-服务端热点管理模块的设计与实现

文章目录 专栏导读1.热点管理类设计2.热点管理类的实现与整理 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿里云专家博主,CSDN内容合伙人…致力于 C/C、Linu…

如何系列 如何玩转远程调用之OpenFegin+SpringBoot(非Cloud)

文章目录 简介原生Fegin示例基础契约日志重试编码器/解码器自定义解码器 请求拦截器响应拦截器表单文件上传支持错误解码器断路器指标metrics客户端 配合SpringBoot(阶段一)配合SpringBoot(阶段二)1.EnableLakerFeignClients2.Lak…

vscode不显示横滚动条处理

最近发现vscode打开本地文件不显示水平的滚动条,但是打开一个临时文件是有水平滚动条的。 解决方案 可以一个个试 vscode配置 左下角设置–设置–搜索Scrollbar: Horizontal auto 自动visible 一直展示hidden 一直隐藏 拖动底部状态栏 发现是有的,但是…

UML中类之间的六种主要关系

UML中类之间的六种主要关系: 继承(泛化)(Inheritance、Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组…

【软考】系统集成项目管理工程师(九)项目成本管理【4分】

一、成本概念 1、产品全生命周期成本 产品或系统的整个使用生命周期内,在获得阶段(设计、生产、安装和测试等活动,即项目存续期间)、运营与维护、生命周期结束时对产品的处置所发生的全部成本 2、成本类型 成本类型描述可变成…