LVS-keepalived

news2024/10/6 12:35:06

文章目录

  • 一、keepalived
    • 1、KEEPALIVED作用
    • 2、KEEPALIVED原理
    • 3、KEEPALIVED工作模式
    • 4、KEEPLIVED问题及优化
  • 二、实验
    • 1.LVS+Keepalived 高可用群集
  • 总结

一、keepalived

1、KEEPALIVED作用

保证负载均衡的高可用性,完美解决了LVS所有问题,可以检查后端服务器池种的服务器健康。

2、KEEPALIVED原理

利用VRRP协议原理,主备模式通过优先级判断谁是主谁是备。备机是否切换为主机依靠的是主备之间的心跳线。

3、KEEPALIVED工作模式

①抢占模式(默认模式):主坏了之后直接切换备为主服务器,主修好后直接抢占回主服务器。
②延时抢占模式:主坏了之后直接切换备为主服务器,主修好后检查是否完全稳定后再抢占回主服务器。
③不抢占模式:主坏了之后切换备为主服务器,原来的主服务器修好也不会再抢占为主服务器。
④心跳线模式:主备服务器之间心跳线模式默认是广播模式,可以根据需求改为组播或者单播模式。

4、KEEPLIVED问题及优化

①默认是抢占模式,根据需求改为非抢占模式或延时抢占模式。
②心跳线默认是广播模式,根据需求改为组播或单播模式。
③脑裂:备机由于种种原因收不到主机发送的心跳线,导致用户不知道访问那个服务器。例如:防火墙拦截心跳线广播报文、主备之间物理网线心跳线断裂等。
keepalived脑裂
在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

脑裂的原因
高可用服务器对之间心跳线链路发生故障,导致无法正常通信。如心跳线坏了(包括断了,老化)。
因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)。
因心跳线间连接的设备故障(网卡及交换机)。
因仲裁的机器出问题(采用仲裁的方案)。
高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
Keepalived配置里同一 VRRP实例如果 virtual_router_id两端参数配置不一致也会导致裂脑问题发生。
vrrp实例名字不一致、优先级一致。
解决对策
添加冗余的心跳线,例如:双线条线(心跳线也HA),尽量减少“裂脑”发生几率
启用磁盘锁。正在服务一方锁住共享磁盘,“裂脑”发生时,让对方完全“抢不走”共享磁盘资源。但使用锁磁盘也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如服务节点突然死机或崩溃,就不可能执行解锁命令。后备节点也就接管不了共享资源和应用服务。于是有人在HA中设计了“智能”锁。即:正在服务的一方只在发现心跳线全部断开(察觉不到对端)时才启用磁盘锁。平时就不上锁了。
设置仲裁机制。例如设置参考IP(如网关IP),当心跳线完全断开时,2个节点都各自ping一下参考IP,不通则表明断点就出在本端。不仅“心跳”、还兼对外“服务”的本端网络链路断了,即使启动(或继续)应用服务也没有用了,那就主动放弃竞争,让能够ping通参考IP的一端去起服务。更保险一些,ping不通参考IP的一方干脆就自我重启,以彻底释放有可能还占用着的那些共享资源。
利用脚本检测、报警。

vim check_keepalived.sh
#!/bin/bash
$ip=192.168.169.10
while true
do
if [ `ip a show ens33 |grep $ip|wc -l` -ne 0 ]
then    echo "keepalived is error!"
else    echo "keepalived is OK !"
fi
done

④日志分隔:keepalived的默认日志在/var/log/message里,通过修改 /etc/sysconfig/keepalived中参数KEEPALIVED_OPTIONS=“-D -S local数字” ,并利用rsyslog将日志分隔出来

二、实验

1.LVS+Keepalived 高可用群集

主DR 服务器:192.168.169.10
备DR 服务器:192.168.169.50
Web 服务器1:192.168.169.20
Web 服务器2:192.168.169.30
vip:192.168.169.40
客户端:192.168.169.60

1.配置负载调度器(主、备相同)

systemctl stop firewalld.service
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs

