高可用集群软件Heartbeat介绍

2023-11-03

一、Heartbeat的定义

       Heartbeat 项目是 Linux-HA 工程的一个组成部分,也是目前开源HA项目中最成功的一个例子,Linux-HA的全称是High-Availability Linux,这个开源项目的目标是:通过社区开发者的共同努力,提供一个增强linux可靠性(reliability)、可用性(availability)和可服务性(serviceability)(RAS)的群集解决方案,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

Linux-HA的官方网站:

                                   http://www.linux-ha.org

                                   http://hg.linux-ha.org

二、HA集群中的相关术语

1)节点(node)
       运行heartbeat进程的一个独立主机,称为节点,节点是HA的核心组成部分,每个节点上运行着操作系统和heartbeat软件服务,在heartbeat集群中,节点有主次之分,分别称为主节点和备用/备份节点,每个节点拥有唯一的主机名,并且拥有属于自己的一组资源,例如,磁盘、文件系统、网络地址和应用服务等。主节点上一般运行着一个或多个应用服务。而备用节点一般处于监控状态。
2)资源(resource)
       资源是一个节点可以控制的实体,并且当节点发生故障时,这些资源能够被其它节点接管,heartbeat中,可以当做资源的实体有:
            磁盘分区、文件系统
            IP地址
            应用程序服务
            NFS文件系统
3)事件(event)
     也就是集群中可能发生的事情,例如节点系统故障、网络连通故障、网卡故障、应用程序故障等。这些事件都会导致节点的资源发生转移,HA的测试也是基于这些事件来进行的。
4)动作(action)
     事件发生时HA的响应方式,动作是由shell脚步控制的,例如,当某个节点发生故障后,备份节点将通过事先设定好的执行脚本进行服务的关闭或启动。进而接管故障节点的资源。

三、Heartbeat的版本与组件

     说明:Heartbeat有三个版本分别为Heartbeat v1.x,Heartbeat v2.x,Heartbeat v3.x。Heartbeat v1.x和Heartbeat v2.x版本的组成结构十分简单,所有模块都集中在heartbeat中,到了v3版本后,整个heartbeat项目进行了拆分,分为不同的项目来分别进行开发。

1)Heartbeat v1.x与v2.x的组件

  •     heartbeat:节点间通信检测模块

  •     ha-logd:集群事件日志服务

  •     CCM(Consensus Cluster Membership):集群成员一致性管理模块

  •     LRM (Local Resource Manager):本地资源管理模块

  •     Stonith Daemon: 使出现问题的节点从集群环境中脱离或重启

  •     CRM(Cluster resource management):集群资源管理模块

  •     Cluster policy engine: 集群策略引擎

  •     Cluster transition engine:集群转移引擎(也叫策略执行引擎)

Heartbeat v1.x与Heartbeat v2.x区别:在Heartbeat v2.x中增加了一个新的集群资源管理器crm,在Heartbeat v1.x中的集群资源管理器是haresource,Heartbeat v2.x中为了兼容v1.x保留了haresource,但同时又新增了一个功能更强大的crm资源管理器。crm管理方式有,一种是基于命令行crmsh,一种是基于图形界面的hb_gui。

2)Heartbeat v3.x的组件

  •     Heartbeat:将原来的消息通信层独立为heartbeat项目,新的heartbeat只负责维护集群各节点的信息以及它                           们之前通信。

  •     Cluster Glue:相当于一个中间层,它用来将heartbeat和pacemaker关联起来,主要包含2个部分,即为LRM                             和STONITH。

  •     Resource Agent:用来控制服务启停,监控服务状态的脚本集合,这些脚本将被LRM调用从而实现各种资源                                     启动、停止、监控等等。

  •     Pacemaker:也就是Cluster Resource Manager(集群资源管理器,简称CRM),用来管理整个HA的控制中                           心,客户端通过pacemaker来配置管理监控整个集群。

四、Heartbeat的各版本之间的区别

与v1.x风格相比,Heartbeat v2.x版本之后功能变化如下:

        1)保留原有所有功能

        2)自动监控资源

默认情况下每2分钟检测资源运行情况,如果发现资源不在,则尝试启动资源, 如果60s后还未启动成功,则资源切换向另节点。时间可以修改。

        3)可以对各资源组实现独立监控

比如apache运行在node1上,mysql运行在node2上,Heartbeat可同时实现两台主机的服务监控

        4)同时监控系统负载

可以自动将资源切换到负载低的node上

        5)新增crm资源管理器

