APP下载

一种虚拟化集群心跳算法

2015-09-23刘明锦

现代电子技术 2015年17期
关键词:高可用性虚拟化集群

刘明锦

摘 要: 随着虚拟化技术逐渐在数据中心环境中的普及,虚拟化系统的容灾成效日益成为人们关注的焦点,而虚拟化集群的心跳算法是关系虚拟化容灾成效的关键技术之一。研究了一种虚拟化的心跳算法,该算法通过利用所有网络节点有序的进行网络心跳检测,输出一个布尔值,负责裁判进程的Master主机根据该值判断节点是否出现故障,可用于快速检测出集群环境中节点的故障。

关键词: 虚拟化; 集群; 心跳; 高可用性

中图分类号: TN711?34 文献标识码: A 文章编号: 1004?373X(2015)17?0110?04

Heartbeat algorithm for virtualization cluster

LIU Mingjin

(Sichuan Water Conservancy Vocational and Technical College, Chengdu 611231, China)

Abstract: As the gradual popularization of virtualization technology in data centre environment, disaster tolerance effect of the virtualization system has become the focus concerned by people increasingly, and the heartbeat algorithm of virtualization cluster is one of the key technologies to influence the disaster tolerance effect of virtualization. A heartbeat algorithm of virtualization is studied in this paper. The algorithm detects network heartbeats in order by using all network nodes, and then outputs a Boolean value. According to this value, the fault of the node is judged by the Master host which is in charge of progress judgment. It can be used to detect the fault of node in cluster environment rapidly.

Keywords: virtualization; cluster; heartbeat; high availability

0 引 言

现在是云计算的时代,而虚拟化是云计算的基础。为了保障数据的安全性,采用虚拟化技术之后一般都需要做基于虚拟化的高可用性集群,其中心跳检测技术是高可用性集群中非常关键的技术,能够在一定的时间内准确地检测出物理服务器的可用状态(存活或者宕机)的心跳检测技术是实现高可用性的前提和保障。本文提出了一种新的虚拟化的心跳优化算法(Method of Virtualization High Availability,MVHHA),该算法通过集群内物理主机定期发出代表可用性的[α]值,利用HA预设的失效阈值与[α]值进行比较判断数据中心内节点的状况,该算法可用于采用虚拟化技术的高可用集群中主机的存活检测。

在虚拟化领域,常用的检测方法是由一台Master主机(Master由虚拟化集群建立之初由集群选定)在设定的时间内(5 s为一个检测周期)进行HA内的主机存活检测,检测结果输出一个Boolean value布尔值,通过该值的状态判断主机是否存活。通常情况下,主机存活的检测往往在HA高可用性过程(HA高可用性过程包括主机存活检测、失效后的主机解锁、接管以及业务恢复等)中占用时间最长。这种方法比较简单直观,但是检测效率较低、检测时间过长,在一些对于高可用性要求较为严苛的环境中不利于业务的迁移。

1 算法描述

MVHHA算法主要在虚拟化集群的高可用性环境下通过心跳信号检测主机的存活情况。该算法将检测进程和裁判进程分开。检测进程[pi](∑(i=1~n))在集群内的节点(主机)中运行,监控自身节点的运行状况,同时通过进程[pi]检测集群内的其他节点状况。进程[pi]定期向其他节点上的[pi](∑(i=2~n))发送心跳检测包,其他节点的检测进程收到该包之后,返回一个Boolean。如果在规定时间内,该进程收到了其他所有检测进程返回的数据包,表示集群可用。如果没有收到某一台节点的心跳检测包,立刻报告给负责裁判进程的Master主机,由Master主机的裁判进程q进行记录,并返回记录给报告故障的进程[pi。]

为了避免因为网络状况恶化或者主机问题出现的误报,检测进程采用单独的网络进行信号传输,同时,该算法要求检测进程[pi]在收到检测请求时,会比对检测信号的[pi]进程序号,如果是进程序号为[pi-1]的检测进程发出的信号,那么在返回Boolean值之后,[pi]会在预设周期[Ti]内进行下一次的心跳检测。

同时,为了防止Master宕机引起的集群崩塌(单点故障),[pi](i>1)在发送报告给Master时,如果在规定时间t内没有收到Master主机的[pi](i=1)检测进程的回应,将报告发送给[pi+1](i=1)即可。

该算法使用了集群内的所有节点进行多维度的检测,能够快速检测出集群内的节点故障,便于HA高可用性节点上的虚拟机迅速定位和迁移。

2 算法分析

MVHHA算法可以用模型实现,如图1所示。

其检测过程如下:

(1) 检测首先由Master调用检测进程[pi](i=1),经过预设的间隔时间[ΔTi]向集群内的其他所有节点[p1n(i+1)]发送检测数据包,[?i]表示检测数据包的发送时间。

(2) 其他节点收到数据包之后向请求节点返回一个确认信息的数据包,[δi]表示从数据包发出到得到请求所消耗的时间。

(3) 如果节点的检测进程在规定的时间[ΔTi]内收到节点的回复,表示该节点状态正常。

