具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
图2示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图2显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图2所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图3未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
以下结合附图和具体例子描述本发明的实施方式。在本发明的实施例中,一旦检测到虚拟机从同一交换机的一个端口迁移到另一端口,立即将旧的端口所对应的组播组信息全部提供给新的端口,使得新的端口所对应的组播组列表包含旧端口所对应的全部组播组。由此,在虚拟机迁移到新端口之后,立即就可以从新的端口获得所需的组播服务,使得组播服务不会因为虚拟机的迁移而中断。
现在参看图3,其示出根据本发明一个实施例的同步组播组的方法的流程图。如图3所示,根据该实施例的同步组播组的方法包括:步骤32,响应于检测到虚拟机从同一交换机的第一端口迁移到第二端口,获取第一列表和第二列表,该第一列表指示出所述第一端口对应的组播组,第二列表指示出所述第二端口对应的组播组;步骤34,更新第二列表,从而使得第二列表包含所述第一列表中的组播组;以及步骤36,将第一列表和/或第二列表中不需要的组播组老化(age)。下面结合具体例子描述上述各个步骤的执行方式。
根据一个实施例,本发明的方法开始于步骤32,其中响应于检测到虚拟机的迁移,获取用于指示出原端口和新端口分别对应的组播组的第一列表和第二列表。根据另一实施例,本发明的方法在步骤32之前执行附加步骤,从而为步骤32的执行提供基础。图4示出根据另一实施例的方法的流程图。如图4所示,该实施例的方法附加地包括步骤30,检测虚拟机的迁移;以及步骤31,判断所迁移的虚拟机是否来自同一交换机。步骤30和31均可以通过现有技术的方法来实现。
具体地,在步骤30,检测虚拟机的迁移。如本领域技术人员所知,为了解决网络边缘虚拟化的问题,开发了网桥虚拟化技术,其中提出了IEEE802.1Qbg标准。在该标准中,开发了VSI(虚拟终端接口)发现和配置协议VDP,用于发现和配置VSI。通过利用VDP协议,在虚拟机发生迁移时,迁移后的交换机能够快速发现虚拟机的VSI,进而检测到虚拟机的迁移。除了利用VDP协议进行迁移检测之外,还可以利用现有技术中的或未来提出的其他方案来检测虚拟机的迁移。例如,在一个例子中,虚拟机迁移工具可以向虚拟机迁移前后涉及的交换机发出通知。通过接收这样的通知,迁移后的交换机可以检测到虚拟机的迁移。
在检测到迁移的虚拟机的基础上,在步骤31,判断所迁移的虚拟机是否来自同一交换机。在一个实施例中,迁移后的交换机利用前述的VDP协议判断迁移过来的虚拟机是否来自同一交换机。具体地,VDP协议对于虚拟机的VSI进行标识和关联,其中对VSI的标识信息包括对应的VLAN id,MAC地址,VSI类型等。通过这些信息,交换机能够识别出迁移过来的虚拟机是否来自同一交换机。此外,还可以利用现有技术中的其他方案来执行步骤31的判断。
如果步骤31的判断结果为是,即,虚拟机的迁移发生在同一交换机内,只是从该同一交换机的一个端口迁移到另一端口,那么执行同一交换机情况下的同步步骤,即图3的步骤32到36。如果步骤31的判断结果为否,即,虚拟机进行了跨交换机的迁移,则执行步骤38,即跨交换机情况下的同步步骤。
接下来首先描述在同一交换机内进行迁移的情况。在图1的图示中,服务器A,B共同连接到交换机1。因此,如果虚拟机在服务器A和B之间迁移,则属于在同一交换机内迁移的情况。图5更清楚地示出虚拟机在同一交换机内迁移的示意图。具体地,图5仅示出了图1中的交换机1,服务器A和B及其相关的虚拟机,并假定将虚拟机VM1从服务器A迁移到服务器B。由于服务器A连接到交换机的端口1,服务器B连接到交换机的端口2,因此,对于交换机1来说,虚拟机VM1从第一端口,即端口1迁移到了第二端口,即端口2。
为了在上述情况下同步虚拟机的组播组,在步骤32,响应于虚拟机在同一交换机内从第一端口到第二端口的迁移,获取第一端口对应的组播组的第一列表和第二端口对应的组播组的第二列表。如本领域技术人员所知,为了使得各个主机,包括虚拟机,能够获得组播服务,在现有技术中,需要在主机和与主机直接相连的组播路由器之间维持一种组成员协议。在一个典型实施例中,上述协议为组成员关系协议IGMP。IGMP协议运行在网络层。而交换机则通过执行IGMP侦听(IGMP Snooping)机制,在网络层之下的数据链路层进行组播。根据该机制,交换机通过侦听主机与路由器之间传递的的IGMP报文,形成组播组和交换机端口的对应关系。该对应关系可以维持为对应列表的形式。根据该对应关系,交换机将接收到的组播数据包转发给具有相应组播组的端口。也就是说,交换机能够知晓一个端口对应哪些组播组,但是并不关心这些组播组分别是该端口所承载的哪个虚拟机所需要的。由于交换机维持有组播组与各个端口的对应关系,因此,在步骤32,可以容易地基于上述对应关系,获取第一端口所对应的组播组的列表,即第一列表,以及第二端口对应的组播组的列表,即第二列表。
在图5的例子中,上述第一端口就是虚拟机VM1的原始端口,端口1。由于端口1承载了3个虚拟机,VM1,VM2,VM3,因此,端口1对应的组播组,也就是第一列表,包含VM1所加入的组播组,例如IP11,IP12,VM2所加入的组播组,例如IP21,以及VM3所加入的组播组,例如IP31,IP32。可以理解,各个组播组具有其独有的标识。一般地,利用组播IP地址标识一个IP组播组。在虚拟机VM1进行迁移的情况下,第二端口就是VM1所迁入的目标端口,端口2。初始地,端口2承载了2个虚拟机,VM4和VM5,因此,端口2对应的组播组,也就是第二列表,初始地包含VM4所加入的组播组和VM5所加入的组播组。在一个例子中,VM4所加入的组播组包括IP11,IP21以及IP41,而VM5没有加入任何组播组。也就是说,VM4和VM1都加入了同一组播组IP11,VM4和VM2都加入了组播组IP21,并且,VM4还额外地加入了组播组IP41。在这样的情况下,第二列表初始地包含IP11,IP21和IP41。
如前所述,交换机仅维持有组播组和端口的对应关系,并不知晓组播组和虚拟机的对应关系。因此,在虚拟机VM1迁移到服务器B之后,交换机无法立即确定该虚拟机需要哪些组播组。因此,在步骤34,将上述第一列表提供给第二端口,并基于此更新第二列表,使得第二列表包含第一列表中的全部组播组。也就是说,由于交换机无法确定第一列表中哪些组播组是所迁移的虚拟机需要的组播组,于是本发明的实施例将第一列表中的全部组播组提供给虚拟机所迁入的第二端口,这样第二端口对应的组播组列表,即第二列表,就包含第一列表中的所有组播组。由于第一列表中必然包含迁移的虚拟机所加入的组播组,而第二列表被更新为包含第一列表中的所有组播组,那么必然地,第二端口对应的组播组中现在也包含了迁移的虚拟机所需要的组播组。这样,在交换机依照组播组和端口的对应列表分发组播数据包时,就会将与第一列表中的组播组对应的数据发送到第二端口;相应地,迁入到第二端口的虚拟机就可以继续获得所需要的组播数据,而不会因为迁移而中断服务。
为了使得第二列表包含第一列表中的全部组播组,在一个实施例中,步骤34包括,直接将第一列表中的组播组全部添加到第二列表中。在另一实施例中,为避免重复添加相同的组播组,步骤34包括,对于第一列表中的各个组播组,首先判断所述组播组是否已经包含在第二列表中;然后,仅将未包含在第二列表中的组播组添加到第二列表中。
在图5的例子中,第二列表初始地包含IP11,IP21和IP41。通过上述步骤34,端口2获得端口1所对应的第一列表中的组播组,例如IP11,IP12,IP21,IP31和IP32,并将这些组播组都包含在第二列表中。根据一个实施例,由于IP11和IP21已经包含在第二列表中,因此仅将第一列表中的其他组播组添加到第二列表。由此,通过步骤34更新的第二列表包括IP11,IP12,IP21,IP31,IP32以及IP41。
可以理解,第一列表指示的是第一端口所对应的组播组,其中不仅包含迁移的特定虚拟机所加入的组播组,还可能包含第一端口所承载的其他虚拟机所加入的组播组。在所述特定虚拟机迁移离开第一端口之后,第一端口就不再需要与该特定虚拟机相关的组播组数据。另一方面,在通过步骤34更新第二列表之后,第二列表中也包含了上述其他虚拟机所加入的组播组。然而,实际上仅有上述特定虚拟机迁移到了第二端口,所述其他虚拟机并没有发生迁移。因此,第二端口实际上并不需要与这些其他虚拟机相关的组播组数据。例如,在图5的例子中,在VM1迁移到端口2之后,端口1就不再需要VM1所加入的组播组IP11,IP12和IP13。另一方面,修改后的第二列表除了包含端口2承载的虚拟机VM1,VM4和VM5的组播组,还包含端口1承载的VM2和VM3的组播组IP21,IP31和IP32。但是由于VM2和VM3仍然停留在端口1,因此,端口2也不需要与VM2和VM3相关的组播组数据。为此,在接下来的步骤36,将第一列表和/或第二列表中不需要的组播组老化(age),使其过期失效,从而避免这些不需要的组播组给端口带来的不必要的业务量压力。
在一个实施例中,通过组成员的常规查询来执行步骤36。具体地,根据现有的组成员协议,例如IGMP协议,交换机周期性地发出组成员查询,收到查询的虚拟机通过发送成员报告来应答查询。通过这样常规的查询和应答,交换机可以将某个端口上未获得应答的组播组确定为该端口不再需要的组播组,进而使其过期失效。然而,由于现有的组成员协议中交换机发出查询、虚拟机进行应答等步骤的缺省时间间隔均较长,组播组的老化需要较长时间。因此,本发明的实施例还提出快速老化机制,来执行以上的步骤36。
图6示出根据本发明一个实施例的快速老化机制的流程图,该快速老化机制用于老化一个端口上不需要的组播组。如图6所示,为了进行快速老化,在步骤62,将特定端口所对应的组播组列表中的各个组播组的定时器修改为小于缺省定时时间的第一预定时间。在一个实施例中,在步骤62之前首先判断各个组播组的当前定时器的剩余时间是否大于上述第一预定时间;如果大于,则进行上述修改;如果当前定时器的剩余时间小于或等于上述第一预定时间,则可以不进行修改。接着,在步骤64,在所述特定端口中发出组播组的组成员查询,并将查询的响应时间设定为小于缺省响应时间的第二预定时间。可以理解,组成员查询是以查询报文的形式发出。该查询报文由多个字段构成,其中包含响应时间字段,用于指示报文的接收者在字段指明的响应时间内进行应答。因此,步骤64可以通过修改查询报文中的响应时间字段来进行响应时间的设定。然后,在步骤66,响应于在第二预定时间内接收到针对某个组播组的应答报文,将该组播组的定时器修改回缺省定时时间。可以理解,如果接收到了针对某个组播组的应答报文,那么说明,当前端口内必然有虚拟机仍然属于该组播组,也就是说,该组播组仍然具有有效成员。因此,该组播组是端口仍然需要的组播组,不应被老化。于是,在步骤66中,将该组播组的定时器修改回其缺省值,以备后续进行常规的查询和应答。另一方面,在步骤68,响应于在第一预定时间消逝之后仍未接收到针对特定组播组的应答报文,将该特定组播组从该特定端口对应的组播组列表中删除。这是因为,如果未能接收到针对特定组播组的应答报文,那么说明,当前端口内没有虚拟机针对该组播组进行应答,也就是说,该组播组不具有任何虚拟机作为其有效成员。相应地,端口不再需要该组播组,因此,在步骤68,立即将该组播组从端口的组播组列表中删除。
可以理解,第一预定时间是用于判断一个组播组是否仍然具有有效成员的时间周期,那么,第一预定时间应允许有效的组播组的成员及时进行应答。因此,第一预定时间需要大于或等于查询响应时间,即,第二预定时间。在一个实施例中,将第一预定时间设定为等于第二预定时间。在另一实施例中,将第一预定时间设定为略大于第二预定时间,以允许虚拟机在接收查询并进行应答过程中出现可能的延迟。根据以上两个实施例,在第一预定时间的时长内,仅进行一次查询,由此可以快速确定出不需要的组播组。在又一实施例中,进一步考虑数据包丢失的可能性,将第一预定时间设定为第二预定时间乘以查询次数n。这样,在第一预定时间之内,可以反复执行步骤64,以进行n次查询。对于任意一次查询,如果在第二预定时间内接收到针对某个组播组的应答报文,就将该组播组的定时器修改回缺省定时时间。仅当第一预定时间消逝,n次查询都没有收到应答时,才将特定组播组确定为不需要的组播组。由此,可以避免由于数据丢失造成的误判断。
在IGMP协议的情况下,组播组的定时器的缺省定时时间为260s,查询的缺省响应时间为10s。为了进行快速老化,在一个实施例中,将第二预定时间,即查询响应时间,设定为QAQI(快速老化查询间隔)的缺省值2s。如前所述,在快速确定的情况下,可以将第一预定时间设定为等于第二预定时间QAQI。进一步地,在IGMP协议中,设置有鲁棒性变量RV,以允许一定概率的数据丢失。与端口相关的子网的预期数据丢失概率越大,鲁棒性变量RV就被设置为越大的值。RV的缺省值为2。基于鲁棒性的考虑,在一个实施例中,可以将前述的查询计数n设定为上述特定端口相关的子网的鲁棒性变量RV。这样,在第二预定时间设定为QAQI=2s,RV采用其缺省值的情况下,第一预定时间被设置为QAQI*RV=4s。此时,允许在第一预定时间之内进行2次查询。在2次查询都没有收到应答报文的情况下,才将对应的组播组删除。可以理解,以上给出了第一预定时间和第二预定时间设置的具体例子,但是第一预定时间和第二预定时间的具体值可以根据需要进行设定,而不局限于上述例子所列举的数值。
将图6所示的快速老化机制分别应用于第一端口和/或第二端口,就可以实现前述步骤36,即,将第一列表和/或第二列表中不需要的组播组老化。具体地,将特定端口设定为第一端口执行图6的步骤,就可以将第一列表中不需要的组播组老化;将特定端口设定为第二端口执行图6的步骤,就可以将第二列表中不需要的组播组老化。实际上,第一列表中不需要的组播组对应于迁移的虚拟机所加入的组播组;第二列表中不需要的组播组对应于,通过步骤34所添加的组播组中除迁移的虚拟机加入的组播组之外的那些组播组。然而,在步骤36进行不需要的组播组的老化时,交换机只是例如按照图6所示,通过发出查询报文和接收应答报文来判断是否需要一个组播组,而并不在逻辑上区分组播组与虚拟机的对应关系。
在一个实施例中,在步骤36,并行地针对第一端口和第二端口执行图6所示的快速老化机制;在另一实施例中,顺序地针对第一端口和第二端口进行快速老化。或者,在又一实施例中,仅针对第一端口或第二端口执行上述快速老化。可以理解,在针对第一端口和/或第二端口执行快速老化的过程中,针对两个端口的参数设置,也就是第一预定时间和第二预定时间的设置,可以相同,也可以不同。通过在步骤36将不需要的组播组老化失效,就可以避免第一端口和第二端口上不必要的业务量。在此之后,交换机和虚拟机都可以正常进行工作。
通过上述步骤32-36,实现了虚拟机迁移期间组播组的同步。基于这样的同步,虚拟机可以立即在新的端口接收到所需要的组播组数据,而不会因为迁移而中断服务。不过,如前所述,步骤32-36的方法步骤适于虚拟机在同一交换机内进行迁移的情况,例如图1中的虚拟机VM1从服务器A迁移到同一交换机下的服务器B。如果该虚拟机VM1从服务器A迁移到服务器C,则所连接的交换机也发生了改变,属于跨交换机进行迁移的情况。
图7更清楚地示出虚拟机跨交换机进行迁移的示意图。具体地,图7仅示出了图1中的服务器A和C,及其相关的虚拟机和交换机,并假定将虚拟机VM1从服务器A迁移到服务器C。由于服务器A通过端口1连接到交换机1,服务器C通过端口3连接到交换机2,因此,在网络设置方面,虚拟机VM1从服务器A到服务器C的迁移对应于从交换机1到交换机2的迁移。根据现有技术,在虚拟机迁移到不同的交换机的情况下,所迁入的新的交换机无法知道该虚拟机来自哪个交换机的哪个端口,更无法获得该虚拟机所加入的组播组的信息。因此,如图4所示,对于跨交换机迁移的情况,需要执行不同的步骤38。
图8示出根据一个实施例,在跨交换机进行迁移的情况下同步组播组的流程图,也就是上述步骤38的子步骤。如图8所示,在步骤381,响应于检测到虚拟机从不同的交换机迁移到第三端口,向第三端口发出组播组的组成员查询,并将查询的响应时间设定为小于缺省响应时间的第三预定时间。可以理解,虚拟机所迁入的新的交换机可以容易地检测到虚拟机的迁移,并确定该虚拟机所连接的端口。这里将虚拟机迁移之后所连接到的新的交换机的端口称为第三端口。在确定虚拟机连接到第三端口的基础上,向该第三端口发出组成员查询。如前所述,组成员查询的查询报文包含响应时间字段,以指示接收者所允许的最大响应时间。在步骤381,通过修改该字段,可以将查询的响应时间设定为小于缺省响应时间的第三预定时间,从而促使接收者快速进行应答。在图7的例子中,第三端口对应于交换机2的端口3。交换机2一旦检测到VM1的迁入,就向端口3发出组成员查询。
接着,在步骤382,根据接收到的应答报文,确定所述第三端口对应的组播组。可以理解,在接收到步骤381发出的组成员查询之后,第三端口所承载的各个虚拟机都会在第三预定时间之内进行应答。一般地,虚拟机发出的应答报文中会包含其加入的组播组的标识。在获取到各个虚拟机发出的应答报文之后,通过提取其中的组播组标识,就可以确定出第三端口所对应的组播组。一般来说,交换机并不去分析虚拟机和组播组之间的对应关系。因此,在步骤382,交换机只是基于从第三端口接收到的应答报文来确定出第三端口对应的组播组,而不必关心其中的哪个组播组对应于新迁入的虚拟机。这是因为虚拟机已经迁移到第三端口,通过针对第三端口进行查询和应答而获得的组播组列表中必然包含新迁入的虚拟机需要的组播组。只要按照该列表向第三端口提供组播数据包,新迁入的虚拟机必然可以获得需要的组播服务数据。例如,在图7的例子中,通过在端口3进行查询,虚拟机VM1和VM6都会进行应答。相应地,步骤382确定出的第三端口的组播组包含VM1加入的组播组和VM6加入的组播组。只要将这些组播组的数据提供到端口3,VM1必然可以获得所需的组播服务数据。
在一个实施例中,考虑到数据包丢失的可能性,重复以上的步骤381和382,以确保准确获得第三端口对应的组播组。
由于步骤381中的查询是可以响应于虚拟机的迁移而立即发出,因此,虚拟机的组播服务被“中断”的时间主要取决于各个虚拟机进行应答的时间,即,第三预定时间。如前所述,在IGMP协议的情况下,查询的缺省响应时间为10s。更具体而言,查询报文中的响应时间字段是以1/10秒为单位,用数值表示响应时间。因此,在缺省状态下,响应时间字段的数值为100。为了使得虚拟机组播服务被中断的时间尽可能短,可以将第三预定时间设置为上述字段所允许的最小值1,也就是0.1s。在这样的情况下,交换机可以在0.1s时间内确定第三端口对应的组播组,进而提供组播数据,大大减小了组播服务中断的时间。
在另一实施例中,在步骤381中,修改查询报文的格式,从而将上述第三预定时间设定为0,也就是要求接收者立即进行应答。在这样的实施例中,还需要对虚拟机中有关组播服务的模块进行修改,使其能够识别修改的查询报文格式,并依照新格式中规定的响应时间进行应答。根据该实施例,响应于虚拟机的迁移,交换机立即发出查询,并且各个虚拟机立即进行应答,这样,迁移的虚拟机的组播服务几乎不被中断。
根据图8所示的步骤,在虚拟机进行跨交换机的迁移的情况下,通过快速查询和应答,交换机可以在预定的短时间内向各个虚拟机提供所需的组播数据包;相应地,迁移的虚拟机组播服务被中断的时间大大缩短。
以上结合具体例子描述了,虚拟机分别在同一交换机内进行迁移和跨交换机进行迁移的情况下,同步虚拟机的组播组的方法步骤。尽管以上的描述结合了当前通用的IGMP协议的特点,但是应理解,本发明实施例的方法并不局限于应用IGMP协议的系统。在其他类似协议的情况下,可以在本发明构思的范围内,通过修改参数等变体,类似地执行上述方法,用以在虚拟机迁移期间同步该虚拟机的组播组。
基于同一发明构思,本发明的实施例还提供了一种在虚拟机迁移期间同步组播组的装置。图9示出根据本发明一个实施例的同步组播组的装置的示意框图。在图9中,该装置总体表示为900。如图所示,用于同步组播组的装置900包括:列表获取单元92,配置为,响应于检测到虚拟机从同一交换机的第一端口迁移到第二端口,获取第一列表和第二列表,该第一列表和第二列表分别指示出所述第一端口和第二端口对应的组播组;更新单元94,配置为更新所述第二列表,从而使得第二列表包含所述第一列表中的组播组;以及老化单元96,配置为将第一列表和/或第二列表中不需要的组播组老化。
根据一个实施例,上述装置900还包括(虚线示出):检测单元90,配置为检测虚拟机的迁移;以及判断单元91,配置为判断所迁移的虚拟机是否来自同一交换机。
根据一个实施例,所述更新单元94配置为:判断所述第一列表中的各个组播组是否已经包含在第二列表中;并且仅将未包含在第二列表中的组播组添加到第二列表中。
根据一个实施例,上述所述老化单元96包括(未示出):第一修改模块,配置为将特定端口所对应的组播组列表中的各个组播组的定时器修改为小于缺省定时时间的第一预定时间;查询模块,配置为在所述特定端口中发出组成员查询,并将所述组成员查询的响应时间设定为小于缺省响应时间的第二预定时间;第二修改模块,配置为,响应于在第二预定时间内接收到针对某个组播组的应答报文,将该组播组的定时器修改回缺省定时时间;删除模块,配置为,响应于在第一预定时间消逝之后仍未接收到针对特定组播组的应答报文,将该特定组播组从该特定端口对应的组播组列表中删除,其中所述特定端口为第一端口和/或第二端口。
在一个实施例中,上述查询模块配置为,通过修改所述组成员查询的查询报文中的响应时间字段,将响应时间修改为第二预定时间。
在一个实施例中,第一预定时间被设定为第二预定时间乘以查询次数n。相应地,上述查询模块配置为,在所述第一预定时间内发出n次组成员查询。
根据一个实施例,上述查询次数n被设定为所述特定端口相关的子网的鲁棒性变量。
根据一个实施例,上述装置900还包括确定单元98(虚线示出),配置为:响应于检测到虚拟机从不同的交换机迁移到第三端口,向第三端口发出组播组的组成员查询,并将所述组成员查询的响应时间设定为小于缺省响应时间的第三预定时间;以及根据接收到的应答报文,确定所述第三端口对应的组播组。
在一个实施例中,上述第三预定时间被设置为所述组成员查询的查询报文中所包含的响应时间字段允许的最小值。
在一个实施例中,上述装置900包含在交换机中。在另一实施例中,上述装置900作为独立的工具,与交换机通信。
以上同步虚拟机的组播组的装置900的具体执行方式可以参照之前结合具体例子对方法的描述,在此不再赘述。
利用本发明实施例的方法和装置,在虚拟机进行迁移的情况下,可以快速地同步虚拟机的组播组,从而避免虚拟机的组播服务被中断,或者减小中断的时间。
可以理解,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。