Heartbeat3.x应用全攻略之: 测试Heartbeat的HA功能

简介:

一、启动Heartbeat

1、启动主节点的Heartbeat
Heartbeat安装完成后,自动在/etc/init.d目录下生成了启动脚步文件heartbeat,直接输入/etc/init.d/heartbeat可以看到heartbeat脚本的用法,如下所示:
 
 
  1. [root@node1 ~]# /etc/init.d/heartbeat   
  2. Usage: /etc/init.d/heartbeat {start|stop|status|restart|reload|force-reload} 
因而启动heartbeat可以通过如下命令进行:
 
 
  1. [root@node1 ~]#service heartbeat start 
  2. 或者通过 
  3. [root@node1 ~]#/etc/init.d/heartbeat start 
这样就启动了主节点的heartbeat服务
日志信息如下:
 
 
  1. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound send socket to device: eth0 
  2. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: bound receive socket to device: eth0 
  3. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ucast: started on port 694 interface eth0 to 192.168.12.1 
  4. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ping heartbeat started. 
  5. Feb  5 19:09:48 node1 heartbeat: [22768]: info: glib: ping group heartbeat started. 
  6. Feb  5 19:09:48 node1 heartbeat: [22768]: info: Local status now set to: 'up' 
  7. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Link 192.168.12.1:192.168.12.1 up. 
  8. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Status update for node 192.168.12.1: status ping 
  9. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Link group1:group1 up. 
  10. Feb  5 19:09:49 node1 heartbeat: [22768]: info: Status update for node group1: status ping 
此段日志是Heartbeat在进行初始化配置,例如,heartbeat的心跳时间间隔、UDP广播端口、ping节点的运行状态等,日志信息到这里会暂停,等待120秒之后,heartbeat会继续输出日志,而这个120秒刚好是ha.cf中“initdead”选项的设定时间。此时heartbeat的输出信息如下:
 
 
  1. Feb  5 19:11:48 node1 heartbeat: [22768]: WARN: node node2: is dead 
  2. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Comm_now_up(): updating status to active 
  3. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Local status now set to: 'active' 
  4. Feb  5 19:11:48 node1 heartbeat: [22768]: info: Starting child client "/usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s" (102,105) 
  5. Feb  5 19:11:49 node1 heartbeat: [22768]: WARN: No STONITH device configured. 
  6. Feb  5 19:11:49 node1 heartbeat: [22768]: WARN: Shared disks are not protected. 
  7. Feb  5 19:11:49 node1 heartbeat: [22768]: info: Resources being acquired from node2. 
  8. Feb  5 19:11:49 node1 heartbeat: [22794]: info: Starting "/usr/local/ha/lib/heartbeat/pingd -m 100 -d 5s" as uid 102  gid 105 (pid 22794) 
     在上面这段日志中,由于node2还没有启动,所以会给出“node2: is dead”的警告信息,接下来启动了heartbeat插件pingd,由于我们在ha.cf文件中没有配置STONITH,所以日志里也给出了“No STONITH device configured”的警告提示。 
继续看下面的日志:
 
 
  1. Feb  5 19:11:50 node1 IPaddr[22966]: INFO:  Resource is stopped 
  2. Feb  5 19:11:50 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/IPaddr 192.168.12.135 start 
  3. Feb  5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated nic for 192.168.12.135: eth0 
  4. Feb  5 19:11:50 node1 IPaddr[23029]: INFO: Using calculated netmask for 192.168.12.135: 255.255.255.0 
  5. Feb  5 19:11:51 node1 pingd: [22794]: info: attrd_lazy_update: Connecting to cluster... 5 retries remaining 
  6. Feb  5 19:11:51 node1 IPaddr[23029]: INFO: eval ifconfig eth0:0 192.168.12.135 netmask 255.255.255.0 broadcast 192.168.12.255 
  7. Feb  5 19:11:51 node1 avahi-daemon[2455]: Registering new address record for 192.168.12.135 on eth0. 
  8. Feb  5 19:11:51 node1 IPaddr[23015]: INFO:  Success 
  9. Feb  5 19:11:51 node1 Filesystem[23134]: INFO:  Resource is stopped 
  10. Feb  5 19:11:51 node1 ResourceManager[22938]: info: Running /usr/local/ha/etc/ha.d/resource.d/Filesystem /dev/sdf1 /data1 ext3 start 
  11. Feb  5 19:11:52 node1 Filesystem[23213]: INFO: Running start for /dev/sdf1 on /data1 
  12. Feb  5 19:11:52 node1 kernel: kjournald starting.  Commit interval 5 seconds 
  13. Feb  5 19:11:52 node1 kernel: EXT3 FS on sdf1, internal journal 
  14. Feb  5 19:11:52 node1 kernel: EXT3-fs: mounted filesystem with ordered data mode. 
  15. Feb  5 19:11:52 node1 Filesystem[23205]: INFO:  Success 