(4) 如果节点的检测进程没有在规定的时间[ΔTi]内收到节点的回复,表示该节点状态不正常,检测进程启动报告机制,向Master进行节点失效汇报。

(5) 在下一个间隔时间[ΔTi],由下一个节点的检测进程[pi+1]向集群内的其他所有节点[p1ni]发送检测数据包,[?i+1]表示检测数据包的发送时间。

(6) 在所有节点的检测都完毕之后,又重新从Master节点的检测进程开始检测,进行循环操作。

(7) Master在收到2个以上节点的失效报告时,即确定该节点不可用,随即启用高可用性HA的应急机制,进行虚拟机的迁移,保障业务的连续性。

其心跳检测过程总耗时为[T,]可以表示为:

[T=inΔTi,][ΔTi]为单个节点检测需要的时间

由此可以看出,整个集群进行一次心跳检测的时间[T]的多少取决于集群中节点数量[n]和[ΔTi]。因此要提高整个集群的检测效率,在不影响工作的情况下,需要计算[ΔTi]的最佳值。

这里采用[ΔTi]的算法:[ΔTi=max2×nΔTi×bM×β, 1nδin,]推演出:

[ΔTi=max2nbMβ, 1nδin]

式中:[n]表示节点数量;[b]表示心跳检测包的大小;[M]表示网络带宽;[β]表示网络正常运行阈值。引入[β]是为了解决在网络端,心跳检测和返回数据不会因为网络拥塞而导致不能够正确到达。

3 算法测试

根据对优化算法的设想,结合Matlab的Simulink工具进行了MVHHA算法的仿真,如图2所示。

图2 Simulink仿真模型

在图2中可以看出,系统设置了3个sFuncation函数Process1,Process2和Process3。用这三个函数模拟集群环境下的节点,通过对这三个函数设置不同的在线概率值,模拟节点的ON/OFF状态,其中对在线节点的概率设置如下:

Function [Broadcast_Master_1,Broadcast_Slave_1,Repaly_Slave_1] = Process1(Receive_replay_1,Receive_broadcast_1)

%#codegen

coder.extrinsic(′rand()′);

Probability=1; %设定在线概率

Message_length=32; %设定心跳检测数据包大小为32 b

Broadcast_Master_1=zeros(Message_length,1);

%初始化对Master广播

Broadcast_Slave_1=zeros(Message_length,1);

%初始化本机询问广播

Repaly_Slave_1=zeros(Message_length,1)-1;

%初始化收到的回复

Broadcast_Slave_1=zeros(Message_length,1)+1;

%发送广播给Slave询问其状态

if(sum(Receive_broadcast_1)~=0)

%若收到来自其他主机的询问广播,则发送自己的状态,在

线概率为Probability

if(rand()<=Probability)

Repaly_Slave_1=zeros(Message_length,1)+1;

% 若在线,回复全1的广播

else

Repaly_Slave_1=zeros(Message_length,1);

%否则,回复全零不在线

end

else

Repaly_Slave_1=zeros(Message_length,1)?1;

%未收到来自其他Slave的询问广播

end

%Repaly_Slave_1 %测试数据

if(sum(Receive_replay_1)==0)

%如果收到存在宕机的Slave,报告该信息给Master

Broadcast_Master_1=zeros(Message_length,1)+1;

End

而Process2设置如下:

Function [Broadcast_Master_2,Broadcast_Slave_2,Repaly_Slave_2] = Process2(Receive_replay_2,Receive_broadcast_2)

%#codegen

coder.extrinsic(′rand()′);

Probability =0; %在线概率

Message_length=512; %数据包大小为512 b

Broadcast_Master_2=zeros(Message_length,1);

%初始化对Master广播

Broadcast_Slave_2=zeros(Message_length,1);

%初始化本机询问广播

Repaly_Slave_2=zeros(Message_length,1)-1;

%初始化收到的回复

Broadcast_Slave_2=zeros(Message_length,1)+1;

%发送广播给Slave询问其状态

if(sum(Receive_broadcast_2)~=0)

%若受到来自其他主机的询问广播,则发送自己的状态,在

线概率为Probability

if(rand()<=Probability)

Repaly_Slave_2=zeros(Message_length,1)+1;

%若在线,回复全1的广播

else

Repaly_Slave_2=zeros(Message_length,1);

%否则,回复全零不在线

end

else

Repaly_Slave_2=zeros(Message_length,1)?1;

%未收到其他Slave的询问广播

end

Repaly_Slave_2 %测试数据

if(sum(Receive_replay_2)==0)

%如果收到存在宕机的Slave,报告该信息给Master

Broadcast_Master_2=zeros(Message_length,1)+1;

end

由此可以看到:Process1和Process3的在线概率为1,在线概率的单位是100%,1表示这台电脑在线,Process2的在线概率为0,表示这台电脑宕机了。

初始数据包大小为32位。

Process中的Broadcast_Slave表示对其他Slave主机的询问信息,在发送这个询问信息时,进行了时间延迟处理,对第二个和第三个Process采用了延时器对数据发送进行延迟,参数设置如下:

