首页 文章 精选 留言 我的

精选列表

搜索[nova],共756篇文章
优秀的个人博客,低调大师

openstack之nova启动实例过程

概述: 启动一个实例包含以下步骤: API server:处理用户请求并转发至cloud controller cloud controller:处理计算节点、网络控制、api server 以及scheduler的通信 scheduler:选择节点启动实例 Compute worker:管理实例,启动/关闭实例,挂载/卸载卷 Network controller:管理网络资源,分配浮动ip、配置vlan 启动实例的流程类似于这样: API服务从用户收到一个run_instances的命令,API服务转发这个命令给云控制器(1),在这里执行认证以确保该用户有相应的权限.去控制器把这条信息发给调度(2). 调度将这条信息扔给一个随机的主机(计算节点)让他启动一个新的实例(3).这台主机上的计算服务抓到这条信息(4).计算服务需要一个fixed IP来启动一个新实例,所以她发了一条信息给网络控制器(5,6,7,8).计算服务继续创建这个实例.下面我们将深入这些步骤的细节中去

优秀的个人博客,低调大师

[To be translated] Nova:libvirt image 的生命周期

翻译自:http://www.pixelbeat.org/docs/openstack_libvirt_images/ The main stages of a Virtual Machine disk image as it transfers through OpenStack to be booted under libvirt are: Initially the image is downloaded from glance and cached in libvirt base. We'll consider the options for handling a qcow2 image stored in glance, as that format can be downloaded quite efficiently from glance as it supports compression, and image sparseness can be maintained. This article will focus on the flow and transformations in "libvirt base", which is used to cache, preprocess and optionally back, VM disk images. Configuration First we'll summarize the config variables involved, before presenting the operations associated with each config combination, in each OpenStack release. Note I'm describing upstream OpenStack here, and not my employer'sRed Hat OpenStackwhich has back-ported enhancements between versions where appropriate. Config Default Release Description use_cow_images True Cactus Whether to useCoWimages for "libvirt instance disks" force_raw_images True Essex Allows disablingconvert to rawin "libvirt base" foroperational reasons libvirt_images_type 'default' Folsom Deprecates use_cow_images and allows selecting LVM libvirt images [libvirt]/images_type 'default' Icehouse Deprecates libvirt_images_type in the [DEFAULT] section preallocate_images 'none' Grizzly Instance disks preallocation mode. 'space' =>fallocateimages resize_fs_using_block_device False Havana Allows enabling of direct resize for qcow2 images The main reason that raw images are written in "libvirt base" by default (since Diablo), is to remove possible compression from the qcow2 image received from glance. Note compression in qcow2 images is read only, and so this will impact reads from unwritten portions of the qcow2 image. Users may want to change this option, depending on CPU resources and I/O bandwidth available. For example, systems with slower I/O or less space available, may want to trade the higher CPU requirements of compression, to minimize input bandwidth. Note raw images are used unconditionally with libvirt_images_type=lvm. Whether to use CoW images for the "libvirt instance disks" also depends on I/O characteristics of the user's system. Without CoW, more space will be used for common parts of the disk image, but on the flip side depending on the backing store and host caching, there may be better concurrency achieved by having each VM operate on its own copy. Enabling preallocation of space for the "libvirt instance disks" can help with both space guarantees and I/O performance. Even when not using CoW instance disks, the copy each VM gets is sparse and so the VM may fail unexpectedly at run time with ENOSPC. By running fallocate(1) on the instance disk images, we immediately and efficiently allocate the space for them in the file system (if supported). Also run time performance should be improved as the file system doesn't have to dynamically allocate blocks at run time, reducing CPU overhead and more importantly file fragmentation. Disk image operations For each release and config combination, here are the created files and associated operations in getting aqcow2image from glance through to being booted in a libvirt Virtual Machine. Folsom, force_raw_images=True, use_cow_images=True This results in each instance booting from a CoW image, backed by a resized raw image. Novacommand Source code Notes wget http://glance/$image -Obase_/$hex.part images.fetch qemu-img convert -O raw $hex.part $hex.converted images.fetch_to_raw Creates sparse file mv $hex.converted $hex;rm $hex.part images.fetch_to_raw imagebackend.create_image cp $hex $hex_$size libvirt.utils.copy_image Creates sparse file qemu-img resize $hex_$size $size disk.extend resize2fs $hex_size disk.extend Unpartitioned ext[234] qemu-img create -f qcow2 -o backing_file=...$instance_dir/disk libvirt.utils.create_image Folsom, force_raw_images=True, use_cow_images=False This results in each instance booting from a copy of a resized raw image. Novacommand Source code Notes wget http://glance/$image -Obase_/$hex.part images.fetch qemu-img convert -O raw $hex.part $hex.converted images.fetch_to_raw Creates sparse file mv $hex.converted $hex;rm $hex.part images.fetch_to_raw imagebackend.create_image cp $hex$instance_dir/disk libvirt.utils.copy_image qemu-img resize disk disk.extend resize2fs disk disk.extend Unpartitioned ext[234] Folsom, force_raw_images=False, use_cow_images=False This results in each instance booting from a copy of a resized qcow2 image. Novacommand Source code Notes wget http://glance/$image -Obase_/$hex.part images.fetch mv $hex.part $hex images.fetch_to_raw imagebackend.create_image cp $hex$instance_dir/disk libvirt.utils.copy_image qemu-img resize disk disk.extend resize2fs disk disk.extend Ignored for qcow2¹ Folsom, force_raw_images=False, use_cow_images=True This results in each instance booting from a CoW image, backed by a resized qcow2 image. Novacommand Source code Notes wget http://glance/$image -Obase_/$hex.part images.fetch mv $hex.part $hex images.fetch_to_raw imagebackend.create_image cp $hex $hex_$size libvirt.utils.copy_image qemu-img resize $hex_$size $size disk.extend resize2fs $hex_size disk.extend Ignored for qcow2¹ qemu-img create -f qcow2 -o backing_file=...$instance_dir/disk libvirt.utils.create_image Grizzly, force_raw_images=True, use_cow_images=True Grizzlyintroducesa change for use_cow_images=True, where it will resize in the $instance_dir rather than in base_. So the resize will not be cached, but this is minimal CPU tradeoff per instance boot, for the extra space saved in base_. We'll just present the default config values here which illustrates the only significant change from Folsom. This results in each instance booting from a resized CoW image, backed by a raw image. Novacommand Source code Notes wget http://glance/$image -Obase_/$hex.part images.fetch qemu-img convert -O raw $hex.part $hex.converted images.fetch_to_raw Creates sparse file mv $hex.converted $hex;rm $hex.part images.fetch_to_raw imagebackend.create_image qemu-img create -f qcow2 -o backing_file=...$instance_dir/disk libvirt.utils.create_image qemu-img resize disk $size disk.extend resize2fs disk disk.extend Grizzly always ignores² [²UpdateSep 2013: Stanislaw Pitucha also noticed that the above referenced Grizzly change introduced a regression where unpartitioned qcow2 images were no longer resized. See the Havanaresize_fs_using_block_deviceoption below for details.] Grizzly, preallocate_images='space' Grizzly also hasnew fallocate functionalityin this area controlled by thepreallocate_imagesconfig option. If that is set to 'space', then after the operations above, the $instance_dir/ images will befallocated to immediately determine if enough space is available, and to possibly improve VM I/O performance due to ongoing allocation avoidance, and better locality of block allocations. ¹ Havana, resize_fs_using_block_device=False As noted in the first Grizzly change above, Stanislaw Pitucha noticed that change introduced a regression where unpartitioned qcow2 images were no longer resized. He supplied afix to resize qcow directlyrather than relying on the raw image being available, which would also cater for the force_raw_images=False case that even pre Grizzly did not. This new option can be used to enable this support, but there are somelarge performance and possible security issuesso it's not enabled by default. This support will be available in the upcomingHavanarelease. General performance considerations Performance has improved in this area through each OpenStack release, with some of the main topics to consider, for past and future changes being: Minimize I/O Note these wereimplemented in Essex: Copy images, then resize, rather than vice versa Directly generating images in the $instance_dir/ Intelligent reading of sparse input Reproduction of sparse input on output Use compression Note this was implemented in Folsom: Avoid file sytem overhead by setting libvirt_images_type=lvm. Note file system overheadvaries depending on file system Minimize storage Use compression Use sparse output/generation Avoid resized copies when not needed Use CoW if appropriate Improve caching Avoid thrashing the page cache with large intermediate images Improve low level caching through better storage allocation Preprocessing Preprocessing may be possible on images likepreallocation=metadatawhich trades off initial CPU cost for possibly much better run time I/O performance Such cost would be some what alleviated by havingasynchronous populationof the base_ cache 本文转自SammyLiu博客园博客,原文链接:http://www.cnblogs.com/sammyliu/p/4427567.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