2.配置keeplived(主、备DR 服务器上都要设置

cd /etc/keepalived/
cp keepalived.conf keepalived.conf.bak
vim keepalived.conf
global_defs {						#定义全局参数
--10行--修改,邮件服务指向本地
	smtp_server 127.0.0.1
--12行--修改,指定服务器(路由器)的名称,主备服务器名称须不同,主为LVS_01,备为LVS_02
	router_id LVS_01
--14行--注释掉,取消严格遵守VRRP协议功能,否则VIP无法被连接
	#vrrp_strict
}

vrrp_instance VI_1 {				#定义VRRP热备实例参数
--20行--修改,指定热备状态,主为MASTER,备为BACKUP
    state MASTER
--21行--修改,指定承载vip地址的物理接口
    interface ens33
--22行--修改,指定虚拟路由器的ID号,每个热备组保持一致	
    virtual_router_id 10
	#nopreempt		#如果设置非抢占模式,两个节点state必须为bakcup,并加上配置 nopreempt
--23行--修改,指定优先级,数值越大优先级越高,这里设置主为100,备为80
    priority 100
    advert_int 1					#通告间隔秒数(心跳频率)
    authentication {				#定义认证信息,每个热备组保持一致
		auth_type PASS				#认证类型
--27行--修改,指定验证密码,主备服务器保持一致
        auth_pass abc123
    }
    virtual_ipaddress {				#指定群集vip地址
        192.168.169.188
    }
}
--36行--修改,指定虚拟服务器地址(VIP)、端口,定义虚拟服务器和Web服务器池参数
virtual_server 192.168.169.188 80 {
    delay_loop 6					#健康检查的间隔时间(秒)
    lb_algo rr						#指定调度算法,轮询(rr)
--39行--修改,指定群集工作模式,直接路由(DR)
    lb_kind DR
    persistence_timeout 0			#连接保持时间(秒)
    protocol TCP					#应用服务采用的是 TCP协议
--43行--修改,指定第一个Web节点的地址、端口
    real_server 192.168.169.20 80 {
        weight 1					#节点的权重
--45行--删除,添加以下健康检查方式		
        TCP_CHECK {
			connect_port 80			#添加检查的目标端口
			connect_timeout 3		#添加连接超时(秒)
			nb_get_retry 3			#添加重试次数
			delay_before_retry 3	#添加重试间隔
		}
	}
	real_server 192.168.169.30 80 {		#添加第二个 Web节点的地址、端口
        weight 1
        TCP_CHECK {
			connect_port 80
			connect_timeout 3
			nb_get_retry 3
			delay_before_retry 3
		}
	}
##删除后面多余的配置##
}

修改主的配置文件
在这里插入图片描述

修改备的配置文件改名字优先级

在这里插入图片描述
重启一下服务

systemctl start keepalived
systemctl enable keepalived.service

用ip addr查看一下主的会有设置ip 备的没有
在这里插入图片描述
在这里插入图片描述
测试当把主停了备会不会有ip来顶替
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里一开始遇到主ip出不来的情况后面重启服务解决了

ipvsadm -ln

#如没有VIP 的分发策略,则重启 keepalived 服务

systemctl restart keepalived

ok这时候我们的keepalive就布置好了
修改NFS共享网页内容
用客户端检测一下
在这里插入图片描述
测试验证
在客户端访问 http://192.168.169.188/
在这里插入图片描述
再在主服务器关闭 keepalived 服务后再测试

 systemctl stop keepalived

实验成功自动切换为备
IP漂移
实现高可用负载均衡
在这里插入图片描述

总结

Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
答案:
Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。

keepalived的抢占与非抢占模式:
抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP
非抢占式俩节点state必须为bakcup,且必须配置nopreempt。
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。

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

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

相关文章

【随笔】转发/转向(服务器重定向,服务器转发,服务器跳转)和重定向(客户端重定向,客户端转发,客户端跳转)

文章目录 1.转发(转向)和重定向图解2.例子3.区别 1.转发(转向)和重定向图解 图:转发(转向) 图:重定向 2.例子 转发:A找B要钱,B没钱,于是B向C…

OSPF路由协议解释

目录 OSPF路由协议OSPF数据包类型OSPF邻区状态OSPF的邻接关系建立过程 路由名词解释OSPF开源项目 OSPF路由协议 OSPF简介 1、(Open Shortest Path First),开放式最短路径优先,它属于链路状态路由协议,大部分路由将由O…

ChatGPT进化的过程简介

Chat GPT可以做什么? 分点列条的回答问题 写代码或SQL 翻译 语法检查 ChatGPT官方还未公开论文,ChatGPT有一个“孪生兄弟”InstructGPT,InstructGPT有论文,可以根据InstructGPT论文推导ChatGPT的训练过程: ChatGPT的…

React函数组件语法(N)

文章目录 react学习的说明新的官网全力投入现代React与Hooks React简介概述官网特点生态 React脚手架create-react-app官网创建和启动项目项目结构sass支持 Vite创建和启动项目项目结构常见配置 虚拟DOM什么是虚拟DOM虚拟DOM优缺点优点:缺点: 虚拟DOM实现…

MySQL死锁的原因和处理方法

MySQL死锁的原因和处理方法 表的死锁产生原因解决方案 行级锁死锁产生原因1解决方案1产生原因2产生原因3解决方案 表的死锁 产生原因 用户A访问表A(锁住了表A),然后又访问表B;另一个用户B访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须…

LeetCode349. 两个数组的交集

题目链接 LeetCode349. 两个数组的交集 题目描述 题解 题解一(Java) 作者:仲景 因为数据范围和长度都限制在1000,所以直接使用数组即可 因为数据范围和长度都在1000内,所以碰到数字可以直接arr[i] i来表示这个数字…

如何有效的开展接口自动化测试,一篇就行

一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&…

手写Spring框架---IOC容器实现

目录 框架具备的最基本功能 实现容器前奏 创建注解 提取标记对象 extractPacakgeClass里面需要完成的事情 获取项目类加载器的目的 为什么不让用户传入绝对路径 类加载器ClassLoader 统一资源定位符URL ClassUtil提取标记类 获取包下类集合 装载目标类的集合 获取…

Git相关使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

APP UI自动化测试思路总结 ,教你彻底学会APP自动化测试

目录 一,开发语言选择 二,UI测试框架选择 1,Appium 2,Airtest 3,选择框架 三,单元测试框架选择 四,测试环境搭建 1,测试电脑选择 2,测试手机选择 3,…

【Redis】Redis管道

面试题 如何优化频繁命令往返造成的性能瓶颈? Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。一个请求会遵循以下步骤: 客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果),并监听Socket返回&#xf…