Delay length:(dialog)=2

Sample time (?1 for inherited)=0.1(抽样时间)

Broadcast_Slave发送的数据进行了处理,主要是为了避免空值,增加了一个常数容器,值为Zero(512,1),还增加了一个电磁波发生器。这两个容器与输入的信号经过一个开关进行处理,开关的取样时间也是0.1 s,如图3所示。

Repaly_Slave表示当收到其他Slave发送的消息时需要进行回复。回复给每台主机时,需要经过Adjust进行数据的处理,处理过程如图4所示。

如果Slave的Broadcast_Slave发送消息之后, Receive_replay收到有宕机的事件,那么立即报告给Master。在Master端为了更加明显地显示Master收到的内容和波形图,分别用To Workspace输出结果和scope显示波形图,To Workspace中的输出结果如图5所示。

从图5中可以看到,在第2行和第4行时即0.2 s和0.4 s时,Master分别收到了来自第一台Slave和第3台Slave的报告,至此,关于心跳优化算法的虚拟仿真完成。

原来的心跳信号在5 s内由Master主机发送1次心跳检测,也就是说如果出现主机宕机情况,检测时间至少需要5 s以上,在采用了优化算法之后,由于采用了类似分布式检测的优化算法,在[ΔTi]的间隔内由不同的主机按照一定的序号进行集群内的循环心跳信号检测,如果在[ΔTi]时间之内有主机宕机,即可检测出来。

该算法相对于原来算法有着以下优势:

(1) 快速定位。可以在很短的时间内判定主机出现故障,快速定位故障主机。

(2) 时间减少。原算法需要进行检测3次(防止误判),每次5 s,整个过程耗时15 s。而采用集群内其他主机一同参与检测过程,检测次数为2次,耗时为[2ΔTi]秒(设定[ΔTi]的时间小于1 s)。

(3) 增加检测正确性。以往都是由Master主机进行心跳检测,如果出现网络掉包等故障时,可能会出现报错的情况,而进行优化后,可以提供一个所有主机参与的检测结果,提供了更高的正确性。

(4) 增加了集群的稳定性。如果出现故障的主机是Master,那么Slave主机会马上进行Master主机的选举,避免了HA过程出现更长时间的等待,增加了集群的稳定性。

4 结 语

本文提出了一种虚拟化集群的心跳算法,通过该算法对心跳检测流程进行改进,可以极大地减少节点故障的检测时间,它克服了传统心跳机制耗用时间较长、效率低下的问题,同时解决了大规模节点状态下的网络拥塞问题,具有检测效率高、准确性高,具有伸缩弹性等特点。同时,如何利用子网的划分提高网络心跳检测的效率仍然是一个值得深入研究的课题。

参考文献

[1] 王欣.VMware软件虚拟化研究及应用[J].数据通信,2012(6):30?32.

[2] 何禹,胡宇鸿,王一波.虚拟化技术在校园网数据中心的应用[J].电子科技大学学报,2007,36(6):1461?1464.

[3] VMware.VMware文档[DB/OL].[2015?02?23].http://www.vmware.com/cn/support/support? resources/pubs.

[4] GULATI A. VMware distributed resource management: design, implementation, and lessons learned [EB/OL]. [2013?02?15]. http://waldspurger.org/carl/papers/drs?vmtj?mar12.pdf.

[5] 刘媛媛,高庆一,陈阳.虚拟计算环境下虚拟机资源负载均衡方法[J].2010,36(16):30?32.

[6] KATSAROS D, PALLIS G. Cloud computing [J]. IEEE Network, 2011, 25(4): 4?5.

[7] KTAMURA K, HOMMA H. Storage virtualization system and methods: US, 6857059 B2 [P]. 2007?12?13.

[8] NICOL II W B, BOKOR B R, HAGGAR P F, et al. Avatar cloning in a virtual world: US, 8584024 B2 [P]. 20013?11?12.

[9] 王德军,王丽娜.容灾系统研究[J].计算机工程,2005,31(6):43?45.

[10] LOVELAND S, DOW E M, LEFEVRE F, et al. Leve?raging virtualization to optimize high?availability system configurations [J]. Journal of IBM Systems, 2008, 47(4): 591?604.

[11] NATHUJI R, SCHWAN K. Virtual power: coordinated power management in virtualized enterprise systems [C]// Procee?dings of 2007 ACM SIGOPS Symposium on Operating Systems Principles. [S.l.]: ACM, 2007: 265?278.

猜你喜欢

高可用性虚拟化集群
海上小型无人机集群的反制装备需求与应对之策研究
基于OpenStack虚拟化网络管理平台的设计与实现
超长公路隧桥高可用性监控平台方案分析
对基于Docker的虚拟化技术的几点探讨
一种无人机集群发射回收装置的控制系统设计
虚拟化技术在计算机技术创造中的应用
Python与Spark集群在收费数据分析中的应用
浅谈数据库在银行系统的应用
勤快又呆萌的集群机器人
校园一卡通服务端高可用性改造实施方案