多线程之Openstack novnc 改造,缓解Nova压力

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 #!/usr/bin/envpython #-*-coding:UTF-8-*- """ @Item:Socketlearing @Author:William @Group:DEVGroup @Date:2013-10-16 @Funtion: """ import sys,os,time,redis,traceback,json,threading,socket from cloud.hsnovnc import utils from cloud import log LOG = log.get_logger(__name__) class MySocket( object ): def __init__( self ,proto = 0 ): if proto = = 0 : self .sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) self .sock.setblocking( True ) else : self .sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) self .sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR, 1 ) #Thesocketbindinghostandport def my_bind( self ,host,port): try : self .sock.bind((host,port)) except socket.error,e: LOG.error(e) return - 1 return 0 #listenTCPport,default def my_listen( self ,num = 1024 ): try : self .sock.listen(num) except socket.error,e: LOG.error(e) return - 1 return 0 #connectsettingtimeout def my_connect( self ,host,port,time_out = - 1 ): try : if time_out = = - 1 : self .sock.setblocking( 1 ) else : self .sock.settimeout(time_out) self .sock.connect((host,port)) except socket.error,e: LOG.error(e) return - 1 return 0 #acceptteturnclientaddress def my_accept( self ,time_out = - 1 ): addr = [] try : if time_out = = - 1 : self .sock.setblocking( 1 ) else : self .sock.settimeout(time_out) client_sock,addr = self .sock.accept() except socket.error,e: LOG.error(e) return client_sock,addr #recvsettingtimeout def my_recv( self ,buf_size,time_out = - 1 ): buf = '' try : if time_out = = - 1 : self .sock.setblocking( 1 ) else : self .sock.settimeout(time_out) buf = self .sock.recv(buf_size) except Exception,e: LOG.error(e) return buf #sendsettingtimeout def my_send( self ,buf,time_out = - 1 ): try : if time_out = = - 1 : self .sock.setblocking( 1 ) else : self .sock.settimeout(time_out) send_len = self .sock.send(buf) return send_len except Exception,e: LOG.error(e) return - 1 #close def my_close( self ,time_out = - 1 ): try : if time_out = = - 1 : self .sock.setblocking( 1 ) else : self .sock.settimeout(time_out) self .sock.close() except socket.error,e: LOG.error(e) return - 1 return 0 class sock_thread(threading.Thread): def __init__( self ,host,port,buf): threading.Thread.__init__( self ) self .host = host self .port = port self .buf = buf def run( self ): sock = MySocket() sock.my_bind( self .host, self .port) sock.my_listen( 20 ) LOG.info( 'Thesockethasbeenconnected' ) while True : conn,addr = sock.my_accept() while True : data = conn.recv( self .buf) if not data: break else : try : data = json.loads(data) if data[ 'Node' ][ 'UUID' ]: port = utils.get_vnc_port(data[ 'Node' ].get( 'UUID' , None )) data[ 'Node' ][ 'port' ] = port LOG.info(json.dumps(data)) conn.send(json.dumps(data)) else : conn.send() except : break conn.close() sock.my_close() class socket_demo( object ): def __init__( self ): host = utils.get_net_ip() self .host = host self .port = 10086 self .buf = 4096 def work( self ): self .sock = sock_thread( self .host, self .port, self .buf) self .sock.start() time.sleep( 0.5 ) def init(): st = socket_demo() st.work() 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1540216

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册