crm管理器可以让heartbeat基于图形界面管理,即hb_gui

与v2.x风格相比,Heartbeat 3最主要变化是功能拆分,Heartbeat官方最后一个STABLE release 2.x 版本是2.1.4,Heartbeat 3官方正式发布的首个版本是3.0.2,Heartbeat 3与Heartbeat2.x的最大差别在于,Heartbeat3.x按模块把的原来Heartbeat2.x拆分为多个子项目,但是HA实现原理与Heartbeat2.x基本相同,配置也基本一致。

五、heartbeat集群中的概念解析

ha_aware如果一个应用程序自己能够利用底层心跳信息传递层的功能完成集群事物决策的过程的软件就叫ha_aware。

DC:Designated Coordinator选定的协调员,当DC所在的主机挂了就会先选出一个DC,再由DC做出事物的决策。注意:在高可用集群中最核心的、最底层的管理的单位叫资源,把资源组合在一起来组合成一个服务。

CRM:Cluster Resources Manager集群资源管理,真正做出决策的是CRM。 

高可用集群中任何资源都不应该自行启动,而是由CRM管理启动启动的;

heartbeat v1版时就有了资源管理的概念,而v1版的资源就是heartbeat自带的,叫haresources,这个文件是个配置文件;而这个配置文件接口就叫haresources;
当heartbeat v2第二版的时候,heartbeat被做了很大的改进,自己可以做为一个独立进程来运行,并而可以通过它接收用户请求,它就叫crm,在运行时它需要在各节点上运行一个叫crmd的进程,这个进程通常要监听在一个套接字上,端口就是5560,所以服务器端叫crmd,而客户端叫crm(可以称为crm shell),是个命令行接口,通过这个命令行接口就可以跟服务器端的crm通信了,heartbeat也有它的图形化界面工具,就叫heartbeat-GUI工具,通过这个界面就可以配置进行。
第三版heartbeat v3,被独立成三个项目heartbeat、pacemaker(心脏起博器)、cluster-glue(集群的贴合器),架构分离开来了,可以结合其它的组件工作了。

RA:resource agent资源代理,其实就是能够接收CRM的调度用于实现在节点上对某一个资源完成管理的工具,这个管理的工具通常是脚本,所以我们通常称为资源代理。任何资源代理都要使用同一种风格,接收四个参数:{start|stop|restart|status},包括配置IP地址的也是。每个种资源的代理都要完成这四个参数据的输出。

失效转移(failover):当某一个节点出现故障时,其上面的资源被自动转移到其它正常的备用节点上并启动的这个过程叫故障转移,也称为失效转移。

故障转回(failback):如果出现故障的节点又回来的,那我们就要把这个节点添加回来,那这个添加回来的过程我们就叫失效转回,也称故障转回。

资源争用、资源隔离:
万一集群发生分裂时,为了避免不再成为集群上的节点继续使用资源而发生资源争用情况,导致有挂载文件系统的系统文件发生崩溃,成为新的集群的就会给不再成为集群的节点补一枪,让不是集群节点的服务死透,不再接收请求,这就叫stonith(shoot the other node in the head),而这种功能就叫资源隔离。争用共享存储的后果是非常严重的,轻则共享存储崩溃,重则整个文件系统都崩溃,数据全部丢失。


资源隔离有两种级别:
       
节点级别:这种就叫STONITH,这种就是不管怎么样直接把对方的电源给切断,一般这种主机都是连接到电源交换机上的。
       
资源级别:这种需要依赖一些硬件设备来完成,比如连接到共享存储的光纤交换机,把需要踢除出去的节点的光纤接口屏蔽了,这种就叫资源级别的隔离。
       对于服务器左右分隔的这种情况通常称为脑裂(brain-split),左右不协调了,在高可以用集群中避免资源争用完成资源隔离是我们在设计高可用集群中必须要考滤的问题。

      两个节点的模式下,一旦发生集群分隔以后,其中一个节点发生故障,在我们无法判定哪个节点不正常的时候,而正常的节点一定是可以连到互联网上去的,这样的话就说明正常的节点是可以跟前端路由通信的,所以我们就把前端路由当成第三个节点,这里我们称为ping节点,当每个节点联系到对方之后先去ping前端的节点,如果可以ping通,那就说明自己是正常的,就说明该节点是有多票法定票数的节点,而前端的ping节点就叫仲裁设备,帮助节点判断哪个节点是优胜一方的,偶数节点数时就会借助于仲裁设备。
       RHCS不是使用ping节点来判断的,他是使用了一个共享存储的设备,偶数个节点处于活动的节点不断的往磁盘中写数据,按照心跳信息频率每隔一个信息频率就往磁盘里写一个数据位,只要这个设备每隔一个心跳时间间隔就更新一次数据位,就说明这个设备处于活动状态的,如果发现节点多次没有写数据位了就认为节点挂了,这种也叫仲裁设备(qdisk)。仲裁设备又有两种:分别为ping node和qdisk;