上面这段日志是进行资源的监控和接管,主要完成haresources文件中的设置,在这里是启用集群虚拟IP和挂载磁盘分区
此时,通过ifconfig命令查看主节点的网络配置,可以看到,主节点已经自动绑定了集群的IP地址,在HA集群之外的主机上通过ping命令检测集群IP地址192.168.12.135,已经处于可通状态,也就是该地址变的可用。
同时查看磁盘分区的挂载情况,共享磁盘分区/dev/sdf1已经被自动挂载。 
 
2、启动备用节点的Heartbeat
启动备份节点的Heartbeat,与主节点方法一样,使用如下命令: 
 
 
  1. [root@node2 ~]#/etc/init.d/heartbeat start   
  2.  或者执行 
  3. [root@node2 ~]#service heartbeat start  
   这样就启动了备用节点的heartbeat服务,备用节点的heartbeat日志输出信息与主节点相对应,通过“tail -f /var/log/messages”可以看到如下输出:
 
 
  1.  Feb 19 02:52:15 node2 heartbeat: [26880]: info: Pacemaker support: false 
  2. Feb 19 02:52:15 node2 heartbeat: [26880]: info: ************************** 
  3. Feb 19 02:52:15 node2 heartbeat: [26880]: info: Configuration validated. Starting heartbeat 3.0.4 
  4. Feb 19 02:52:15 node2 heartbeat: [26881]: info: heartbeat: version 3.0.4 
  5. Feb 19 02:52:15 node2 heartbeat: [26881]: info: Heartbeat generation: 1297766398 
  6. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: UDP multicast heartbeat started for group 225.0.0.1 port 694 interface eth0 (ttl=1 loop=0
  7. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ucast: write socket priority set to IPTOS_LOWDELAY on eth0 
  8. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ucast: bound send socket to device: eth0 
  9. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ping heartbeat started. 
  10. Feb 19 02:52:15 node2 heartbeat: [26881]: info: glib: ping group heartbeat started. 
  11. Feb 19 02:52:15 node2 heartbeat: [26881]: info: Local status now set to: 'up' 
  12. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link node1:eth0 up. 
  13. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Status update for node node1: status active 
  14. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link 192.168.12.1:192.168.12.1 up. 
  15. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Status update for node 192.168.12.1: status ping 
  16. Feb 19 02:52:16 node2 heartbeat: [26881]: info: Link group1:group1 up. 
  17. Feb 19 02:52:16 node2 harc[26894]: info: Running /usr/local/ha/etc/ha.d//rc.d/status status 
  18. Feb 19 02:52:17 node2 heartbeat: [26881]: info: Comm_now_up(): updating status to active 
  19. Feb 19 02:52:17 node2 heartbeat: [26881]: info: Local status now set to: 'active' 
 
二、测试heartbeat的高可用功能
如何才能得知HA集群是否正常工作,模拟环境测试是个不错的方法,在把Heartbeat高可用性集群放到生产环境中之前,需要做如下几个步骤的测试,从而确定HA是否正常工作: 
(1)正常关闭和重启主节点的heartbeat
首先在主节点node1上执行“service heartbeat stop”正常关闭主节点的Heartbeat进程,此时通过ifconfig命令查看主节点网卡信息,正常情况下,应该可以看到主节点已经释放了集群的服务IP地址,同时也释放了挂载的共享磁盘分区,然后查看备份节点,现在备份节点已经接管了集群的服务IP,同时也自动挂载上了共享的磁盘分区。
在这个过程中,使用ping命令对集群服务IP进行测试,可以看到,集群IP一致处于可通状态,并没有任何延时和阻塞现象,也就是说在正常关闭主节点的情况下,主备节点的切换是无缝的,HA对外提供的服务也可以不间断运行。
接着,将主节点heartbeat正常启动,heartbeat启动后,备份节点将自动释放集群服务IP,同时卸载共享磁盘分区,而主节点将再次接管集群服务IP和挂载共享磁盘分区,其实备份节点释放资源与主节点绑定资源是同步进行的。因而,这个过程也是一个无缝切换。
(2)在主节点上拔去网线
拔去主节点连接公共网络的网线后,heartbeat插件ipfail通过ping测试可以立刻检测到网络连接失败,接着自动释放资源,而就在此时,备用节点的ipfail插件也会检测到主节点出现网络故障,在等待主节点释放资源完毕后,备用节点马上接管了集群资源,从而保证了网络服务不间断持续运行。
同理,当主节点网络恢复正常时,由于设置了“auto_failback on”选项,集群资源将自动从备用节点切会主节点。
(3)关闭主节点的系统
在主节点拔去电源后,备用节点的heartbeat进程会立刻收到主节点已经shutdown的消息,备用节点就开始进行资源的接管,这种情况其实和主节点网络故障的现象类似。
(4)让主节点系统内核崩溃
当主节点系统崩溃后,网络也就失去了响应,那么备用节点的heartbeat进程就会立刻检测到主节点网络故障,然后进行资源切换,但是由于主节点系统内核崩溃,导致自身不能卸载所占有的资源,例如共享磁盘分区、集群服务IP等,那么此时如果没有类似Stonith设备的话,就会出现资源争用的情况,但是如果有Stonith设备,Stonith设备会首先将故障的主节点电源关闭或者重启此节点等操作,这样就让主节点释放了集群资源,当Stonith设备完成所有操作时,备份节点才拿到接管主节点资源的所有权,从而接管主节点的资源。 
 
(完)

本专题相关内容

Heartbeat3.x应用全攻略之:概念组成及工作原理http://ixdba.blog.51cto.com/2895551/745228

Heartbeat3.x应用全攻略之:安装、配置、维护http://ixdba.blog.51cto.com/2895551/746271



















本文转自南非蚂蚁51CTO博客,原文链接:http://blog.51cto.com/ixdba/747510 ,如需转载请自行联系原作者







相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
20天前
|
人工智能 搜索推荐 Serverless
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
44 7
使用金庸的著作,来测试阿里通义千问最新开放的长文档处理功能
|
29天前
|
SQL 安全 测试技术
【软件设计师备考 专题 】测试要求说明书的编写和应用
【软件设计师备考 专题 】测试要求说明书的编写和应用
58 0
|
1月前
|
安全 测试技术
现代软件测试中的自动化技术应用及挑战
在当今数字化时代,软件测试的重要性日益凸显。本文探讨了现代软件测试中自动化技术的应用现状和挑战,分析了自动化测试在提高效率、降低成本、增强可靠性等方面的优势,同时也提出了自动化测试所面临的挑战和解决方案。
|
24天前
|
Web App开发 Java 测试技术
深入理解与应用软件自动化测试工具Selenium
随着软件开发的快速发展,软件测试在保证产品质量方面发挥着越来越重要的作用。其中,自动化测试以其效率高、成本低的特点受到了广大开发者的欢迎。本文主要介绍了自动化测试工具Selenium的基本概念、原理以及在实际开发中的应用,旨在帮助读者更好地理解和使用Selenium进行高效的自动化测试。
22 4
|
30天前
|
设计模式 敏捷开发 监控
深入理解与应用软件自动化测试框架
在快速迭代的软件开发过程中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将详细探讨自动化测试框架的核心原理、设计模式及其在实际项目中的应用。我们将分析几种流行的自动化测试工具,如Selenium、Appium和JUnit,并讨论它们如何集成以形成强大的测试解决方案。文章还将展示通过自定义框架来满足特定测试需求的实例,以及如何通过持续集成和持续部署(CI/CD)流程优化测试实践。
|
1月前
|
缓存 运维 Serverless
应用研发平台EMAS产品常见问题之测试检查更新没有反应如何解决
应用研发平台EMAS(Enterprise Mobile Application Service)是阿里云提供的一个全栈移动应用开发平台,集成了应用开发、测试、部署、监控和运营服务;本合集旨在总结EMAS产品在应用开发和运维过程中的常见问题及解决方案,助力开发者和企业高效解决技术难题,加速移动应用的上线和稳定运行。
|
1月前
|
敏捷开发 供应链 测试技术
深入理解与应用软件测试中的Mock技术
【2月更文挑战第30天】 在现代软件开发过程中,单元测试是保证代码质量的重要手段。然而,对于高度依赖外部系统或服务的应用来说,传统的单元测试方法往往难以实施。Mock技术应运而生,它通过模拟外部依赖的响应,使开发者可以在隔离的环境中测试目标代码。本文将探讨Mock技术的概念、应用场景以及如何在软件测试中有效地使用Mock对象,以增强测试的灵活性和可靠性。
|
1月前
|
数据采集 机器学习/深度学习 人工智能
探索AI在软件测试中的应用与挑战
【2月更文挑战第28天】 随着人工智能(AI)技术的迅猛发展,其在软件测试领域的应用逐渐显现出巨大的潜力和价值。本文将深入探讨AI在软件测试中的具体应用,包括自动化测试、智能化缺陷检测、测试用例生成等方面,并分析其面临的挑战,如数据质量、模型泛化能力、技术融合等。通过对比分析和案例研究,旨在为软件测试领域提供新的视角和解决方案。
97 1
|
14天前
|
测试技术 C语言
网站压力测试工具Siege图文详解
网站压力测试工具Siege图文详解
21 0
|
1月前
|
JavaScript jenkins 测试技术
这10款性能测试工具,收藏起来,测试人的工具箱!
这10款性能测试工具,收藏起来,测试人的工具箱!