Linux入门攻坚——43、keepalived入门-1

Linux Cluster(Linux集群的类型):LB、HA、HPC,分别是负载均衡集群、高可用性集群、高性能集群。
LB:lvs,nginx
HA:keepalived,heartbeat,corosync,cman
HP:超算集群,大规模并行系统:
  分布式存储:HDFS(Hadoop分布式文件系统)
  分布式计算:YARN(Yet Another Resource Negotiator,另一种资源协调者)
     batch(基于批处理):MapReduce(用于大规模数据集(大于1TB)的并行运算,是面向大数据并行处理的计算模型、框架和平台。Map(映射),Reduce(归约))。1)MapReduce是一个基于集群的高性能并行计算平台(Cluster Infrastructure);2)MapReduce是一个并行计算与运行软件框架(Software Framework);3)MapReduce是一个并行程序设计模型与方法(Programming Model & Methodology)。
     in-memory(基于内存的处理系统):spark(专为大规模数据处理而设计的快速通用的计算引擎)
     stream(流式计算):storm

keepalived:高可用服务集群实现。(高可用,主要是主备模式,主设备出现故障,备用设备马上启用,保证服务不中断。也就是说,多个节点上,提供同一个入口,相同的服务。)
  Active/Passive两种节点  
  HA Service:resources(高可用资源),高可用服务需要多个高可用资源
  resources:高可用资源,对于lvs来说,就是vip和ipvs规则,对于nginx,就是vip和nginx服务

以lvs为例,两台设备上都配备了ipvs和相同的规则,现在就是提供相同入口的问题,即配置vip,我们知道,两台主机不能同时配置相同的一个ip,这就要求,工作中的设备(主设备)一开始拥有vip,作为服务的入口,当主设备出现故障,vip能够转移至备用设备上,以相同的入口,继续提供服务。这里的关键问题:一是备用设备怎么知道主设备故障;二是这个ip怎么转移。

支持并发的系统(如数据库系统,可以同时多个系统连接到数据库,数据库本身提供对访问同一资源的控制,如同时的读写);不支持并发的系统(如共享存储,磁盘共享,一块磁盘同时挂载到多个系统中,各系统对这个磁盘的访问控制不同,磁盘本身没有提供并发访问控制机制);支持并发的存储系统(如nfs,分布式存储系统,samba等)。

主备设备的保持,需要主设备不停通告自己的状态,备用设备接收到,就不去抢占IP,因为备用设备可能有多个,所以这个通告一般是组播,广播的话太耗费网络资源;通告报文的判断,如果备用设备收到的报文是3分钟以前的,如何处理?到底是不是3分钟以前的报文呢,这里就涉及一个时间同步的问题,需要主备设备使用同一个时间标准(手表定律,你拥有一块手表,查看时间时可以很准确的说出时间,但有两块手表时,如果时间不一致,你就无法判断时间)。主备设备之间只要时间严格同步就可以,可以使用ntp协议(网络时间协议,network time protocol)。
时间同步,对于操作系统来说,一般不能直接调时间,否则会导致有一段时间断档,一般是在一段时间内加快或减慢时间流速,时间还是连续的,最后趋于一致。

ntpdate timeserver_ip,客户端同步ntp时间服务器时间

主设备发送通告报文,这个就是心跳,heartbeat,心跳的前提就是时间要同步(time sync)。

keepalived保持主备设备对统一入口IP的维护,使用的是vrrp协议,是vrrp协议在linux上的实现。

vrrp(Virtual Route Redundancy Protocol),虚拟路由冗余协议,这个可以参考前面路由网络文章中的“可靠性配置与管理——VRRP配置与管理”系列文章。

VRRP(虚拟路由冗余协议)指将多个路由设备(可以是路由器,也可以是三层交换机)组成一台虚拟路由设备,并指定其中一台成员路由设备作为主用(Master)设备,其他成员设备作为备用(Backup)设备,然后为这台虚拟路由器分配一个IP地址,作为下游设备的默认网关,可防止单点故障,实现路由设备容错。