那心跳是怎么传递的呢,在多台主机之机又是怎么互相工作良好呢,如图:高可用主从的两个节点;

wKiom1NXJgWSL8J2AALpfiAJ3U8039.jpg

信息层(Messaging Layer):主从两个节点的心跳信息都要基于信息层来实现,也叫底层基础架构层,用于传递心跳信息的,而能够实现这种功能的有Corosync和heartbeat,corosync是openAIS的一个组件,
资源分配层(Resource Allocation):也叫资源管理器层,这层的核心组件叫CRM(Cluster Resourcce Manager集群资源管理器),CRM上必须有一个资源被推举成为管理者的,叫Leader,它的工作是决策集群中的所有事物的,这里称为DC(Designated Coordinator指定协调员),任何DC上会额外运行两个进程,一个叫PE(Policy Engine策略引擎),所谓策略引擎就是将底层信息层收集整个集群中所有节点上的信息在本地生成一个大图big pic来策略节点运行在哪个节点上,并通知其实节点上的资源管理器来实现资源的启动和关闭等操作;一个叫TE(Transition Engine 传输引擎),它主要是把PE做出的决策通告给对应节点的CRM;
       集群资源管理器必须借助于Messageing Layer通告给每一个节点,自动的广播或组播给每一个节点,这样就保证了每一个节点上的信息都是一样的,而这些数据在计算机中又怎么样来交互数据的呢,这里就要基于扩展标记语言来实现数据的格式传递的,这种叫半结构化数据基于XML的,所以在各节点之间实现配置信息保存都是通过XML文件保存的,而要能够理解这个XML文件保存的信息使用到一个工具叫CIB(Cluster Information Base集群信息库);只要能连接到CRM上都可以去配置这个XML文件,首先它会先保存到DC的XML中,然后再由DC同步支每个节点上的XML文件中去的;
Resources层:而PE(策略引擎)就是根据XML这个库来获取资源的配置信息的,并通过Messaging Layer不获取当前节点的活动信息,而后做出决策,一旦做得决策就要启动资源了;所以PE借助于本地的Messaging Layer通知给其实节点的集群信息库来实现对某些资源信息的传递,比如说通告其它CRM要启动某一资源了,收到信息后CRM并不负责启动,转由LRM(Local Resource Manager本地资源管理)启动,每个节点上都运行在这个LRM,而并发资源又借助于RA(Resource Agent资源代理)实现资源管理,这就是它的工作原理;CRM负责收集信息,推举为DC的由PE运行,PE负责整合整个集群中的所有资源,并确保某些资源在合适的节点上运行起来,一旦做出决策就会通告给其它节点上的CRM,对应节点上的CRM收到通告以后会调用自己的LRM,由LRM指挥RA完成相关的操作;



