樊勇兵,陈 天,赖培源
(中国电信股份有限公司广东研究院 广州 510630)
服务器虚拟化技术实现了底层物理资源与上层逻辑资源的去耦合,大大提高了资源的可管理性和弹性部署效率。虚拟机是虚拟化技术呈现在用户面前的最直接的表现形式,是云计算和虚拟化环境中关键的基础元素之一。能否对虚拟机进行持续有效的跟踪、维护和管理,直接关系到云计算服务提供商能否为用户提供一个高质、稳定的服务。虚拟机的管理与物理机的管理之间有本质区别:物理机是物理存在的实体;而虚拟机的实质是一个文件,虚拟机在时间上可以是逻辑的(甚至可以存在于过去),在空间上是可以任意迁移的。虚拟机空间和时间的不确定性给虚拟机管理带来了难题,当某虚拟机出现问题时,难以对虚拟机进行溯源和维护。
虚拟机标识是对虚拟机进行有效管理的一种解决办法。虚拟机标识相当于虚拟机的身份证,即虚拟机的惟一代码,在虚拟机的整个生命周期内保持不变。本文中所说的虚拟机标识,是指创建一个虚拟机时,由虚拟化系统为虚拟机分配的底层标识,该底层标识一般表示为一个字符串。
目前,虚拟化领域各大主流厂商都有自己的虚拟机标识方法,主流虚拟化厂商标识情况见表1,其中UUID(universally unique identifier)[1]。
由表1可见,当前各大虚拟化厂商的虚拟机标识方法大不相同。在实际的大规模公众运营级异构虚拟化环境中,将虚拟机标识作为虚拟机运维管理和故障溯源的依据时,现有的虚拟机标识方法将会产生很多问题,如下。
·格式不兼容:各厂商虚拟机标识的产生机制、格式不同,难以对虚拟机标识进行统一识别。
·管理规则各异:各厂商虚拟机标识的管理规则不同。在虚拟机的生命周期内,无法确定虚拟机标识是否发生改变或是否经重复使用。
·异构管理难题:在大规模的异构虚拟化环境中,各厂商虚拟机标识不同的格式和管理机制,加大了统一运维的难度。
表1 主流虚拟化厂商虚拟机标识情况
·缺乏可读性:现有各种虚拟机标识普遍缺乏可读性,也不能与物理机标识相区别。
·没有考虑物理机与虚拟机、传统分布式计算与云计算之间的巨大差异。
目前,尚没有相关厂商或组织提出虚拟机统一标识的通用解决方案。一种可能的解决方案是直接采用当前应用较为广泛的通用标识方法UUID,但UUID所针对的是分布式计算环境,不能完全适用于虚拟化环境。本文在UUID的基础上,提出一种适合于虚拟化环境的虚拟机标识方法(virtual machine universally unique identifier,VMID)。下面分别对UUID和VMID进行阐述。
UUID是IT领域广泛使用的一种标识方法[1],使分布式计算系统中的所有元素都能自动拥有惟一的标识信息,而不需要额外通过中央控制端进行调控。UUID是通过特定算法生成的一个128位二进制(16 byte)的数字,通常表示为一个由36个字符组成的字符串 (即32个16进制数和4个连接符 “-”),如 3F2504E0-4F89-11D3-9A0C-0305E82C3301。经由一定算法生成的UUID在时间和空间上具有惟一性,并且长度固定,相对比较短小,非常适合于排序、标识和存储,目前已经得到了广泛应用。同时,各大IT设备商出厂的物理机都分配了UUID,并与主板序列号一起作为物理机的惟一性标识。
以传统的网络和计算环境为应用场景的UUID,在虚拟化环境中存在以下缺点和不足。
(1)不能区分物理机和虚拟机
物理机的生产是相对可控、可预见的,而虚拟机的“生产”无论在时间、空间、数量、频率、生命周期还是主体、目的、“生产”条件等方面都是相对随意的。
(2)编码效率低,成本高
UUID格式中的时间戳取值间隔为100 ns。这个时间颗粒度对于高要求的分布式计算是必要的,并且在这样的环境中也具备相应的硬件条件。但对于虚拟化环境而言是一种浪费,同时也对硬件提出了过高的要求。另外,UUID格式中的时间戳编码长度可以满足2 000年的生命周期,这对于虚拟机而言也是基本没有意义的。
(3)不能达到惟一标识
3.2.1 VMID要考虑的问题
VMID的技术方案主要关注以下问题。
(1)与已有标准的兼容性
虚拟化管理不但涉及虚拟机,还涉及物理机,为最大化保障虚拟化管理的兼容性与平滑度,VMID需考虑与UUID的兼容性。因此,VMID尽量延用UUID的产生机制和格式,并在此基础上根据虚拟机的特点进行变动。
(2)区分物理机与虚拟机
为了明确区分物理机和虚拟机,VMID使用UUID的变量字段[1]保留值“111”,表明所标识的是虚拟机。
(3)合适的编码效率和成本
UUID时间戳的颗粒度是100 ns,这个解析度不适用于虚拟化环境。首先,虚拟机的生成速度是按秒计算的,虚拟机的生成频率也至多需要精确到毫秒级;其次,虚拟化环境中一般使用普通硬件和低成本的NTP(时间协议),在网络条件良好的情况下其时间误差为10 ms级别。综合以上两点,兼顾编码效率和系统成本,将VMID的时间戳颗粒度设置为1 ms。另外,考虑到用户使用虚拟机的特点和需求,将VMID的生命周期设置为大于100年。这样得到的时间戳字段长度的计算表达式如下:
(2)确定切缝时间上,需要视混凝土强度以及气温条件而定,通常情况下,当混凝土强度达到8~15MPa时是最佳时间。
由式(1)可知,当时间戳长度设置为42位二进制数、时间间隔为1 ms时,能够保证的确切不重复使用时间为139年,计算如下:
(4)时间起始点的选择
UUID的时间起始点选择的是公历格里高利历法的第一天(即1582年10月 15日),而 VMID的时间起始点的选择与虚拟化的广泛应用有关。综合全球范围内虚拟化和云计算概念的推广和使用情况,VMID的时间起始点定为2000年1月1日0时比较合适。
(5)时钟序列长度
为了保持与UUID格式的兼容性,VMID采用与UUID相同的长度,因此根据42位时间戳长度得到的时钟序列长度为31位二进制数。
(6)可接受的重复概率
VMID从时间和空间两个角度保证了不重复性。时间不重复性通过时间戳和时钟序列双重保证,空间不重复性借助于物理机MAC地址的不重复性保证。当然,VMID还是存在一定的重复概率,可能引发重复的情况分为如下两种。
①同一物理节点在同一时刻开始的1 ms时间间隔内,连续产生n个VMID,这些VMID存在重复情况的概率p(n)是:
其中,N=231,31是二进制时钟序列的位数。当n=128时,p(n)=3.81×10-6;当n=1 024 时,p(n)=2.44×10-4。
②不同物理节点在同一时刻开始的1 ms时间间隔内,连续产生n个VMID,这些VMID存在重复情况的概率p(n)是:
其中,E=20,是NTP误差修正因子(在网络条件良好的情况下,NTP误差为10 ms以下级别);N=231+46,31是二进制时钟序列的位数,46是组播地址可变字段的位数。当n=228=268 435 456 时,p(n)=4.77×10-6。
由此可见,这样的重复概率在现实环境中是完全可以接受的。
(7)使用和管理规则
VMID定位为虚拟机的通用惟一标识,因此VMID一旦创建,即与该虚拟机绑定,在该虚拟机的生命周期内保持不变,并在该虚拟机删除后随之消失。
(8)可扩展性
为了赋予VMID更多的管理功能,可以考虑对VMID的格式进行进一步扩展。因此VMID的版本字段预留有保留值,已为VMID赋予全新的赋值方法。也可以直接对VMID进行扩展,新增字节,添加进管理信息。
3.2.2 VMID编码方案
VMID的具体编码方案总结如下:为了与UUID尽可能兼容,整个编码以UUID为基础,延用UUID的变量字段,并使用其保留值“111”,用以表明所标识的是一台虚拟机;缩短UUID的时间戳字段长度至42位,并随之扩展时钟序列字段的长度至31位。这样得到的VMID是一个128位二进制数,通常表示为36个字符(32个16进制数加4个连接符“-”)组成的字符串,其字符顺序符合网络字节顺序,即最高有效位(most significant byte,MSB)最先。具体格式如图1所示。
对VMID中各字段比特位从高位往低位依次编号为:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15…127,得到 VMID字符串的具体组成如下。
·time_low:32位二进制数,是时间戳的低位字节段,位于VMID的“0~31”号比特位。
·time_hi:10位二进制数,时间戳的高位字节段,位于VMID的“32~41”号比特位。
·clk_seq_low:18位二进制数,时钟序列(clock sequence)的低位字节段,位于 VMID的“42~59”号比特位。
·ver:4位二进制数,版本字段,位于VMID的“60~63”号比特位。
·var:3 位二进制数,变量(variant)字段,位于 VMID的“64~66”号比特位。
·clk_seq_hi:13位二进制数,时钟序列的高位字节段,位于VMID的“67~79”号比特位。
·node:48位二进制数,节点 (node)识别码,位于VMID 的“80~127”号比特位。
VMID的具体赋值规则如下。
·变量字段:其值为“111”,相当于 UUID的变量字段,并通过其保留值“111”表示所标识的是虚拟机。
·版本字段:对于本文档所说明的标识方法对应值为“0000”,其他值作为保留值。
·时间戳:将当前时间,以毫秒为间隔,换算为从2000年1月1日0时0分0秒开始,按照毫秒计数的42位二进制时间戳;对于没有UTC的系统,可以由本地时间代替,但是全系统必须保持一致。
·时钟序列:其值取一个31位的随机数或高质量的伪随机数,用以避免因并发导致的重复或系统时钟偏差(如关机、迁移、误差、硬件更换等)导致的重复。
图1 VMID编码格式
·节点字段:当虚拟机所在系统拥有IEEE 802 MAC地址时,node字段就是该MAC地址,其最低位比特包含global/local比特和unicast/multicast比特;在多MAC地址系统中可以取任一MAC地址。当虚拟机所在系统没有IEEE 802 MAC地址时,将node字段中unicast/multicast比特位设置为 multicast,node字段的其他位取随机数或伪随机数。
3.2.3 VMID管理规则
VMID在虚拟机创建时由系统分配,在虚拟机整个生命周期内保持不变,在虚拟机删除时丢弃不用。VMID与虚拟机生命周期关系如图2所示。
图2 虚拟机生命周期与VMID关系
由图2可见,除了在虚拟机克隆或热备等操作产生新的虚拟机时要分配新VMID之外,原始虚拟机的VMID在其整个生命周期中始终保持不变。可以说,VMID是一个虚拟机的通用惟一标识,完全可以作为虚拟机管理时的溯源依据。
3.2.4 VMID后续扩展
为了赋予VMID更多的管理功能,可以考虑对VMID的格式进行进一步扩展。如利用VMID的版本字段的保留值,为VMID赋予全新的赋值方法;也可以直接对VMID进行扩展,新增字节,添加管理信息,如虚拟机所在数据中心信息及当前所在物理机IP等信息。这些都是可以继续深入考虑的内容。
1 IETF,RFC4122.A universally unique identifier (UUID)URN namespace,2005