keepalived是将主备设备组成一个虚拟设备,为这个虚拟设备分配一个IP地址,就是统一入口地址,这个地址可以根据设备状态在主设备和备用设备间流动,主备设备相互转换,实现设备容错,保证高可用。

对于lvs,使用nat模型,则内网ip也需要流动。

keepalived:就是vrrp协议在Linux主机上以守护进程方式的实现;能够根据配置文件自动生成ipvs规则;对各RS做健康状态检测。

keepalived组件:
  vrrp stack
  checkers
  ipvs wrapper --> ipvs

        vrrp stack:VIP消息通告
        checkers:监测 Real Server
        system call:实现 vrrp 协议状态转换时调用脚本的功能
        SMTP:邮件组件 IPVS wrapper:生成
        IPVS 规则 Netlink Reflector:网络接口
        WatchDog:监控进程

keepalived的安装:keepalived已经集成到发行版中,可以直接安装
yum install keepalived


keepalived的配置文件的组成部分(/etc/keepalived/keepalived.conf):
    GLOBAL CONFIGURATION
    VRRPD CONFIGURATION
        vrrp instance
        vrrp ​synchronization group
    LVS CONFIGURATION​

HA Cluster配置前提
1、本机的主机名与hosts中定义的主机名保持一致,要与hostname(uname -n)获得的名称保持一致;
    CentOS6:/etc/sysconfig/network
    CentOS7:hostnamectl set-hostname  HOSTNAME
    各节点要能互相解析主机名;一般建议通过hosts文件进行解析;
2、各节点时间同步;
3、确保iptables及selinux不会成为服务阻碍;
keepalived.conf:

GLOBAL配置中,还可以配置组播地址:
vrrp_mcast_group4 224.0.0.18

VRRP配置中,虚拟地址的配置
virtual_ipaddress {
               <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
               192.168.200.17/24 dev eth1
               192.168.200.18/24 dev eth2 label eth2:1
           }
 use_vmac [<VMAC_INTERFACE>]  ,配置自己的VMAC。
nopreempt:非抢占模式,默认为抢占模式。

实操测试
1、时间同步:
ntpdate 192.168.61.128
2、配置两台主机:

3、配置vrrp的配置:


一组vrrp中,主节点(MASTER)一个,备用节点(BACKUP)可以是多个

4、启动keepalived
systemctl start keepalived.service ;ssh node2 'systemctl start keepalived.service'

可以看到在node1的ens33接口上,配置了vip地址。
将vrrp配置中的virtual_ipaddress修改为192.168.61.200/24:

将node1的keepalived停止:systemctl stop keepalived.service

vip被配置到node2上了。

5、关于keepalived的日志
启动keepalived后发现没有记录日志,查看keepalived的服务管理文件:/usr/lib/systemd/system/keepalived.service

启动ExecStart=/usr/sbin/keepalived $KEEPALIVED_OPTIONS,带了参数,参数在环境文件:
EnvironmentFile中定义,即/etc/sysconfig/keepalived

查看keepalived的帮助:

keepalived守护进程可以到-D和-S参数,-D参数是记录详细日志,-S指定日志的facility,默认是LOG_DAEMON。
查看日志文件配置:/etc/rsyslog.conf

没有daemon的配置,将keepalived的启动配置成 -D -S 3,修改环境文件/etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 3"
修改日志配置文件/etc/rsyslog.conf,增加rules:
local3.*    /var/log/keepalived.log
重新启动rsyslog和keepalived
查看日志:

手动管理:手动将主节点降级为备用节点,方法是降低主节点的优先级
在配置文件中定义一个vrrp_script,用于节点优先级修改,在实例之外定义:

vrrp_script chk_schedown {script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0"interval 2weight -2
}

测试一直不成功。

[[ -f /etc/keepalived/down ]] && exit 1 || exit 0
如果down文件存在,[[]]返回值是0,即没有错误,整个结果是真,&&后命令执行,即exit 1,脚本整体返回为假,否则exit 0,脚本整体返回为真。对于返回结果为1,说明返回为假,说明不正常,就要执行weight,即instance的优先级priority与weight的和,即100-2,原先是100,减为98,小于备用节点的99,备用节点将成为主节点。