本文转自 jerry1111111 51CTO博客,原文链接:http://blog.51cto.com/jerry12356/1855377,如需转载请自行联系原作者

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高可用集群软件Heartbeat介绍 的相关文章

  • 如何输入带有空格的路径?

    我有一个主文件 它使用 从主文件我做一个源 一个带有指向路径的变量的属性文件 属性文件如下所示 TMP PATH COMPANY someProject tmp OUTPUT PATH COMPANY someProject output
  • “设置:非法选项 -”在一台主机上,但在另一台主机上则不然

    我在我的一台 ubuntu 虚拟机中编写了一个 sh 脚本 该脚本工作正常 但是当我尝试在其他虚拟机中运行它时 它不起作用 两个虚拟机应该相同 和bash version两个虚拟机均回复 GNU bash version 4 3 11 1
  • 如何让 Jenkins 2.0 在与结帐相同的目录中执行 sh 命令?

    这是我的 Jenkins 2 x 管道 node master stage Checkout checkout scm stage Build Pex sh build sh 当我运行此管道时 签出会按预期将代码放入工作区 但是它并没有期望
  • Perforce:从命令行“从工作区中删除”?

    The p4v Perforce GUI 客户端 http www perforce com perforce products p4v html具有 操作 gt 从工作空间中删除 菜单命令 该命令可从工作空间中删除受版本控制且未打开进行编
  • Linux find 命令权限被拒绝

    我想过滤掉不必要的信息 权限被拒绝 这些是命令 的输出find type f name sources list find run lxcfs Permission denied find run sudo Permission denie
  • Linux shell 根据第二列对文件进行排序?

    我有一个这样的文件 FirstName FamilyName Address PhoneNumber 如何按 FamilyName 排序 如果这是 UNIX sort k 2 file txt 您可以使用多个 k用于对多列进行排序的标志 例
  • python等待shell命令完成

    我正在运行脚本来解压缩一些文件 然后删除 rar 文件 我通过 shell 运行命令来完成此操作 我尝试了几种不同的方法来让脚本等待文件解压完成 但它仍然继续并在文件使用完成之前删除文件 我已经尝试过下面的代码 这是行不通的 我试图看看是否
  • 在Java中执行.lnk文件

    我需要在java中执行 lnk文件 指向exe文件的lnk文件 我能怎么做 在 VB net 中我做 Process Start path 它有效 谢谢你的帮助 Use a 流程构建器 http download oracle com ja
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 有哪些基于对象的 shell?

    我打算写一个面向对象的shell 基于Python 我已经有很多想法了 但在实现它之前 我想通过一些现有的 shell 来激发我的灵感 我所说的面向对象的基本意思是 参数不仅仅是字符串数组 而且是对象数组 返回值也是一个对象 不仅有 std
  • 如何使用 git hook pre-merge-commit 获取原始合并分支名称

    我正在尝试使用新的 git hook pre merge commit 创建一个特定的脚本 但它没有参数 有什么解决方法可以让我获得正在合并的分支的名称吗 例子 在分支 myBranch 上 我调用 git merge testingBra
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • 关键字“if”如何测试一个值是真还是假?

    在 bash 脚本中 if 1 then echo Yes else echo No fi Output Yes 它表示 1 被视为真值 但在代码中 word Linux letter nuxi if echo word grep q le
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 如何用awk删除以“C”开头的行?

    如何使用以下命令从文本文件中删除以 C 开头的行awk 有什么建议请 如果数据在文件中data txt then With awk awk C data txt With grep grep v C data txt 显示开头不带 C 的所
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 使用 shell 脚本将行附加到 /etc/hosts 文件

    我有一个新的 Ubuntu 12 04 VPS 我正在尝试编写一个安装脚本来完成整个 LAMP 安装 我遇到问题的地方是在 etc hosts文件 我当前的主机文件如下所示 127 0 0 1 localhost Venus The fol
  • 在 AIX 中使用 Mailx 通过电子邮件发送 SQLPlus 查询结果的 Shell 脚本

    我有我需要的命令 如果我在提示符下执行这些命令 一切都会按预期进行 SQLPlus 运行查询 将结果导出到文件 然后 Mailx 将该文件通过电子邮件发送给我 sqlplus username pwd instance SPOOL home