基于matlab仿真相控天线阵列在波束成形MIMO-OFDM系统中的使用

一、前言 本例显示了相控阵在采用波束成形的MIMO-OFDM通信系统中的使用。它使用通信工具箱和相控阵系统工具箱中的组件,对组成发射器和前端接收器组件的辐射元件进行建模,用于MIMO-OFDM通信系统。使用用户指定的参数,您可以根据不同空间位置和…

Django自动化测试平台搭建落地全过程(附视频教程+源码)

目录 前言 一、平台基础架构设计 二、自动化测试工具选择与集成 三、平台功能开发 四、总结 前言 自动化测试在现代软件开发中扮演着至关重要的角色,它可以显著提高测试效率和准确性,并帮助开发团队更快地发布高质量的软件产品。Django作为一种流行…

Hudi数据湖技术之集成Spark

目录 1 环境准备1.1 安装MySQL 5.7.311.2 安装Hive 2.11.3 安装Zookeeper 3.4.61.4 安装Kafka 2.4.1 2 滴滴运营分析2.1 需求说明2.2 环境准备2.2.1 工具类SparkUtils2.2.2 日期转换星期 2.3 数据ETL保存2.3.1 开发步骤2.3.2 加载CSV数据2.3.3 数据ETL转换2.3.4 保存数据至Hudi…

Flink的DataStreamApi

1.源算子 SourceFunction 并行度只能为1 ParallelSourceFunction 并行度 2.转换算子 (1)基本类型 所有 Java 基本类型及其包装类,再加上 Void、String、Date、BigDecimal 和 BigInteger。 (2)数组类型 包括基…

【算法】【算法杂谈】判断点是否在三角形内部(面积法和向量法)

目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…

netcore工程在linux下调用linux动态库

文章的内容可能看着枯燥,排版也存在一些问题,但是如果你遇到相关问题,真的无法解决的时候,不妨沉下心来好好阅读一下这篇文章,你会有所收获,也可以先跳到文章最后,看看是不是对你的问题有价值。…

Day955.到底是重构,还是重写? -遗留系统现代化实战

到底是重构,还是重写? Hi,我是阿昌,今天学习记录的是关于到底是重构,还是重写?的内容。 到底是重构,还是重写?这是一个困扰着很多团队的问题。 重构吧,遗留系统积重难…

神经网络模型入门及蠓虫分类问题简单实战

学习知识要实时简单回顾,我把学习的神经网络模型简单梳理一下,方便入门与复习。 神经网络模型 神经网络简介 人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及功能的一种抽象数学模型。自 1943 年美国心理学家W.M…

【分段DP】ABC275 F

一万年没写DP了 这么简单的DP我居然没写出来 F - Erase Subarrays (atcoder.jp) 题意: 思路: 原本的思路是这样的: 看到3000的数据范围就是n^2的DP了 看到删子串,那么留下来的就是子序列,要使得剩下来的子序列的…