HA集群之Heartbeat浅析及heartbeat+haresource

简介:

一、Heartbeat

      Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

heartbeat (Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗 余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。

、Heartbeat的版本介绍

      Heartbeat v1.x和Heartbeat v2.x版本的组成结构十分简单,所有模块都集中在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 v1.x中的集群资源管理器(CRM)是haresource。

      在Heartbeat v2.x中增加了一个功能更强大名为crm的新的集群资源管理器(CRM),自己可以做为一个独立进程来运行,它在各节点上运行一个叫crmd的进程,此进程监听在端口为5560的套接字上,所以服务器端叫crmd,客户端是个命令行接口叫crm(或crm shell),通过这个命令行接口就可以跟服务器端的crmd通信;heartbeat也有图形化界面工具heartbeat-GUI。

      Heartbeat v2.x中为了兼容v1.x保留了haresource。crm管理方式有两种,即:基于命令行crmsh,基于图形界面的hb_gui。

wKioL1Ns3vzAvQJyAAJx8lCxTgU191.jpg

2.Heartbeat v3.x的组件

      Heartbeat 3与2.x 的最大差别在于,3 按模块把的原来2.x 拆分为多个子项目,但是HA实现原理与Heartbeat2.x基本相同,配置也基本一致,并且提供了一个cluster-glue的组件,专用于Local Resource Manager 的管理。即heartbeat + cluster-glue + resouce-agent 三部分:

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

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

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

  • wKioL1Ns3xqxkpFbAAE9g37a54M663.jpg

  通过这三部分已可构成一套完整的HA集群系统。但是,这还不够,因为没有管理工具。而CRM工具crm被进一步拆分,由另一独立项目Pacemaker 负责。Pacemaker 提供了多种用户接口:

  • crm shell 基于字符的管理方式;

  • 一个使用Ajax Web配置方式的web konsole 窗口;

  • hb_gui ,即heartbeat gui 图形配置工具,这也是原来2.x的默认GUI 配置工具;

  • DRBD-MC,一个基于Java的配置管理工具。

  需要说明的是,Pacemaker 支持的Cluster Stacks中,除了Heartbeat,还支持OpenAIS(其中就有corosync)。不过,OpenAIS 的内容已超出本文的范围,有待以后再做介绍。


三、Heartbeat v2.x 基于haresource实现高可用

1.配置主机名

      节点名称很关键,集群每个节的名称都得能互相解析。/etc/hosts中的主机名配置结果必须跟”uname -n”的解析的结果一致。

node1/node2都添加:

node1示例:

# vim /etc/hosts

   172.16.1.11 node1.hoo.com node1

   172.16.1.12 node2.hoo.com node2

# ifconfig eth0 172.16.1.11  up

# hostname node1.hoo.com

# uname -n

# vim /etc/sysconfig/network  //重启才生效,source也不生效

hostname=node1.hoo.com


2.时间同步

  node1,node2都配置

# crontab -e

 */5 * * * * /usr/sbin/ntpdate  172.16.0.1 &> /dev/null


3.配置node之间SSH互信

node1:

#ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''

# ssh-copy-id -i .ssh/id_rsa.pub root@node2.test.com

node1:

#ssh-keygen  -t rsa -f ~/.ssh/id_rsa  -P ''

# ssh-copy-id -i .ssh/id_rsa.pub root@node1.test.com

node1:测试

#  ssh node2.hoo.com ‘date’;date


4.安装httpd

  node1,node2

# yum install httpd -y

# ssh node2 "yum install httpd -y "

# ss -tunl | grep 80

# ssh node2 "ss -tunl | grep 80"


5.安装heartbeat v2.x

      node1,node2都安装包:

   heartbeat-2.1.4-12.el6.x86_64.rpm

   heartbeat-pils-2.1.4-12.el6.x86_64.rpm

   heartbeat-stonith-2.1.4-12.el6.x86_64.rpm

依赖:

   perl-TimeDate

   net-snmp-libs

   libnet PyXML

安装:

# yum -y perl-TimeDate net-snmp-libs libnet PyXML

# rpm -ivh heartbeat-pils-2.1.4-12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm  heartbeat-2.1.4-12.el6.x86_64.rpm


6.配置Heartbeat

  最好按:1、信息层; 2、资源管理器;3、资源代理  配置。

  集群中心跳信息传递,基于组播地址传递的,为防止随便一台主机组播地址装了heartbeat也连接到集群,各节点信息传递是配置认证。认证基于HMAC(消息认证码),使用单向加密算动法实现,单向加密一般有三类:crc(循环冗余校验码)、md5(信息摘要算法)、sha1。

  heartbeat基于udp协议,监听在694端口上。

      a).默认配置目录/etc/ha.d/下没有配置文件,移动配置模板文件至配置目录下

# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys,haresources} /etc/ha.d/

   // authkeys 节点之间认证key文件

   // ha.cf  heartbeat的主配置文件

   // haresources 集群资源管理配置文件(在heartbeat所有版本中都是支持haresources来配置集群中的资源)

b).配置authkeys文件

# openssl rand -hex 8   //生成16位随机数

   ee869d3d86e1556f

# vim /etc/ha.d/authkeys

   #auth 1

   #1 crc

   #2 sha1 HI!

   #3 md5 Hello!

   auth 2       //选择使用sha1加密

   2 sha1 ee869d3d86e1556f