关键是script语句执行的结果为假,即不为0,就要执行weight语句调整优先级,从而切换主备节点。但是为什么这里测试一直不成功呢?说明主节点的优先级一直没有改变,不知道问题出在哪里?

做了一下改变:

/etc/keepalived/test.sh  ,赋予执行权限:chmod a+x test.sh

然后就成功了。

配置vrrp同步组,VRRP synchronization group

主要用于外网和内网需要同步切换的环境。主节点的外网IP出现问题,进行了切换,那么内网IP不管是否出现问题,都要跟着切换。同理,如果内网IP出现故障进行了切换,外网IP也同步切换而不管是否发生故障。一般是lvs-nat模型才会用到这种配置。因为realserver网关需要指向DIP,即内网IP。

配置两个(多个)vrrp,实现高可用的同时,又实现负载均衡,充分发挥每个设备的性能。

正常运行后:

当node1宕机时:


VIP地址全部切换到了node2上。

负载均衡一般可以通过DNS中增加两个A记录,来达到负载均衡,即轮流访问不通的IP。

配置多个vrrp时,GLOBAL中的组播地址采用自动分配,不要手动配置。

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

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

相关文章

YOLOv8/YOLOv11改进 添加CBAM、GAM、SimAM、EMA、CAA、ECA、CA等多种注意力机制

目录 前言 CBAM GAM SimAM EMA CAA ECA CA 添加方法 YAML文件添加 使用改进训练 前言 本篇文章将为大家介绍Ultralytics/YOLOv8/YOLOv11中常用注意力机制的添加&#xff0c;可以满足一些简单的涨点需求。本文仅写方法&#xff0c;原理不多讲解&#xff0c;需要可跳…

【C语言】_指针与数组

目录 1. 数组名的含义 1.1 数组名与数组首元素的地址的联系 1.3 数组名与首元素地址相异的情况 2. 使用指针访问数组 3. 一维数组传参的本质 3.1 代码示例1&#xff1a;函数体内计算sz&#xff08;sz不作实参传递&#xff09; 3.2 代码示例2&#xff1a;sz作为实参传递 3…

解决“KEIL5软件模拟仿真无法打印浮点数”之问题

在没有外部硬件支持时&#xff0c;我们会使用KEIL5软件模拟仿真&#xff0c;这是是仿真必须要掌握的技巧。 1、点击“Project”&#xff0c;然后点击“Options for target 项目名字”&#xff0c;点击“Device”,选择CPU型号。 2、点击“OK” 3、点击“Target”,勾选“Use Mi…

donet (MVC)webAPI 的接受json 的操作

直接用对象来进行接收&#xff0c;这个方法还不错的。 public class BangdingWeiguiJiluController : ApiController{/// <summary>/// Json数据录入错误信息/// </summary>/// <param name"WeiguiInfos"></param>/// <returns></r…

设计模式与游戏完美开发(3)

更多内容可以浏览本人博客&#xff1a;https://azureblog.cn/ &#x1f60a; 该文章主体内容来自《设计模式与游戏完美开发》—蔡升达 第二篇 基础系统 第五章 获取游戏服务的唯一对象——单例模式&#xff08;Singleton&#xff09; 游戏实现中的唯一对象 在游戏开发过程中…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…

如何让用户在网页中填写PDF表格?

在网页中让用户直接填写PDF表格&#xff0c;可以大大简化填写、打印、扫描和提交表单的流程。通过使用复选框、按钮和列表等交互元素&#xff0c;PDF表格不仅让填写过程更高效&#xff0c;还能方便地在电脑或移动设备上访问和提交数据。 以下是在浏览器中显示可填写PDF表单的四…

ThinkPHP 8高效构建Web应用-获取请求对象

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 编程与应用开…

23.行号没有了怎么办 滚动条没有了怎么办 C#例子

新建了一个C#项目&#xff0c;发现行号没有了。 想把行号调出来&#xff0c;打开项目&#xff0c;选择工具>选项> 如下图&#xff0c;在文本编辑器的C#里有一个行号&#xff0c;打开就可以了 滚动条在这里&#xff1a;