随机推荐

  • 全局变量/局部变量/静态变量

    1 全局变量 全局变量是在所有函数体的外部定义的 程序的所有部分 其他文件的代码 都可以使用 全局变量不受作用域的影响 全局变量的生命周期一直到程序的结束 全局变量是静态存储方式 如果在一个文件中使用extern关键字来声明另一个文件中存在
  • 论文-- 基于 证据理论 的 不确定信息 度量与融合应用

    摘要 1 工程应用 不确定信息 1 模糊集合 表示的 模糊信息 2 语义上不一致或非特异性 造成的 歧义信息 3 开放世界特性 导致的 非完备信息 1 不确定信息的处理 基于证据理论 2 不确定信息分类 封闭世界 空集的基本概率指派函数值为
  • ConvNeXt网络详解

    ConvNeXt 论文名称 A ConvNet for the 2020s 论文下载链接 https arxiv org abs 2201 03545 论文对应源码链接 https github com facebookresearch C
  • 【论文学习】YOLOv3:An Incremental Improvement

    论文 YOLOv3 源代码 pjreddie com yolo 视频 https youtu be MPU2HistivI 1 Abstract 作者对YOLO进行了进一步的更新 做了一些小设计更改让其表现更好 YOLOv3比YOLOv2相
  • 【OS】IO系统——设备管理

    操作系统的设备管理 IO系统 一 啥是IO系统 操作系统是一种特殊的管理系统 管理与计算机相关的各种资源 往大了说 包括硬件资源和软件资源 细化了说 包括计算资源 内存资源 文件资源 设备资源 本文主要讲解设备管理的相关内容 1 OS管理的
  • 一分钟总结Spring的IOC和DI

    IOC Inverse of control 控制反转 IoC 控制反转 就是将程序中原来 new 对象 交给spring创建 从spring工厂获取对象 使用spring来负责控制对象的生命周期和对象间的关系 Spring所倡导的开发方式
  • 数据库视图的基本概念及作用

    一 视图简介 视图是从一个或几个基本表 或视图 中导出的虚拟的表 在系统的数据字典中仅存放了视图的定义 不存放视图对应的数据 视图是原始数据库数据的一种变换 是查看表中数据的另外一种方式 可以将视图看成是一个移动的窗口 通过它可以看到感兴趣
  • vcruntime140.dll丢失的解决方法

    vcruntime140 dll是vc运行库中的链接库文件 一般它会出现的状况就是系统提示dll丢失 这样的情况一般出现在游戏应用或者软件程序中 且会导致程序无法正常运行 只要下载此补丁 根据下面的步骤进行操作即可解决问题若你的电脑不小心丢
  • 前端常用js加密方法

    这里罗列前端常用的js加密方法 base64加密
  • 计算机网络知识点(网络层)

    文章目录 重要内容 4 1 网络层提供的两种服务 4 2 网际协议IP 4 2 1 虚拟互联网络 4 2 2 分类的IP地址 4 2 3 IP地址与硬件地址 4 2 4 地址解析协议ARP 4 2 5 IP数据报的格式 4 2 6 IP层转
  • 关于Android证书MD5获取

    Android打包证书获取MD5值 最近在学习Android开发 在打包成apk时发现需要一个证书文件 于是就随手生成了一个证书文件 在后期使用百度人脸识别SDK时发现需要用到证书文件的MD5值 按照百度说明文档以及网上大多数查看证书文件的
  • Centos7安装配置nginx

    1 前言 在进行nginx安装前 考虑到本博客针对很多新手朋友我决定还是先介绍一些nginx知识 这样更加有利于各位读者朋友对nginx的理解 对后续学习也有很大帮助 介绍 Nginx engine x 是一个高性能的HTTP和反向代理we
  • Android jni报错No implementation found

    2022 04 18 20 25 52 738 28123 28123 com example insectdetector E AndroidRuntime FATAL EXCEPTION main Process com example
  • JS数组和方法【一】

    冒泡排序 数组排序 冒泡排序 冒泡排序 是一种算法 把一系列的数据按照一定的顺序进行排列显示 从小到大或从大到小 var arr 2 3 4 1 2 for var i 0 i lt arr length i 外层循环管趟数 for var
  • IDEA 无法显示 Services,Run Dashboard 的解决方法

    IDEA 无法显示 Run Dashboard 的解决方法 步骤 1 新版的 idea 把 dashboard 已经整合到 service 里面了 但是操作步骤依然是不变的 步骤 2 如果你连 services 都看不到 双击一下 shif
  • ssh框架基于java的爱心捐助平台源码+论文第三稿+查重报告+代码讲解视频(包安装,已降重)

    项目名称 ssh框架基于java的爱心捐助平台源码 效果视频 ssh框架基于java的爱心捐助平台源码 系统说明 功能模块设计 1 系统登录 主要分为管理员和普通用户 由数据库判断输入的账户信息是那种角色 在判断验证的账号和密码匹配后方可正
  • 孔明六曜星图生图总结

    图生图功能 1 图生图 就是文生图加张参考图 2 绘图 就是图生图加上手绘 3 局部重绘 就是只画图生图中的一部分功能 4 局部重绘 手涂蒙版 就是图生图的一部分功能加上绘图 5 上传蒙版 就是局部重绘加上PS的蒙版处理 规定边界 6 批量
  • mybatis工作原理

    1 基本原理 首先看一段JDBC代码 Class forName com mysql jdbc Driver String url jdbc mysql localhost 3306 localdb Connection con Drive
  • 从停产到宣布倒闭,Kuri 见证了一段家庭机器人兴衰史

    转自 https new qq com omn 20180824 20180824A1RPR5 html 曾经勾勒的美好蓝图说没就没了 shenzhenware 上个月 家庭机器人制造商 Mayfield Robotics 曾宣布 因母公司
  • 高可用集群软件Heartbeat介绍

    一 Heartbeat的定义 Heartbeat 项目是 Linux HA 工程的一个组成部分 也是目前开源HA项目中最成功的一个例子 Linux HA的全称是High Availability Linux 这个开源项目的目标是 通过社区开