# chmod 600 authkeys

               //修改密钥文件的权限为600,否则无法启动服务

      c).配置主配置文件ha.cf


# vim /etc/ha.d/ha.cf    启用以下参数及功能

logfile /var/log/ha-log

                 //日志文件,正常日志信息记录到哪去的

keepalive 1000ms

                 //每隔多长时间发送一次心跳信息的,单位是秒,毫秒用ms

deadtime 8

                 //隔多长时间探测到对方不在线就kill掉的时间间隔

warntime 10

//警告时间

udpport 694

mcast eth0 225.16.1.169410

//定义组播地址

auto_failback on

//开启故障转回功能

node    node1.hoo.com   //定义两个节点

node    node2.hoo.com

crm on  

//启用crm功能

ping 172.16.0.1

//ping节点

compression     bz2

//压缩格式

compression_threshold 2

//表示小于2K时不压缩传输

      d).配置资源管理文件haresource

# vim haresources

   node1.hoo.com 172.16.249.188 httpd

或:node1.hoo.com IPaddr::192.168.249.188/24/eth0 httpd

# scp -p authkeys haresources ha.cf node2.hoo.com:/etc/ha.d/

      e).启动服务

      node1,node2

# service heartbeat start

# ssh node2 "service heartbeat start"


  7.测试

  浏览器访问正常

查看node1上的IP

[root@node1 ha.d]# ifconfig

      //显示 eth0:0  172.16.1.11  node1为主节点

模拟node1故障

[root@node1 ha.d]# service heartbeat stop  //将node1中的heartbeat关闭

查看node2上的IP

[root@node2 ~]# ifconfig

       // 查看node2的IP,可以看到立即转移到node2上


补充

   httpd是绑定在heartbeat服务上面的 就是启动heartbeat也就启动了httpd,如果node1就httpd进程停止了,heartbeat没有停止,整个系统就访问不了。

   Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序,要监控资源和应用程序是否运行正常, 得使用第三方的插件或者自己按需求写监控脚本脚本。

          -----转自:http://hoolee.blog.51cto.com/7934938/1408615











本文转自 客居天涯 51CTO博客,原文链接:http://blog.51cto.com/tiany/1409050,如需转载请自行联系原作者
目录
相关文章
|
机器学习/深度学习 人工智能 编解码
|
7月前
|
存储 监控 安全
RFID固定资产管理
RFID(射频识别)技术为现代企业固定资产管理提供了创新解决方案。相比传统人工管理方式,RFID技术通过标签与阅读器实现资产快速、精准识别,大幅提升管理效率与准确性。它在资产采购、入库、日常管理、盘点及折旧报废等环节均有广泛应用,帮助企业降低丢失率、优化资源配置并增强竞争力。尽管存在成本和技术标准等挑战,但随着物联网、大数据等技术融合,RFID固定资产管理将更智能化,助力企业高质量发展。
|
前端开发 Java Spring
探索Spring MVC:@Controller注解的全面解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序的基石之一。它不仅简化了控制器的定义,还提供了一种优雅的方式来处理HTTP请求。本文将全面解析`@Controller`注解,包括其定义、用法、以及在Spring MVC中的作用。
349 2
|
C# 容器
C#中的命名空间与程序集管理
在C#编程中,`命名空间`和`程序集`是组织代码的关键概念,有助于提高代码的可维护性和复用性。本文从基础入手,详细解释了命名空间的逻辑组织方式及其基本语法,展示了如何使用`using`指令访问其他命名空间中的类型,并提供了常见问题的解决方案。接着介绍了程序集这一.NET框架的基本单位,包括其创建、引用及高级特性如强名称和延迟加载等。通过具体示例,展示了如何创建和使用自定义程序集,并提出了针对版本不匹配和性能问题的有效策略。理解并善用这些概念,能显著提升开发效率和代码质量。
464 4
|
分布式计算 Java API
Flink教程(04)- Flink入门案例
Flink教程(04)- Flink入门案例
411 0
|
运维 网络协议 Linux
Linux(28) Linux双网卡配置为连接到Linux主机的PC提供外网访问
Linux(28) Linux双网卡配置为连接到Linux主机的PC提供外网访问
826 1
|
消息中间件 监控 算法
Kafka 常用工具脚本总结
Kafka 常用工具脚本总结
807 0
|
Linux
如何将 Find 与 atime、ctime、mtime、amin、cmin、mmin 一起使用?
如何将 Find 与 atime、ctime、mtime、amin、cmin、mmin 一起使用?
941 2
如何将 Find 与 atime、ctime、mtime、amin、cmin、mmin 一起使用?
|
数据可视化 API 调度
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
写在前面 分享一些 AWX 高级作业工作流的创建和调度的笔记 博文内容涉及: 创建和启动工作流模板 Demo 工作流调度和通知的相关介绍 食用方式: 需要了解 Ansible 理解不足小伙伴帮忙指正
643 0
Ansible最佳实践之 AWX 高级作业工作流的创建和调度
|
网络协议 Linux Shell
Linux使用adb命令连接WiFi进行无线调试
Linux使用adb命令连接WiFi进行无线调试
907 0
Linux使用adb命令连接WiFi进行无线调试