30天开发操作系统 第 12 天 -- 定时器

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…

el-table 实现纵向多级表头

为了实现上图效果&#xff0c;最开始打算用el-row、el-col去实现&#xff0c;但发现把表头和数据分成两大列时&#xff0c;数据太多时会导致所在格高度变高。但由于每一格数据肯定不一样&#xff0c;为保持高度样式一致&#xff0c;就需要我们手动去获取最高格的高度之后再设置…

uni-app深度解码:跨平台APP开发的核心引擎与创新实践

在当今数字化浪潮中&#xff0c;移动应用市场呈现出爆炸式增长。为了满足不同用户群体在不同操作系统上的需求&#xff0c;跨平台 APP 开发成为众多开发者的首选策略。uni-app 作为一款领先的跨平台开发框架&#xff0c;以其独特的优势和创新的实践在众多同类产品中脱颖而出。它…

oxml中创建CT_Document类

概述 本文基于python-docx源码&#xff0c;详细记录CT_Document类创建的过程&#xff0c;以此来加深对Python中元类、以及CT_Document元素类的认识。 元类简介 元类&#xff08;MetaClass&#xff09;是Python中的高级特性。元类是什么呢&#xff1f;Python是面向对象编程…

jenkins入门6 --拉取代码

Jenkins代码拉取 需要的插件&#xff0c;缺少的安装下 新建一个item,选择freestyle project 源码管理配置如下&#xff1a;需要添加git库地址&#xff0c;和登录git的用户密码 配置好后执行编译&#xff0c;成功后拉取的代码在工作空间里

在 ASP.NET CORE 中上传、下载文件

创建 Web API 来提供跨客户端和服务器的文件上传和下载是常有的事。本文将介绍如何通过 ASP.NET CORE 来实现。 首先在 Visual Studio 中创建空的 Web API 项目&#xff0c;然后选择目标框架 .Net Core 3.1。 创建名为 FileController 的控制器&#xff0c;提供操作文件的接口…

vue2迁移至rsbuild

背景 由于远程机器配置较低&#xff0c;每次运行vue2项目都会非常卡。后期项目文件、路由更多的时候&#xff0c;启动到一半直接会跳出open too many files类似的错误&#xff0c;尝试将路由屏蔽掉只剩下开发所需的一个路由也不行&#xff08;不是说webpack的打包是全部打包&am…

智能手机租赁系统全新模式改变消费习惯与商家盈利路径

内容概要 智能手机租赁系统的崛起&#xff0c;让我们瞄到了一个消费市场的新风向标。想象一下&#xff0c;传统上人们总是为了最新款手机奋不顾身地排队、借钱甚至是透支信用卡。现在&#xff0c;通过灵活的租赁选项&#xff0c;消费者可以更加随意地体验高科技产品&#xff0…

浏览器报错:您的连接不是私密连接,Kubernetes Dashboard无法打开

问题描述 部署完成Kubernetes Dashboard后&#xff0c;打开HTTPS的web页面&#xff0c;Chrome和Edge浏览器都无法正常加载页面&#xff0c;会提示您的连接不是私密连接的报错。 ​​​​​​​​​​​​ 原因&#xff1a; 浏览器不信任这些自签名的ssl证书&#xff0c;为了…

docker pull(拉取镜像)的时候,无法下载或者卡在Waiting的解决方法

docker pull的时候&#xff0c;卡在Waiting的解决方法 一般情况&#xff08;大部分镜像都可以拉取&#xff09;更换镜像源 进一步&#xff08;如es等拉取不到&#xff09;在镜像同步站搜索详细步骤 还可以在挂载的时候&#xff0c;让其下载对应的版本 一般情况&#xff08;大部…

注册中心如何选型?Eureka、Zookeeper、Nacos怎么选

这是小卷对分布式系统架构学习的第9篇文章&#xff0c;第8篇时只回答了注册中心的工作原理的内容&#xff0c;面试官的第二个问题还没回答&#xff0c;今天再来讲讲各个注册中心的原理&#xff0c;以及区别&#xff0c;最后如何进行选型 上一篇文章&#xff1a;如何设计一个注册…