• [技术干货] 虚拟机sys CPU冲高并且周期性抖动,Time_wait请求很高,导致QPS性能上不去问题解决
    本帖最后由 达康书记 于 2018-3-6 23:01 编辑问题概述: 虚拟机sys CPU冲高并且周期性抖动,Time_wait请求很高,id几乎为0,导致QPS性能上不去。调整参数 net.ipv4.tcp_max_tw_buckets=4096(kernel最大默认值是180000)即可解决sys CPU冲高抖动问题。 11547 此处涉及的内核参数: • net.ipv4.tcp_max_tw_buckets TIME_WAIT状态是怎么产生的? 要弄懂TIME_WAIT要从TCP的四次握手的分手协议说起。 11565 上面这个图片展示了TCP从连接建立到连接释放的过程中,客户端和服务端的状态变化图。如果只看连接释放阶段,四次握手 [*]客户端先发送FIN,进入FIN_WAIT1状态 [*]服务端收到FIN,发送ACK,进入CLOSE_WAIT状态,客户端收到这个ACK,进入FIN_WAIT2状态 [*]服务端发送FIN,进入LAST_ACK状态 [*]客户端收到FIN,发送ACK,进入TIME_WAIT状态,服务端收到ACK,进入CLOSE状态 [*]客户端TIME_WAIT持续2倍MSL时长,在linux体系中大概是60s,转换成CLOSE状态 当然在这个例子和上面的图片中,使用客户端和服务端来描述是不准确的,TCP主动断开连接的一方可能是客户端,也可能是服务端。所以使用主动断开的一方,和被动断开的一方替换上面的图可能更为贴切。 不管怎么说,TIME_WAIT的状态就是主动断开的一方,发送完最后一次ACK之后进入的状态。并且持续时间还挺长的。 能不能发送完ACK之后不进入TIME_WAIT就直接进入CLOSE状态呢?不行的,这个是为了TCP协议的可靠性,由于网络原因,ACK可能会发送失败,那么这个时候,被动一方会主动重新发送一次FIN,这个时候如果主动方在TIME_WAIT状态,则还会再发送一次ACK,从而保证可靠性。那么从这个解释来说,2MSL的时长设定是可以理解的,MSL是报文最大生存时间,如果重新发送,一个FIN+一个ACK,再加上不定期的延迟时间,大致是在2MSL的范围。 问题现象 Linux 实例 /var/log/message 日志全是类似 kernel: TCP: time wait bucket table overflow 的报错信息,提示 time wait bucket table 溢出,如下: [code]Mar 2 12:28:38 i-*** kernel: TCP: time wait bucket table overflow Mar 2 12:28:44 i-*** kernel: printk: 227 messages suppressed. Mar 2 12:28:44 i-*** kernel: TCP: time wait bucket table overflow Mar 2 12:28:52 i-*** kernel: printk: 121 messages suppressed. Mar 2 12:28:52 i-*** kernel: TCP: time wait bucket table overflow Mar 2 12:28:53 i-*** kernel: printk: 351 messages suppressed. Mar 2 12:28:53 i-*** kernel: TCP: time wait bucket table overflow Mar 2 12:28:59 i-*** kernel: printk: 319 messages suppressed.[/code]执行命令netstat -ant|grep TIME_WAIT|wc -l或ss -antp 统计处于TIME_WAIT 状态的 TCP 连接数,发现处于TIME_WAIT 状态的TCP 连接非常多。 11549 原因分析 参数 net.ipv4.tcp_max_tw_buckets 可以调整内核中管理TIME_WAIT状态的数量,当实例中处于 TIME_WAIT及需要转换为 TIME_WAIT状态连接数之和超过了net.ipv4.tcp_max_tw_buckets参数值时,message 日志中将报错 time wait bucket table ,同时内核关闭超出参数值的部分 TCP 连接。您需要根据实际情况适当调整net.ipv4.tcp_max_tw_buckets,同时从业务层面去改进 TCP 连接。 解决思路 1.执行命令 netstat -anp |grep tcp |wc -l 统计 TCP 连接数。 2.执行命令 vi /etc/sysctl.conf,查询参数 net.ipv4.tcp_max_tw_buckets=100000。 3.调整参数 net.ipv4.tcp_max_tw_buckets=4096(调整到4096,可以根据需要调大e.g: 50000,主要考虑local_port_range最大是5w,kernel最大默认值是180000,不同kernel版本此值可能存在差异)即可。 [code]net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.ip_local_port_range = 1024 65000 net.ipv4.tcp_max_tw_buckets = 4096[/code]4.执行命令 # sysctl -p 使配置生效,sys很低且平稳。 11548 net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.ip_local_port_range = 10000 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!) net.ipv4.tcp_max_tw_buckets = 4096 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默 认为180000,改为4096。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。 Linux 常用内核网络参数参考表如下: 参数描述net.core.rmem_default默认的 TCP 数据接收窗口大小(字节)。net.core.rmem_max最大的 TCP 数据接收窗口(字节)。net.core.wmem_default默认的 TCP 数据发送窗口大小(字节)。net.core.wmem_max最大的 TCP 数据发送窗口(字节)。net.core.netdev_max_backlog在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。net.core.somaxconn定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。net.core.optmem_max表示每个套接字所允许的最大缓冲区的大小。net.ipv4.tcp_mem确定 TCP 栈应该如何反映内存使用,每个值的单位都是内存页(通常是 4KB) 第一个值是内存使用的下限; 第二个值是内存压力模式开始对缓冲区使用应用压力的上限; 第三个值是内存使用的上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(注意:其单位是内存页而不是字节)。net.ipv4.tcp_rmem为自动调优定义 socket 使用的内存。 第一个值是为 socket 接收缓冲区分配的最少字节数; 第二个值是默认值(该值会被 rmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值; 第三个值是接收缓冲区空间的最大字节数(该值会被 rmem_max 覆盖)。net.ipv4.tcp_wmem为自动调优定义 socket 使用的内存。 第一个值是为 socket 发送缓冲区分配的最少字节数; 第二个值是默认值(该值会被 wmem_default 覆盖),缓冲区在系统负载不重的情况下可以增长到这个值; 第三个值是发送缓冲区空间的最大字节数(该值会被 wmem_max 覆盖)。net.ipv4.tcp_keepalive_timeTCP 发送 keepalive 探测消息的间隔时间(秒),用于确认 TCP 连接是否有效。net.ipv4.tcp_keepalive_intvl探测消息未获得响应时,重发该消息的间隔时间(秒)。net.ipv4.tcp_keepalive_probes在认定 TCP 连接失效之前,最多发送多少个 keepalive 探测消息。net.ipv4.tcp_sack启用有选择的应答(1 表示启用),通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对 CPU 的占用。net.ipv4.tcp_fack启用转发应答,可以进行有选择应答(SACK)从而减少拥塞情况的发生,这个选项也应该启用。net.ipv4.tcp_timestampsTCP 时间戳(会在 TCP 包头增加 12 B),以一种比重发超时更精确的方法(参考 RFC 1323)来启用对 RTT 的计算,为实现更好的性能应该启用这个选项。net.ipv4.tcp_window_scaling启用 RFC 1323 定义的 window scaling,要支持超过 64KB 的 TCP 窗口,必须启用该值(1 表示启用),TCP 窗口最大至 1GB,TCP 连接双方都启用时才生效。net.ipv4.tcp_syncookies表示是否打开 TCP 同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES 项进行编译,同步标签可以防止一个套接字在有过多试图连接到达时引起过载。默认值 0 表示关闭。net.ipv4.tcp_tw_reuse表示是否允许将处于 TIME-WAIT 状态的 socket (TIME-WAIT 的端口)用于新的 TCP 连接。net.ipv4.tcp_tw_recycle能够更快地回收 TIME-WAIT 套接字。net.ipv4.tcp_fin_timeout对于本端断开的 socket 连接,TCP 保持在 FIN-WAIT-2 状态的时间(秒)。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。net.ipv4.ip_local_port_range表示 TCP/UDP 协议允许使用的本地端口号。net.ipv4.tcp_max_syn_backlog对于还未获得对方确认的连接请求,可保存在队列中的最大数目。如果服务器经常出现过载,可以尝试增加这个数字。默认为 1024。net.ipv4.tcp_low_latency允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况,这个选项应该禁用。net.ipv4.tcp_westwood启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽的整体利用情况进行优化,对于 WAN 通信来说应该启用这个选项。net.ipv4.tcp_bic为快速长距离网络启用 Binary Increase Congestion,这样可以更好地利用以 GB 速度进行操作的链接,对于 WAN 通信应该启用这个选项。net.ipv4.tcp_max_tw_buckets该参数设置系统的 TIME_WAIT 的数量,如果超过默认值则会被立即清除。默认为 180000。net.ipv4.tcp_synack_retries指明了处于 SYN_RECV 状态时重传 SYN+ACK 包的次数。net.ipv4.tcp_abort_on_overflow设置改参数为 1 时,当系统在短时间内收到了大量的请求,而相关的应用程序未能处理时,就会发送 Reset 包直接终止这些链接。建议通过优化应用程序的效率来提高处理能力,而不是简单地 Reset。 默认值: 0net.ipv4.route.max_size内核所允许的最大路由数目。net.ipv4.ip_forward接口间转发报文。net.ipv4.ip_default_ttl报文可以经过的最大跳数。net.netfilter.nf_conntrack_tcp_timeout_established让 iptables 对于已建立的连接,在设置时间内若没有活动,那么则清除掉。net.netfilter.nf_conntrack_max哈希表项最大值。
  • [大咖秀] 【云硬盘大咖秀】【第一期】整机备份之一家人就要整整齐齐
    本帖最后由 紫菜菊花汤 于 2018-3-21 10:20 编辑12959在除夕的24:00,还有许多家人没有回家,大家相约拍下各自的笑脸制作成一张全家福:大表哥:亲们,来,我们准备拍照啦!海南度蜜月的表姐:茄子!留学美国的堂弟:茄子!还在工作岗位上的码农表哥:茄子!……最后所有的照片拼在一起,一家人保持一个表情和口型,气势还是很完美的!发挥一下想象力,如果每一个家庭是一台服务器,每一个家人都是一块云硬盘,每个人给自己拍的照片都是一个快照,最后所有照片拼在一起就定格了除夕24:00点全家人的笑脸,咦~~这个全家福听起来怎么很像存储技术中的整机备份?1. 什么是整机备份整机备份又称云服务器备份(Cloud Server Backup Service,CSBS),可以为弹性云服务器(Elastic Cloud Server,ECS)提供备份服务,支持基于一致性组快照技术的多云硬盘备份服务,并支持利用备份数据恢复弹性云服务器数据,最大限度保障用户数据的安全性和正确性,确保业务安全。简而言之,就是在病毒入侵、人为误删除、软硬件故障等场景下,通过整机备份能将数据恢复到备份的时间点。要做到整机备份,首先必须要保证各个云硬盘备份的一致性,这就涉及到一致性和一致性组。2. 一致性与一致性组整机备份的“一致性”,是指在应用看来备份中的数据是同一时刻的,用该备份恢复后,应用能继续正常运行。存储领域通常将该一致性分为应用一致性(Application Consistency)和崩溃一致性(Crash Consistency)。业界权威的观点:Application Consistency :Consistent copies are created after applications are gracefully shut down, quiesced, or put in hot backup mode。Crash Consistency:Creates point-in-time copy of storage that is usable with crash recovery applications,Creates crash consistent copies without coordinating with applications. However, write ordering is maintained for dependent writes in copies across volumes. It’s a logical dependency,not a time dependency.英文很拗口?那我们就来通俗的说一说——应用一致性,简而言之就是打快照的时候业务不下IO。实现方法:(1)冻结IO,刷缓存(hold住情绪,把之前的表情从脸上刷走、保持微笑);(2)对一组云硬盘打快照(拍照);(3)解冻IO(拍完了照、想摆啥表情就摆啥表情)。崩溃一致性指系统崩溃(突然掉电或死机)时数据所处的一致性状态,理论上任何应用都应该能处理突然掉电或死机的情况,即系统恢复后应用能根据崩溃时数据的状态继续业务或正常开始新业务。崩溃一致性对应用下IO的顺序有时序上的要求,满足崩溃一致性的备份要保证数据之间时序上的依赖关系不被破坏。整机备份满足崩溃一致性的实现方法:打一致性组快照。说到一致性组快照,要先介绍一下什么是一致性组。典型的企业应用,譬如数据库场景,数据往往分布在多个云硬盘上,数据之间的依赖关系也在多个云硬盘之间存在,这多个云硬盘就组成了一致性组。[hide][/hide]图2.1 日志盘与数据盘组成的一致性组譬如,在图2.1的例子中,应用必须等待写日志(IO1)完成才会去写数据(IO2),且必须等待写数据(IO2)完成才会去删日志(IO3),因此该Log disk与Data disk组成了一个简单的崩溃一致性组。为了使一致性组快照满足崩溃一致性,底层存储对各个云硬盘创建出来的快照有时序上的要求。下面我们来看创快照的时序正确的场景:场景一:在t1ϵ(T1,T2)时刻对Log disk打快照;在t2ϵ(T1,T2)时刻对Data disk打快照图2.2 正确时序:一致性组快照中只能读到IO1如图2.2所示, Snap_log中可以读到IO1, Snap_data中不包含IO2。这种情况是从一致性组快照中只读到了IO1,满足时序。如果系统崩溃,我们可以将数据恢复到t2。场景二:在t1ϵ(T1,T2)时刻对Log disk打快照;在t3ϵ(T2,T3)时刻对Data disk打快照图2.3 正确时序:一致性组快照中能读到IO1和IO2如图2.3所示, Snap_log中可以读到IO1,Snap_data中可以读到IO2,这种情况是从一致性组快照中读到了IO1和IO2,满足时序。如果系统崩溃,我们可以将数据恢复到t3。换言之,Log disk和Data disk打快照的时序需要满足:在这两个快照中,要么三个IO都没有,要么只能读到IO1,要么能读到IO1和IO2,要么能读到IO1、IO2和IO3,即这两个快照对于这三个IO满足时序依赖。下面我们看一个错误的打快照的时序:场景三:在t0ϵ(0,T1)时刻对Log disk打快照;在t3ϵ(T2,T3)时刻对Data disk打快照图2.4 错误时序:一致性组快照中不能读到IO1可以读到IO2如图2.4所示, Snap_log中读不到IO1, Snap_data中可以读到IO2,这种情况违背了IO1->IO2->IO3的时序依赖。假如写IO2的过程中出错,此时Snap_log中没有对IO1的记录,无法通过日志正确恢复数据,造成数据丢失。3、整机备份的具体实现第2部分,我们介绍了应用一致性和崩溃一致性,对应这两种不同的一致性,整机备份有两种实现方式。3.1整机备份实现应用一致性图3.1 整机备份实现应用一致性(1) 开始进行整机备份(大表哥说:准备拍照了哦)(2) 查询虚拟机中的云硬盘列表(全家人分别用手机对准自己)(3) 后端存储收到消息后,对虚拟机冻结IO,刷缓存(大家控制表情,把之前的表情刷到脑后,脸上只留下这一刻的笑容)(4) 生产存储创建快照( “啪”地一声按快门拍照)(5) 解冻IO(拍完了照,想咋样就咋样)(6) 备份软件将快照备份到“备份存储”中(照片自动存到手机里)3.2整机备份实现崩溃一致性[hide][/hide]图3.2 整机备份实现崩溃一致性对比图3.1和图3.2,可以看出实现崩溃一致性,对上层应用不可见,不需要冻结和解冻IO,但是要在生产存储中打一致性快照,一致性组快照需要满足时序依赖,详见本文第2部分。综上,应用一致性备份间隔不能太短,否则应用需要频繁刷数据,影响业务;崩溃一致性组快照则可以在1秒内完成且应用不感知。应用一致性与崩溃一致性各有其特点,上层可根据不同的应用场景灵活选择。Finally~上文中我们详细讨论了整机备份的流程和一致性,由此我们得出一个概念,整机备份就是让虚拟机里面的“云硬盘们”能够一家人happy地拍个“全家福”,通过这个“全家福”我们随时可以感受到当年的幸福状态(恢复到备份时的数据和状态)。所以,现在你知道整机备份是什么了吗?哈哈,是的,整机备份就是一家人要整整齐齐~~在此给大家拜个晚年,祝大家新年快乐!
  • 【爆个料】创建虚拟机能够直接在界面上选择地区
    有的时候虚拟机的信息都填得差不多了,突然发现地区选错了,只能在页面最上方重新选(如华北改华东) 并且在页面最上方选完之后,虚拟机信息的内容都清空了,又得重新来一遍 希望这类选择地区的操作,能够直接在创建的页面上选择地区
  • [交流分享] 裸金属云服务哪家强?华为云笑了
    几年前,当公有云以敏捷、灵活、低成本的强大优势快速席卷国内市场的时候,记者曾经借着采访的机会问过多位行业用户和企业用户同一个问题:您会全盘接受公有云吗?当时有不少客户表达了同一个意思:公有云的确带来了革新,但短期内不会考虑将核心应用放到公有云上。核心应用拒绝公有云的原因有很多,不外乎是关键数据库业务的隔离性、核心业务的高稳定性需求、数据安全合规性等因素。但是现在,华为云裸金属服务器(Bare Metal Server,简称BMS)面市之后,之前客户们的诸多顾虑都可以烟消云散了。 9596 云端的“一亩三分地”为什么值得拥有?华为云裸金属服务器最大的特点就是让单租户拥有物理隔离的专属物理服务器,不存在任何形式的虚拟化。它既可以让客户享受到卓越的计算性能保障,也可以充分享有云服务器的快捷灵活,可以说是综合了传统托管主机的稳定性与云上资源高度弹性的两大优势。那么华为云裸金属服务器主要锁定哪些用户群体呢?且听记者一一道来。如果你的企业核心业务在上云过程中,对于性能、安全、稳定性要求很高。又期望像使用云主机服务一样使用物理机实现资源弹性使用、网络灵活配置…… 那么,交给裸金属服务器就够了。华为云BMS裸金属服务器满足企业核心业务上云的主流场景诉求:场景一 需要物理机与虚拟机结合:用户在云中需要使用多种类型和形态的计算资源,仅仅提供虚拟机无法满足复杂的应用场景,需要物理机和虚拟机结合使用才能满足应用要求。场景二 性能要求高,安全监管严:一些特殊应用场景对主机的性能和稳定性要求很高,或者对数据安全和监管的要求非常苛刻,直接使用虚拟机无法满足客户需求,需要独占物理机。场景三 传统托管不能满足需求:传统物理机托管或者租赁场景下,业务流程复杂,设备采购和部署开通周期长,无法及时响应业务变化诉求。场景四 使用物理机才有“安全感“:部分企业,尤其是大企业,在私有数据中心部署的业务系统非常复杂,需要一定专业技能,培养了一批专业人才,切换到公有云上,非常重视心理上的“安全感”和人才技能的转型,选择物理机无需改造业务、无需人才技能转型,最“安全”。简单地说,如果客户有一个需要快速上线的应用程序,或者有临时的业务负载,必须在几分钟内上线并且运行一段时间后下线,应用对性能和稳定性要求一般,那么虚拟机是不错的选择。但是如果客户的应用程序对性能很敏感,并且要求安全可靠的运行环境,那么裸金属服务器毫无疑问将是最佳选择。华为云裸金属BMS服务积淀深厚事实上,记者横向对比一番发现,虽然都冠名为裸金属服务,但是每一家厂商的侧重点和优劣势都各有不同。相比之下,华为云裸金属业务则在技术积累上拥有更多优势。早在虚拟化、私有云时期,华为就对裸金属业务积累了丰富经验,从早期的统一硬件管理平台到异构服务器管理,再到后期的云管理平台,发力公有云业务后,推出了完整的裸金属服务,因此对裸金属服务的全栈能力有深刻的理解。换而言之,裸金属服务继承了华为在硬件领域多年来的积累,华为的服务器在国内市场份额已经第一,BMS服务的推出可以说是站在巨人肩膀上的产物。凭技术实力说话的NO.1经过一番了解,记者将华为云裸金属服务器的优势概括为六点:第一,已经实现全自动化发放。用户在管理控制台自助申请裸金属服务器,无需人工介入,即可完成自动化镜像安装、网络配置、云硬盘挂载等功能,最短5分钟以内就可以拿到所需的服务器。第二,支持云硬盘。用户可以轻松地在线对裸金属服务器进行云硬盘的挂载、卸载,满足客户对弹性存储的要求。其中,对于数据库的集群部署,BMS可自动挂载共享卷,用户体验很好。(PS: 这个核心能力大部分BMS提供商都不具备噢!)第三,支持VPC网络和自定义网络。BMS支持通过VPC内的私有网络,实现裸金属服务器和云服务器之间网络互通,同时支持自定义网络实现裸金属服务器之间高速互通,灵活组网。第四,可以进行生命周期管理。华为提供了一个BMS管理控制台,用户可以在控制台上进行裸金属服务器的启动、关机、重启、挂卷、删除等基本操作,也可以进行监控、远程登陆、状态查询等自主维护功能。第五,面向细分场景的多种BMS实例。针对数据库场景,BMS推出的通用型规格,自动化发放、支持共享卷,可集群部署,可与虚拟机混合组网,支持弹性IP,挂载的云硬盘三副本保存,可靠性非常高。针对大数据场景、高性计算和异构计算场景,华为云都有丰富的实例供参考选择。第六,性能可靠、业务稳定。这应该用户最关心的问题了吧,华为的裸金属业务对于性能、数据可靠性和业务稳定性同样提供了多种解决方案。例如BMS可以挂载云硬盘EVS。3副本冗余,数据持久性高达99.99999%,保证数据安全可靠。此外像一键重装、多站点异地容灾、整机备份都已经是标配,确保客户真正无忧上云。虽然华为云的裸金属业务已经可以笑傲群雄,但是华为云还远未止步。其裸金属业务还在不断地优化各种产品能力,例如如何将服务器的启动、加载时间缩短至最少,减少用户的等待时间。相信通过这些细节,精心打磨之后的华为云裸金属业务将让有需求的用户们更加青睐。9598
  • 【德智信息】虚拟化私有云、数据中心整体方案服务提供商
    本帖最后由 德智科技 于 2018-1-24 11:27 编辑企业介绍 武汉德智信息科技有限公司成立于2013年,注册资金伍佰万元。公司主营业务涉及自主云计算软硬件产品研发销售;计算机信息系统集成;虚拟化云计算数据中心规划咨询、方案设计、建设交付及运维服务;海量数据高级工程师及云计算架构师企业培训等领域。 经过多年的经验探索和能力积累,随着虚拟化、物联网、云计算技术和应用的广泛推进,公司做为云计算企业级合作伙伴,在华中地区已打造出“虚拟化私有云专家、数据中心整体方案服务提供商”的专业定位。以搭建云计算平台、优化存备结构、护航数据中心、确保应用交付的服务理念,致力于为湖北省政府、教育、公安、医疗、金融、制造等行业,提供以云计算虚拟化数据中心建设为核心的综合信息化服务,华为认证服务解决方案伙伴! 企业文化 专注 ——我们始终坚持科技为本,追求卓越领先 沟通 ——沟通造就我们的过去,沟通引领我们的未来 创新 ——我们适时更新思维,把握科技时代脉搏,创新无处不在 责任 ——我们关注个人的成长和行业需求,促进领航发展,实现客户的投资回报最大化 企业发展历程 2013年 “武汉德智信息科技有限公司”成立,确立以建设私有云为企业发展方向,以政府、企业信息化服务为核心业务的企业经营战略。 2014年 拓展到包括系统集成、IT 维护、IT 外包、IT 教育与培训、IT 咨询和IT 运营管理服务在内的专业服务领域;网络接入服务、网络下载服务、网络游戏服务等多种形式的网络服务领域。 2015年 公司组建云计算相关技术研发与运营服务团队,为云计算数据中心的建设、运营及服务提供高效、低成本的解决方案和产品。 2016年 提供一站式云服务,通过系统服务,整合政府、高校、企业资源,构筑面向数据服务产业平台。
  • [互动交流] 请问一个虚拟机能否绑定2个弹性ip
    我创建了一个虚拟机,绑定了两个弹性ip,相当于两个网卡,但是为什么相互之间ping不通? 从其他主机ping,只能ping通其中一个ip
  • [技术干货] 如何处理CentOS 7.0虚拟机启动卡在屏幕加载过程中的问题
    本帖最后由 os_center_online 于 2017-12-5 17:20 编辑背景及现象描述(Background and Symptom)* CentOS 7.0的虚拟机关机再开机时,卡在桌面加载的过程中,按F2键后看到如下报错: 6082 方法说明(Summary)* 1、虚拟机内部操作系统有一套自己的启动流程,如果启动失败,可以根据屏幕报错信息在OS社区查看修复方法或者联系OS厂商进行定位解决。 2、在CentOS社区查找“Failed to start LoginService”,发现已有案例,是因为/etc/selinux/config文件配置有误引起。 社区案例链接:https://unix.stackexchange.com/questions/321038/cannot-login-failed-to-start-login-service。 解决办法(Solution)* 1、重启虚拟机,启动时编辑内核参数进入单用户模式: 参考命令:在vnc界面按“ctrl alt del”键重启虚拟机; 虚拟机启动时,弹出启动菜单后按“e”键进行编辑,找到内核参数所在行,在末尾添加“single init=/bin/bash”; 编辑完成后,可以按“ctrl x”启动虚拟机。 2、在单用户模式下修改selinux配置: 参考命令:执行“mount -o rw,remount /”命令以可写方式重新挂载根分区; 将“/etc/selinux/config”文件的内容进行校正,示例如下: 6083 3、重启虚拟机恢复即可。
  • [技术干货] 如何解决Windows Server 2008虚拟机内的VPN服务无法正常工作的问题
    摘要:当Windows Server 2008虚拟机作为服务器提供的VPN服务服务无法正常工作时,可以通过本文所述方式,通过关闭网卡的Checksum Offload属性的方式解决。 背景及现象描述(Background and Symptom)*当Windows Server 2008虚拟机作为服务器提供VPN服务,本虚拟机可以访问对应的服务,但是其他虚拟机通过此虚拟机的VPN能力无法访问目的服务器。在VPN服务器已发出对应的请求报文,但是未得到目的服务器的响应。比如:VPN服务器本身可以访问某网站,但是其他虚拟机无法通过VPN服务器跳转访问该网站。原因分析(Cause Analysis)*VPN功能的实现修改了报文中的报文的IP地址,需要对报文的IP头的Checksum重新计算。部分Windows系统(包括Windows Server 2008)在实现VPN功能时,在开启了网卡的Checksum Offload能力时,未对报文的IP头进行Checksum校验。当前虚拟化场景下,虚拟网卡均不会对报文进行IP层的checksum校验。导致请求报文的IP层checksum异常,目的服务器拒绝对其请求进行相应。业界虚拟网卡均无对报文IP层进行Checksumd offload此能力,亚马逊提供的Windows 2008作为VPN服务器的配置指导如下:http://docs.aws.amazon.com/AmazonVPC/latest/NetworkAdminGuide/CustomerGateway-Windows.html确认问题符合当前案例描述的原因的方法如下:1. 右击“我的电脑->管理->设备管理器->网络适配器”,右击“Xen Net Device Driver”,在弹出的快捷菜单中,单击“属性”,在弹出的“Xen Net Device Driver 属性”对话框中选择“高级”页签,选择“Checksum Offload”,查看其值是否为Enable。如果为Disable,则问题不是由本案例描述原因引起。2. 在目的服务器端抓包确认,能抓取到从VPN服务器发送过来的请求报文,但是目的服务器未响应,其中请求报文中IP层的Checksum错误。解决办法(Solution)*关闭网卡的Checksum Offload配置。具体操作如下:1. 右击“我的电脑->管理->设备管理器->网络适配器”。2. 右击“Xen Net Device Driver”,在弹出的快捷菜单中,单击“属性”,在弹出的“Xen Net Device Driver 属性”对话框中选择“高级”页签,将“Checksum Offload”属性值由“Enabled”改为“Disabled”。
  • 【干货分享】华为云API介绍(二)华为云python SDK 使用指导
    本帖最后由 Mercy 于 2017-11-27 10:33 编辑前提条件 1. 已经获取相关API文档。 登录以下网站获取API相关文档: http://developer.huaweicloud.com/index.html 通过这些文档,可以学习云平台所支持的API参数。 2. 已获取Python OpenStack SDK的官方文档。 登录以下网站获取Python OpenStack SDK 的官方文档: https://developer.openstack.org/ ... dk/users/index.html 了解如何使用Python OpenStack SDK对用户而言非常重要。 3. 已经申请到云平台账号,并开通所需的服务。 Project/Domain参数获取方法见: http://forum.huaweicloud.com/forum.php?mod=viewthread&tid=1813 endpoint/AZ信息见: http://developer.huaweicloud.com/endpoint.html 4. python-openstacksdk 适用于 Python 2.7.x 和 3.5.x 系列版本。 5. 欲了解Python SDK项目的源代码,请访问如下地址。 https://github.com/huawei/python-openstacksdk SDK获取与安装(使用git) 请从GitHub 上下载源代码进行安装。(以下为Linux示例,Windows可以使用pycharm)cd your-workspace-folder git clone https://github.com/Huawei/python ... python-openstacksdk cd huawei-python-openstacksdk # install master git checkout master pip install -r requirements.txt python setup.py install 脚本示例:(脚本示例放在examples文件夹下,见帖子最下方截图) 脚本示例中包含如下内容: 1、创建虚拟机(带安全组、带反亲和性组),将虚拟机加入到ELB后端,从ELB上移除虚拟机,查询ELB后端,删除虚拟机、 2、启动、停止、查询虚拟机 3、创建空卷,创建快照,从快照创建卷,挂载卷到虚拟机,从虚拟机卸载卷,删除卷,删除快照 4、申请弹性IP并绑定给虚拟机,查询弹性IP,删除弹性IP #encoding:utf-8 # Copyright 2017 HuaWei Tld # Copyright 2017 OpenStack.org # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. #encoding:utf-8 import sys reload(sys) sys.setdefaultencoding(´utf8´) import os import random import time from openstack import connection from openstack import exceptions # those services´s endpoint will be auto detected from V3 auth token # # Nova -> ECS # Cinder -> EVS # Neutron -> VPC # Keystone -> IAM # Glance -> IMS # Heat -> RTS # # so, we do not need to setup the endpoint override for them. # setup endpoint override for cloud services os.environ.setdefault( ´OS_CLOUD_EYE_ENDPOINT_OVERRIDE´, ´https://ces.cn-north-1.myhwclouds.com/V1.0/%(project_id)s´ ) os.environ.setdefault( ´OS_VOLUME_BACKUP_ENDPOINT_OVERRIDE´, ´https://vbs.cn-north-1.myhwclouds.com/v2/%(project_id)s´ ) os.environ.setdefault( ´OS_LOAD_BALANCER_ENDPOINT_OVERRIDE´, ´https://elb.cn-north-1.myhwclouds.com/v1.0/%(project_id)s´ ) # create connection with authenticationes username = "XXXXXXXX" password = "XXXXXXXX" projectId = "XXXXXXXX" userDomainId = "XXXXXXXX" auth_url = "https://iam.cn-north-1.myhwclouds.com/v3" conn = connection.Connection(auth_url=auth_url, user_domain_id=userDomainId, project_id=projectId, username=username, password=password) # parameteres for ECS,VPC RANDOM = random.randint(1000, 9999) # 使用随机数以确保查询结果的唯一性 SERVER_NAME = "test-pythonsdk-" + str(RANDOM) IMAGE_NAME = "test-image-" + str(RANDOM) flavor = "s2.small.1" availability_zone = "cn-north-1a" image_id = "c4b5bef2-5cd4-4d26-824c-456ba4515315" network_id = "eafa3880-32f9-4586-9545-1bf5bf9a1842" server_group_id = "70542220-2e4b-499f-b117-16949f9fa6f6" # Nova anti-affinity server group security_group_id = "90241b5b-cf8c-4940-b118-265204b5cdc9" # Neutron security group keypair = "KeyPair-e344" # parameteres for ELB mds_loadbalancer = "16dbea1701154c0ba48b70a5540bfead" mds_listener80 = "2cf38492f14140eb85b5e76ce8d5af74" mds_listener1860 = "e2d3d83e10024470baabe17c537c7444" # parameteres for Scaling resources template_server_id = "de8c4868-6088-4b47-9fdd-58f41c3b39ac" template_volume_id = "089911f0-7065-4645-b66b-75c8c65f8d91" def create_server(): # 带安全组、反亲和性组、AZ创建虚拟机,不支持min_count参数 server = conn.compute.create_server( name=SERVER_NAME, image_id=image_id, flavor_id=flavor, networks=[{"uuid": network_id}], key_name=keypair, availability_zone=availability_zone, security_groups=[{"name": security_group_id}], scheduler_hints={"group": server_group_id}) server = conn.compute.wait_for_server(server, interval=10, wait=300) return server def delete_server(server): conn.compute.delete_server(server) def start_server(server): conn.compute.start_server(server) conn.compute.wait_for_server(server, interval=5, wait=150) # 参数server应该是Server对象,而不是String id def stop_server(server): conn.compute.stop_server(server) conn.compute.wait_for_server(server, status="SHUTOFF", interval=5, wait=150) def attach_volume(server, volume_id): conn.compute.create_volume_attachment(server, volume_id=volume_id) def detach_volume(server, volume_id): conn.compute.delete_volume_attachment(volume_id, server) def wait_for_volume(volume, status="available", interval=5, wait=150, failures=[´error´]): volume = conn.block_store.get_volume(volume) if volume.status == status: return volume total_sleep = 0 if failures is None: failures = [] while total_sleep wait: volume = conn.block_store.get_volume(volume) if volume.status == status: return volume if volume.status in failures: msg = ("Volume %s transitioned to failure state %s" % (volume.id, volume.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (volume.id, status) raise exceptions.ResourceTimeout(msg) def wait_for_snaps**(snaps**, status="available", interval=5, wait=150, failures=[´error´]): snaps** = conn.block_store.get_snaps**(snaps**) if snaps**.status == status: return snaps** total_sleep = 0 if failures is None: failures = [] while total_sleep wait: snaps** = conn.block_store.get_snaps**(snaps**) if snaps**.status == status: return snaps** if snaps**.status in failures: msg = ("Snaps** %s transitioned to failure state %s" % (snaps**.id, snaps**.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (snaps**.id, status) raise exceptions.ResourceTimeout(msg) # def create_image(server, name, **metadata): # 该方法限制太多,不建议使用,建议在控制台页面导出镜像 # server = conn.compute.get_server(server) # conn.compute.create_server_image(server, name, **metadata) # # 请确保name的唯一性 # images = conn.image.images(name=name, owner_id=server.project_id) # return images.next() def list_servers(**query): print("****************************List Servers:****************************") for server in conn.compute.servers(**query): print(server.name) def list_loadbalancers(): print(´****************************List Load Balancer:****************************´) query = { # ´vip_address´: ´192.168.2.36´ # ´name´: ´elb-yc5f´ } for load_balancer in conn.load_balancer.load_balancers(**query): print(load_balancer) def add_members_to_listener(listener, members): print(´****************************Add Member To Listener:****************************´) # listener = "83c8765e77a84f7b9dbe4215564171cc" # members = [{"server_id": "5b9762f4-4883-4664-9ca6-6bd9feef75df", "address": "192.168.0.40"}] conn.load_balancer.add_members_to_listener(listener, members) def wait_for_job(job_id, status="SUCCESS", interval=3, wait=60, failures=[´FAIL´]): job = conn.load_balancer.get_job(job_id) if job.status == status: return job total_sleep = 0 if failures is None: failures = [] while total_sleep wait: job = conn.load_balancer.get_job(job_id) if job.status == status: return job if job.status in failures: msg = ("Job %s transitioned to failure state %s" % (job_id, job.status)) raise exceptions.ResourceFailure(msg) time.sleep(interval) total_sleep += interval msg = "Timeout waiting for %s to transition to %s" % (job_id, status) raise exceptions.ResourceTimeout(msg) # 创建、删除虚拟机示例,并将虚拟机加入listener后端 print("****************************Create Server:****************************") test_server = create_server() print(test_server) print("****************************Add Member to Listener:****************************") test_server_ip = test_server.addresses.values()[0][0].get(´addr´) # 获取虚拟机IP test_add_member = [{"server_id": test_server.id, "address": test_server_ip}] # 组装member消息体 add_job = conn.load_balancer.add_members_to_listener(mds_listener80, test_add_member) # 添加ECS后端到ELB上 add_job = wait_for_job(add_job.id) # 等待后端添加成功 print(add_job) listener_members = conn.load_balancer.listener_members(mds_listener80) # 查询ECS后端列表 member_id = "" for member in listener_members: # 获取member_id print(member) if member.server_id == test_server.id: member_id = member.id break print("****************************Remove Member from Listener:****************************") test_remove_member = [member_id] # 组装member消息体 remove_job = conn.load_balancer.remove_members_of_listener(mds_listener80, test_remove_member) # 移除ECS后端 remove_job = wait_for_job(remove_job.id) # 等待后端移除成功 print(remove_job) listener_members = conn.load_balancer.listener_members(mds_listener80) # 查询ECS后端列表 for member in listener_members: print(member) delete_server(test_server.id) # 删除虚拟机 # 启动、停止、查询虚拟机 conn.compute.start_server(template_server_id) # 启动虚拟机 template_server = conn.compute.find_server(template_server_id) # 查询指定server # 等待server状态为ACTIVE,注意wait_for_server中的server参数要是Server对象,而不能只是server_id template_server = conn.compute.wait_for_server(template_server, interval=5, wait=150) print(template_server) conn.compute.stop_server(template_server_id) # 停止虚拟机 template_server = conn.compute.wait_for_server(template_server, status="SHUTOFF", interval=5, wait=150) print(template_server) servers = conn.compute.servers(name="test") # 过滤查询虚拟机示例 for server in servers: print server # 卷、快照操作示例:创建空白卷,创建快照,从快照创建卷,挂卸卷,删除卷 blank_volume = conn.block_store.create_volume(size=150, availability_zone=availability_zone, name="test-blank-volume", volume_type="SAS") # 创建空卷,SATA、SAS、SSD blank_volume = wait_for_volume(blank_volume) # 等待卷状态为available print(blank_volume) attach_volume(template_server_id, blank_volume.id) # 挂载卷到虚拟机上,要求卷和虚拟机在同一AZ blank_volume = wait_for_volume(blank_volume, status="in-use") snaps** = conn.block_store.create_snaps**(name="test-snaps**-from-datavolume", volume_id=template_volume_id, is_forced=True) # 从数据盘创建快照 snaps** = wait_for_snaps**(snaps**) # 等待快照状态为available print(snaps**) 从快照创建卷,要求新卷与快照的AZ相同,volume-type相同 snaps**_volume = conn.block_store.create_volume(snaps**_id=snaps**.id, availability_zone=availability_zone, name="test-volume-from-snaps**", volume_type="SAS") snaps**_volume = wait_for_volume(snaps**_volume) # 等待卷状态为available print(snaps**_volume) attach_volume(template_server_id, snaps**_volume.id) # 挂载卷到虚拟机上 snaps**_volume = wait_for_volume(snaps**_volume, status="in-use") detach_volume(template_server_id, blank_volume.id) # 卸载卷 detach_volume(template_server_id, snaps**_volume.id) # 卸载卷 blank_volume = wait_for_volume(blank_volume) # 等待卷状态为available snaps**_volume = wait_for_volume(snaps**_volume) # 等待卷状态为available conn.block_store.delete_volume(blank_volume) # 删除卷,需要卷状态为available,且卷没有快照 conn.block_store.delete_volume(snaps**_volume) # 删除卷,需要卷状态为available,且卷没有快照 conn.block_store.delete_snaps**(snaps**) # 删除快照 # 弹性IP相关操作: 申请EIP、绑定EIP、解绑定EIP server_inte**ce = conn.compute.server_inte**ces(template_server_id).next() # 获取虚拟机第一张网卡ID print(server_inte**ce) net_external = conn.network.networks(is_router_external=True).next() # 获取公网网络 print(net_external) floating_ip = conn.network.create_ip(floating_network_id=net_external.id, port_id=server_inte**ce.port_id) # 申请EIP,带宽默认是300M/s time.sleep(10) # 等待弹性IP创建并绑定成功 floating_ip = conn.network.get_ip(floating_ip) # 查询EIP状态 print(floating_ip) conn.network.delete_ip(floating_ip) # 删除EIP
  • 老的私有镜像或老的通用性I代虚拟机转的私有镜像如何才能去通用型II代创建虚拟机
    本帖最后由 达康书记 于 2017-11-6 22:15 编辑相关背景: 由于华为云通用型II代的虚拟机相比通用型I代的虚拟机,,采用了性能和稳定性更牛逼的底层虚拟化架构,所以通用型II代的虚拟机需要额外比较特殊的驱动,所以老的I代镜像需要稍做一定的优化才能在II代中复用。要是不做任何处理通用型I代的虚拟机转的私有镜像去通用型II代下创建虚拟机可能创建不成功,可能会出现蓝屏、黑屏、无法识别磁盘...等等异常。 我们的目标: 老的私有镜像(通过虚拟机制作的私有镜像)如何才能去牛逼的通用型II代创建虚拟机?通用型I代的虚拟机转的私有镜像如何才能去牛逼的通用型II代创建虚拟机? 下边介绍一个可行通用的办法:1、将通用型I代的虚拟机里按照如下做优化,若果已经转成的私有镜像可以跳过此步骤(镜像转换服务也会后台离线自动处理,但是不能100%保证,所以租户最好尽量提前自行修改)。优化Linux私有镜像(将xen pv和virtio驱动加载上,磁盘分区名统一成uuid方式) http://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0047501133.html 优化Windows私有镜像(同时安装pvdriver和vmtool驱动) http://support.huaweicloud.com/usermanual-ims/zh-cn_topic_0047501112.html 2、将通用型I代的虚拟机关机制作成私有镜像。 4291 3、将此私有镜像导出。 4292 4、选择租户自己的OBS桶和目标格式。 4293 5、通过镜像转换服务创建一个新的私有镜像,选择租户OBS桶导出的镜像文件重新注册成新的私有镜像。 注意:一定要选择‘进行后台自动化配置’复选框。4294 6、使用此新的私有镜像即可去通用型II代才能创建虚拟机。
  • 云服务市场到底怎么样
    本帖最后由 华为云市场 于 2017-9-20 18:07 编辑[color=rgb(25,25,25)]近期,运营商世界网发表了《2016年度中国云服务及云存储市场分析报告》(以下简称《报告》),这是业内首个以运营商数据作支持的行业分析报告,通过对云服务及云存储市场全方位分析,揭示了一个更真实、更全面的市场现状。[color=rgb(25,25,25)]数据显示,2016年,中国云服务市场规模超过500亿元,达到516.6亿。预计2017年中国云计算市场份额将达到690亿以上。此外近三年来,年复合增长率超过32%,而且2016年增长率更高。[color=rgb(25,25,25)]如此巨大的市场带了云服务的具体的需求。[color=rgb(25,25,25)]报告指出,我国云服务市场规模正不断扩大。在对云服务的具体需求种类中,市场需求量最大的当属云主机,其次是云存储。此外,云广告的需求增长也十分迅猛,而对虚拟桌面、网络加速、数据库等需求趋缓。1915[color=rgb(25,25,25)]数据显示,市场对云主机的当前需求量为80.2%,未来需求量为75.8%。云主机是源自云计算平台的产品,是在一组集群主机上虚拟出多个类似独立主机的的部分,集群中每个主机上都有云主机的一个镜像。在数据安全、运行稳定性等方面,云主机都比传统VPS和服务器更有优势,在费用上更是远低于独立服务器。[color=rgb(25,25,25)]云存储是市场对云服务的另一大主要需求,当前需求量为77.8%,未来需求量为81.3%。使用者可以不受时间地点限制地在云存储上存取资源,因此云存储已经成为继U盘、智能终端、邮箱后的又一大存储选择。[color=rgb(25,25,25)]用户的另一大云服务需求是云广告。尽管在现在,用户对云广告的需求量还仅为39.5%,但预计在未来,用户需求量将上升至42.8%,超过对数据库的需求。[color=rgb(25,25,25)]此外,用户对数据库、网络加速的需求量正在缓慢下滑,对虚拟桌面的需求增长也在放缓。其中,对数据库的需求量将从当前的42.7%下降到39.4%,对网络加速的需求量将从当前的23.5%下降到21.9%,对虚拟桌面的需求量将从当前的26.1%微增至28.3%[color=rgb(25,25,25)]2016年云服务领域,互联网企业使用率最高,其中,游戏、电商、金融、视频、手机企业使用量排名前五。[color=rgb(25,25,25)]2017年各类云应用使用情况的预测,从数值来看,游戏云使用的量最大,其次是电商云等。从趋势来看,金融云、视频云、工业云、政务云都有很大的市场潜力。[color=rgb(25,25,25)]颇具看点的是, 2016年度中国云企业TOP5,其中龙头老大仍为阿里云,增长较快的则是中国电信的天翼云和中国联通的沃云。[color=rgb(25,25,25)]另外,还列举了2016年中国云存储企业TOP5,分别是阿里云,天翼云,联通沃云,世纪互联和西部数码。在运营商颇具优势的CDN服务中,联通沃云已经凭借优势占据了第二名,天翼云紧随其后。[color=rgb(25,25,25)]业内人士指出,安全和快速是云存储的关键。中国电信和中国联通作为运营商,在高带宽资源、保密方面具备优势。[color=rgb(25,25,25)]《报告》分析了两大运营商云服务的能力。分析指出,云服务能力快速崛起,云计算基地建设迅猛,云存储潜力巨大。[color=rgb(25,25,25)]《报告》最后还对2017年度云服务市场进行了预估:[color=rgb(25,25,25)]一、市场将持续快速增长,并且年增长率在30%以上;[color=rgb(25,25,25)]二、创新企业增加,风险投资依然对创新云服务感兴趣;[color=rgb(25,25,25)]三、服务能力加强,阿里云、天翼云、沃云等继续扩充云服务建设;[color=rgb(25,25,25)]四、市场集中加剧,阿里云、天翼云、沃云等份额提高;[color=rgb(25,25,25)]五、安全需求升级,云安全市场将急剧扩大。[color=rgb(25,25,25)] [color=rgb(25,25,25)]
  • [交流分享] 什么是虚拟机镜像
    一个虚拟机镜像是一个文件,文件内包含了已经安装好可启动操作系统的虚拟磁盘。虚拟机镜像有不同的格式,常见的镜像格式如下:1 Raw "raw" 镜像格式是最最简单的,并且是被 KVM 和 Xen 原生支持的格式,你 可以想象裸格式镜像和块设备文件是二进制位相当的,就好像从块设备拷 贝过来的,比方说,使用dd 命令将 /dev/sda 内容拷贝到一个文件。2 qcow2 qcow2 (QEMU 写时复制版本2)格式通常是KVM使用,相比裸格式,它有额 外的特性,例如: •使用稀疏文件呈现方式,因此镜像尺寸更小。 •支持快照。 因为qcow2 镜像是稀疏的,因此,qcow2镜像通常比裸格式镜像小,更小的 文件意味着上传更快,因此通常转换裸格式镜像到qcow2格式上传比直接 上传裸格式镜像文件更快。3 UEC tarball UEC(Ubuntu 企业云) 文件是一个包含了 AMI AKI ARI文件的tar包压缩文件。4 VMDK VMDK (Virtual Machine Disk) 是 VMware ESXi 虚拟化使用的镜像格式。5 VDI VDI (Virtual Disk Image)是 VirtualBox 使用的镜像格式。OpenStack 计算节 点并不直接支持VDI格式,因此你在OpenStack中使用VDI镜像需要提前转换 成其他受支持的格式。6 VHD 微软 Hyper-V 使用 VHD 镜像格式。7 VHDX Microsoft Server 2012 中的 Hyper-V 版本使用的新的 VHDX 格式,它比VHD 有额外的新的特性例如支持更大的磁盘以及意外掉电时数据丢失保护。8 OVF OVF (Open Virtualization Format)是一种虚拟机打包格式,由 DMTF (分布 式任务管理)标准组定义,单个 OVF 包包含一个或多个镜像文件, .ovf 后 缀的 XML元数据文件包含了关于虚拟机信息及其他文件的信息。 OVF 包可通过几种方式分发,例如,可以通过一系列分散的文件分发或者 通过一个tar归档文件(.ova后缀)分发。 OpenStack 计算节点目前并不支持 OVF 包,如果你想要在Openstack中使用,你需要从OVF中释放磁盘镜像文件。9 ISO ISO 格式是磁盘镜像被格式化成只读 ISO 9660(ECMA-119) 文件系统的格 式,通常用于 CD 和 DVD。通常 ISO 不被考虑是虚拟机镜像格式,由于他 包含一个可启动的文件系统,你可以将它看做是和其他虚拟机镜像文件一 样。 相应的虚拟机镜像磁盘格式虚拟机的磁盘格式指的是底层的磁盘镜像格式,虚拟设备厂商有不同的格式来放置虚拟机磁 盘镜像包含的信息。常见的镜像磁盘格式如下:•raw: 无结构的磁盘镜像格式;如果你有一个无扩展名的磁盘文件,那么这个磁盘文件可 能是裸格式。•vhd: VHD磁盘格式,一种被VMware, Xen, Microsoft, VirtualBox, 以及其他虚拟机管理程序 通用的磁盘格式。•vmdk:能被多钟虚拟机管理程序支持的通用格式。•vdi:能被 VirtualBox 虚机管理程序和 QEMU 模拟器支持的格式。•qcow2: 由 QEMU 模拟器支持,能动态扩展以及支持写时复制特性。•iso:光盘数据内容的归档格式,例如CD-ROM。
  • 【虚拟化学习】虚拟化系列介绍(五)
    [color=rgb(85,85,85)]本文主要介绍桌面虚拟化,因为内容较多,一般也分为两部分介绍。 [color=rgb(85,85,85)] [color=rgb(85,85,85)]一、为什么要有桌面虚拟化[color=rgb(85,85,85)] 信息技术的主要价值是实用、为人服务(好像是废话了);不然的话很难有生存和发展的可能。下面我们先看如下这么一些应用场景和IT管理需求(空间在线绘制表格很难,截图上传),详见图一所示。[color=rgb(85,85,85)][color=rgb(85,85,85)](图一、使用需求和IT管理需求)[color=rgb(85,85,85)] 可见要较好的解决上述使用需求和管理需求,如果我们把“桌面”给抽象出来,问题就可能得到很好的解决,这就需要办公桌面给虚拟化! [color=rgb(85,85,85)]二、桌面虚拟化的收益[color=rgb(85,85,85)] 针对上述工作场景和需求,我们可以看到实施桌面虚拟化后能带来的一些好处:[color=rgb(85,85,85)] 1、信息安全大大提升[color=rgb(85,85,85)] 2、加强管理,提升效率[color=rgb(85,85,85)] 3、绿色、低碳和节能[color=rgb(85,85,85)] 4、一定程度降低总体用拥有成本[color=rgb(85,85,85)] …………[color=rgb(85,85,85)] 这样说来还是不够形象化,下面我们用图二来表示。[color=rgb(85,85,85)][color=rgb(85,85,85)](图二、桌面虚拟化的收益) [color=rgb(85,85,85)] [color=rgb(85,85,85)]三、常见的桌面虚拟化方式[color=rgb(85,85,85)] 经实际应用和参考微软,VMWare和Citrix的资料,目前桌面虚拟化的两种主要方式是VDI(Virtual Desktop Infrastructure,虚拟桌面基础架构)和RDS(Remote Desktop Services,远程桌面服务),这点可以参考我博客的另一文章,也就是说[color=rgb(1,95,145)]微软支持VDI和RDS方式的桌面虚拟化,而VMWare目前的View产品只有VDI方式的。[color=rgb(85,85,85)] 虚拟桌面基础架构(VDI)只是另外一种Windows部署模型,即他把原先运行在终端PC上的操作系统,桌面环境和应用转移到服务器上运行;作为一种部署模型,VDI使得用户可以访问他们在数据中心的个人桌面。[color=rgb(85,85,85)] 而微软的RDS基本上不消多说了,它历史很悠久。在1998年,微软在Windows NT Server 4.0,Terminal Server 版本中发布终端服务的第一个版本。 [color=rgb(85,85,85)] [color=rgb(85,85,85)]四、VDI与RDS之间的区别?[color=rgb(85,85,85)]  VDI是一个单独的虚拟机,它对用户进行了隔离,它更加适合对合规性以及安全性要求很高的环境,也就是更适合对防止信息泄特别严格的环境。这同样意味着会有大量的Windows副本以保持环境的清洁与安全,也必须处理大量虚拟机的启动及更新,这可能会耗尽VDI存储的性能。[color=rgb(85,85,85)]  当然,VDI环境不需要管理员锁定,可以开放用户个人虚拟机完全的管理权以及本地应用安装权。这种情况下会将用户关联到特定的虚拟机,而且也就意味着不能使用单一主镜像更新对虚拟机进行升级。 [color=rgb(85,85,85)]  而RDS则允许所有用户共享运行一个服务器操作系统的虚拟机。这使得微软的RDS更加适合任务相同的用户以及协作用户。在RDS中拥有更少的Windows实例,所以执行升级以及重启操作时存储的负载也就更小。同时CPU和内存的开销也更小。因此在相同硬件环境上通常可以支持更多的用户。[color=rgb(85,85,85)]  RDS环境通常是被管理员锁定的,因为资源是共享的而且需要为所有的用户提供相同级别的服务。微软RDS同样通过集群或者服务器集合提供了高可用性。我们只要对随时连接的用户提供足够的可用性即可。由于不需要专门的、一直可用的虚拟机,因此也不用购买昂贵的共享存储,而是可以将RDS虚拟机存放在主机的本地硬盘上。[color=rgb(85,85,85)]  从对比中我们可以发现,这两种技术面向两类完全不同的用户。因此,很多公司同时部署了这两种技术。不同的用户组都因VDI和微软的RDS而受益,它们的确是彼此互补的解决方案。 [color=rgb(85,85,85)] [color=rgb(85,85,85)]五、不适合虚拟化的情况[color=rgb(85,85,85)] 前面也说过,桌面虚拟化只是一种用户使用需求和IT管理需求之间较好的解决方式,他不是完美的(这个世界也不存在完美的)、放之四海而皆准的灵丹妙药。如下一些环境就是不太适合或者说不能使用的场景。[color=rgb(85,85,85)] 1、数据中心升级成本无法接受;[color=rgb(85,85,85)] 2、用户体验不好;[color=rgb(85,85,85)] 3、应用程序性能影响。[color=rgb(85,85,85)] 这样说来还不够形象,具体内容见如下图三所示。[color=rgb(85,85,85)][color=rgb(85,85,85)](图三、不适合桌面虚拟化的情况) [color=rgb(85,85,85)] [color=rgb(85,85,85)] 好了,今晚估计就到这了,下一篇文章讲一讲具体的技术架构和细节知识。原创作品,允许转载,转载请联系后台管理员
  • 【虚拟化学习】虚拟化系列介绍(四)
    [color=rgb(85,85,85)]接上篇,前面都谈及太多行情和空洞的标准,下面基本上完全参考微软资料,给出个人已经学习,工作已经使用了微软的网络虚拟化技术介绍。 [color=rgb(85,85,85)] [color=rgb(85,85,85)]四、微软的软件定义网络[color=rgb(85,85,85)] 在过去传统的IT中,网络由其物理拓扑结构,即服务器、交换机和路由器的连接方式定义。也就是说,一旦您完成网络建设建,之后进行任何变更都将过程复杂,麻烦臃肿。显然这类网络与无人值守数据中心或需要灵活支持不同工作负荷需求的云环境的理念背道而驰的。[color=rgb(85,85,85)] 微软软件定义网络的起源 众所周知,微软有有多年为 Bing、**mail 和 Windows Azure 等产品和服务运营大量数据中心的经验。这一经验让微软了解了数据中心网络设计中的几项重要原则: 1、自动化至关重要:微软发现绝大多数网络中断都是由于人为错误而导致的。因此,应以自动化的方式来配置并管理网络。 2、多租户环境要求确保网络的灵活性:在诸如 Windows Azure 等环境中,客户希望能够轻松处理其工作负荷。他们不希望为了迁移到云而变更 IP 地址或其他网络设置。即使多个租户在共享一个网络,云环境也需要能够为每个租户提供专有网络的体验。 3、集中控制可有效降低复杂度和提高可靠性:根据微软的经验,虚拟机的安置需由了解工作负荷需求、硬件容量和虚拟网络的中央管理实体推动。由于此中央管理实体负责终端主机策略的分发,因此,它也是负责协调支持虚拟机放置所需网络变更的最佳人选。这种控制方式可降低网络中策略不一致的可能性,减少SDN 策略广播的延迟,并简化配置和管理工作。 微软的软件定义网络的功能:[color=rgb(85,85,85)] 微软认为需要软件定义的网络 (SDN),网络环境可经由软件动态配置,适应不断变化的需求。能实现以下功能:[color=rgb(85,85,85)] 1、创建在物理网络之上运行的虚拟网络。 2、在数据中心控制内部流量。例如有些类型的流量可能需要被转发到一些特定的设备(或虚拟机)进行安全分析或监测,创建相应的策略来保证其所需的带宽或流量不超过一定上限。 3、创建可涵盖物理网络和虚拟网络的集成式策略。例如部署通用的安全配置文件,或者在物理交换机和虚拟交换机之间共享监测和计量基础结构。 [color=rgb(85,85,85)] [color=rgb(85,85,85)]五、微软的软件定义网络组成部分[color=rgb(85,85,85)] 微软的 SDN 方案由几个不同的功能组成。 1、Hyper-V 具有在共享物理网络上创建多租户虚拟网络的功能,因而可提供相当的网络灵活性。每个租户可获得一个完整的虚拟网络,其中包括多个虚拟子网和虚拟路由。[color=rgb(85,85,85)] 2、VMM 在Hyper-V 网络虚拟化自动化配置 SDN 策略的过程中的枢纽。在 VMM 中,您可以按需定义并即时创建租户虚拟网络。VMM 将负责分配虚拟机的工作负荷,并将必要的 SDN 策略应用至主机,以创建这些虚拟网络。通过一同应用虚拟机放置决策和 SDN 策略更新,VMM 可提供较高程度的自动化和集中控制,充分满足我们对数据中心体验的要求。 VMM可让客户将数据中心内每个 Hyper-V 主机上的各个虚拟交换机统一成一个分布式的逻辑交换机,由 SDN 流量控制策略动态编程控制。例如,您可为一组虚拟机定义一个配置文件来包括所需的安全和带宽控制策略,VMM会在虚拟机启动时自动为其所在虚拟网络的虚拟交换机应用相应的配置文件。当虚拟机在虚拟网络间迁移时,相应的配置文件将随之自动迁移。本质上来说,管理员仅需为数据中心定义单一的逻辑交换机,使用 VMM 来自动完成对所有主机/虚拟机策略的部署,以确保 SDN 策略的一致性,并实现上文中描述的集中式控制。[color=rgb(85,85,85)] 3、可扩展式交换机。在 Windows Server 2012中的Hyper-V 可扩展交换机可为微软的合作伙伴提供一个扩展 SDN 策略的平台。这一扩展性最常见的使用案例在于将虚拟交换机与其余物理网络基础结构的集成。例如 NEC 将 Hyper-V 交换机与 OpenFlow 控制器集成。NEC OpenFlow 控制器精准定义了从源虚拟机到目标虚拟机的流量路由方式应经由网络完成;NEC 解决方案与 Hyper-V 网络虚拟化充分兼容,Hyper-V 网络虚拟化定义了虚拟网络内的源虚拟机和目标虚拟机。NEC 解决方案可让用户轻松配置虚拟设备,例如负荷均衡器、侵入检测系统和网络监测解决方案。如下图一所示。[color=rgb(85,85,85)][color=rgb(85,85,85)](图一:Hyper-V的网络可扩展) [color=rgb(85,85,85)] [color=rgb(85,85,85)]六、微软的具体实现细节[color=rgb(85,85,85)] 在 Hyper-V 网络虚拟化中的每个虚拟网络适配器都与两个 IP 地址相关: 客户地址 (CA) 由客户基于其内部网络基础结构所指定的 IP 地址。通过这一地址,客户可与虚拟机交流网络流量,如同未移到一个公有或私有云中一般。CA 对虚拟机是可见的,并且可由客户访问。 供应商地址 (PA) 由主机或数据中心管理员基于其物理网络基础结构所指定的 IP 地址。PA 出现在网络上的数据包中,这些数据包可与托管虚拟机的 Hyper-V 服务器进行交换。PA 在物理网络上是可见的,但在虚拟机上不可见。 CA 维护着客户的网络拓扑,该网络拓扑经过虚拟化,可采用 PA 的实施方式,从实际的基础物理网络拓扑中脱离出来。下图二展示了因网络虚拟化而在虚拟机 CA 与网络基础设施 PA 之间所建立的概念关系。[color=rgb(85,85,85)][color=rgb(85,85,85)](图二、通过物理基础结构实现网络虚拟化 ) [color=rgb(85,85,85)] 在该图中,客户虚拟机在 CA 空间中发送数据包,并通过自身的虚拟网络或“隧道”遍布物理网络基础结构。在以上示例中,通道被想象成带有绿色发货标签(PA 地址)的蓝色和红色数据包的“封套”,从左边的源主机发送到右边的目标主机。关键在于主机如何确定与蓝色和红色 CA 相对应的“发货地址”(PA 地址)、“封套”如何套在数据包上、目标主机如何打开数据包并将数据包正确发送到蓝色和红色目标虚拟机上。 这一简单的类比突显出网络虚拟化的重要方面: 1、将每台虚拟机的 CA 映射到物理主机的 PA。 2、根据映射,将虚拟机在 CA 空间中发送的数据包放置在一个含有 PA 源和目标对的“封套”中。 3、CA-PA 映射必须允许主机为不同的客户虚拟机区分数据包。 因此,网络虚拟化机制旨在将虚拟机使用的网络地址虚拟化。下一部分将描述地址虚拟化的实际机制。 [color=rgb(85,85,85)] 通过地址虚拟化实现网络虚拟化。Hyper-V 网络虚拟化支持以下两种机制来实现 IP 地址虚拟化: 1、Generic Routing Encapsulation[color=rgb(85,85,85)] 第一种网络虚拟化机制将 Generic Routing Encapsulation (NVGRE) 用作通道报头的一部分。这种地址虚拟化机制的模式是专为大多数部署 Hyper-V 网络虚拟化的数据中心而设计的。在 NVGRE 中,虚拟机的数据包被封装在另一个数据包中。如图 3 所示,新的数据包报头含有合适的源和目标 PA IP 地址,另外还有存储在 GRE 报头密钥字段中的虚拟子网 ID。[color=rgb(85,85,85)][color=rgb(85,85,85)](图 3:网络虚拟化 – IP 地址重写) [color=rgb(85,85,85)] 包含在 GRE 报头中的虚拟子网 ID 可让主机为任何指定的数据包确定客户虚拟机,尽管数据包上的 PA 和 CA 出现重叠。这可让同一台主机上的所有虚拟机分享一个 PA(如图 3 所示)。[color=rgb(85,85,85)] 共享 PA 对网络可扩展性产生很大的影响。网络基础设施必须知悉的 IP 和 MAC 地址数量得以大幅减少。例如,如果每台终端主机平均有 30 台虚拟机,网络基础设施需要知悉的 IP 和 MAC 地址数量将减少到三十分之一,数据包中嵌入式虚拟子网 ID 还能轻易地将数据包与实际客户联系起来。[color=rgb(85,85,85)] 使用 Windows Server 2012,Hyper-V 网络虚拟化完全支持即开即用的 NVGRE;不需要升级或购买新的网络硬件,如 NIC(网络适配器)、交换机或路由器。因为在线 NVGRE 包是 PA 空间中的常规 IP 包,可与当前的网络基础结构相兼容。[color=rgb(85,85,85)] 2、IP 重写[color=rgb(85,85,85)] 第二种由 Hyper-V 网络虚拟化支持的虚拟化机制是 IP 地址重写。在此模式下,当数据包离开终端主机时,将用对应的 PA 地址,对源和目标 CA IP 地址进行重写。同样,当虚拟子网数据包进入终端主机时,先使用适当的 CA 地址对 PA IP地址进行重写,再将 CA 地址传送到虚拟主机。图 4 展示了使用 IP 地址重写的虚拟机数据包。除数据包格式外,IP 重写与 NVGRE 之间的主要区别在于 IP 重写模式需要每台虚拟机拥有独特的 PA,以便将虚拟机与使用重叠 IP 地址的不同客户区分开来。因此,IP 重写需要每台虚拟机 CA IP 地址有一个 PA,而 NVGRE 仅要求每台主机有一个 PA。 [color=rgb(85,85,85)][color=rgb(85,85,85)](图 4:网络虚拟化 – NVGRE 封装)[color=rgb(85,85,85)] IP 重写主要用于特定的情况,即虚拟机在当前现有的硬件上的工作负荷会需要或消耗极高的宽带吞吐量(约为 10Gbps)。现有网络硬件减荷技术,比如大量传送减荷 (LSO) 以及虚拟机列队 (VMQ) 能如期在现有网络适配器上运作。这些减荷方法能为网络负荷高的情况提供极大的好处,尤其是在 10GbE 的环境下。同时,交换机上的多路径路由(如等价多路径 ECMP)可继续如期运作。[color=rgb(85,85,85)] NVGRE 还是 IP 重写?[color=rgb(85,85,85)] 对于大多数 Hyper-V 网络虚拟化部署,推荐使用 NVGRE 虚拟化机制。NVGRE 与当前的数据中心网络硬盘设施兼容,并且随着人们意识到 NVGRE 可用于商业中,它将带来更多的益处。IP 重写主要用于特定的情况,即当前虚拟机需要 10Gbps 宽带,无法等到 NVGRE 感知硬件的出现。[color=rgb(85,85,85)]原创作品,允许转载,转载请联系后台管理员
  • 【虚拟化学习】虚拟化系列介绍(三)
    [color=rgb(85,85,85)]本文主要介绍网络虚拟化。[color=rgb(85,85,85)] [color=rgb(85,85,85)]一、为什么要有网络虚拟化[color=rgb(85,85,85)] 云计算已经扑面而来了,而云计算的一个重要基础就是把网路,存储,计算资源等虚拟化,池化后等,才能达到按需使用,自动智能,动态调节,高可用性,可管理性等等目的。所以,如果传统的接口线路,交换路由,访问控制等不进行整合,即使应用、桌面和服务器等都虚拟化了,但还受制于下面的网络而无法满足云计算,功亏一篑,实为憾事,所以网络也不得不虚拟化。[color=rgb(85,85,85)] 服务器虚拟化能让多个服务器实例在同一台物理主机上同时运行,并且各个服务器实例都是相互独立的;每台虚拟机都“以为”自己是在一台物理计算机上运作。网络虚拟化也有类似的功能,即多个虚拟网络在同一个物理网络上运行(可能有重叠的 IP 地址),但每个虚拟网络也“以为”只有自己在一个物理网络基础结构上运作。[color=rgb(85,85,85)] [color=rgb(85,85,85)]二、网络虚拟化与软件定义网络[color=rgb(85,85,85)] 个人理解“网络虚拟化”与“软件定义网络”(SDN,Software Defined Network)当然不是同一个概念,应该说前者包含后者,后者只是前者的一种实现方法,后者就是用软件来管理和制定虚拟网络。[color=rgb(85,85,85)] 当然,网络虚拟化这东西本身并不是突然冒出来的新鲜玩意,可以说他早已有之,VLAN,VPN等都可以说是网络虚拟化的一种表现或应用。[color=rgb(85,85,85)] [color=rgb(85,85,85)]三、软件定义网络的介绍[color=rgb(85,85,85)] 而SDN是软件定义网络的简称,其核心理念是使网络软件化并充分开放,从而使得网络能够像软件一样便捷、灵活,以此提高网络的创新能力。一般来讲,SDN前身是斯坦福的用于企业集中安全控制的一个叫Ethane 项目发展而来。2008年斯坦福大学其命名为OpenFlow,后经由斯坦福项目推广,当前SDN 已逐渐成为了学术界、工业界以及标准化组织广泛关注并讨论的热点。下图一是SDN的架构。[color=rgb(85,85,85)][color=rgb(85,85,85)] 由上面的SDN 架构的逻辑视图可以看出SDN 的基本网络要素:[color=rgb(85,85,85)] 逻辑上集中的SDN 控制器,它是基于软件的控制器,负责维护全局网络视图,并且向上层应用提供用于实现网络服务的可编程接口;[color=rgb(85,85,85)] 控制应用程序,该程序运行在控制器之上,通过控制器提供的全局网络视图,控制应用程序可以把整个网络定义成为一个逻辑的交换机,同时,利用控制器提供的应用编程接口,网络人员能够灵活地编写多种网络应用,如路由、多播、安全、接入控制、带宽管理、流量工程、服务质量等;[color=rgb(85,85,85)] 转发抽象,转发抽象是SDN 控制器通过利用SDN提供的转发平面的网络抽象来构建全局网络视图。[color=rgb(85,85,85)] 由此可知SDN 的基本特征:[color=rgb(85,85,85)] 1、控制与转发分离。转发平面由受控转发的设备组成,转发方式以及业务逻辑由运行在分离出去的控制面上的控制应用所控制。[color=rgb(85,85,85)] 2、控制平面与转发平面之间的开放接口。SDN 为控制平面提供开放的网络操作接口,也称为可编程接口。通过这种方式,控制应用只需要关注自身逻辑,而不需要关注底层更多的实现细节。[color=rgb(85,85,85)] 3、逻辑上的集中控制。逻辑上集中的控制平面可以控制多个转发面设备,也就是控制整个物理网络,因而可以获得全局的网络状态视图,并根据该全局网络状态视图实现对网络的优化控制。[color=rgb(85,85,85)] [color=rgb(85,85,85)]四、巨头博弈和标准[color=rgb(85,85,85)] 网络虚拟化是IT巨头间一场微妙的博弈,涉及标准、利益和生态圈。[color=rgb(85,85,85)] 2011年9月份,一个以微软公司为首、Arista、英特尔、戴尔、惠普、Broadcom和Emulex的企业团队宣布了一个针对[color=rgb(1,95,145)]NVGRE(使用通用路由封装的网络虚拟化)的IETF(互联网工程任务组)RFC(请求评议)草案。这是一个网络虚拟化标准框架草案,通过这个框架,用户可以使用第三层通用路由封装(GRE),实现公有云和私有云中的多租户功能和虚拟机移动性。[color=rgb(85,85,85)] 另一方面,由思科、VMware、Citrix、红帽、Arista和Broadcom提出的VXLAN标准,实际上都使用封装策略来创建大量的VLAN子网。[color=rgb(85,85,85)] NVGRE和VXLAN二者都旨在实现在云和专有网络**享负载均衡的多租赁网络。[color=rgb(85,85,85)] Google和Facebook于是作为支持OpenFlow的领头羊,积极参与Open Networking Foundation(ONF)的标准化制定和推广活动。[color=rgb(85,85,85)] 传统网络提供商也不得不与时俱进,否则很可能被大客户们绕开自行开发。网络虚拟化新兴公司Nicira把握住了时代机遇,与Openstack(一开源云计算平台)深度整合,为包括eBay在内的很多巨头提供解决方案。已经在服务器虚拟化市场尝到甜头的VMware在2012年6月以12.6亿美金并购当时营业额仅1千万美金的Nicira。[color=rgb(85,85,85)] [color=rgb(85,85,85)] 好了,今天就到这,下一篇介绍一些个工作中已经在用的微软的网络虚拟化技术。原创作品,允许转载,转载请联系后台管理员。