linux安装在虚拟机下安装linux环境好还是物理环境好

参考:OneStack本文主要关于近一个月对Openstack学习的一个总结,包括单机环境安装部署中出现的问题记录和学习的过程,适合入门者阅读。一、openstack安装部署目前看到的一个是官方的安装部署文档,一个是中文的OneStack脚本。根据两个文档都能在虚拟机Ubuntu环境搭建好环境,中间也许或出现某些问题,搜一下应该可以得到解决。因为OneStack的是中文的,在脚本每一句都有详细说明介绍,学习起来会轻松很多。可以直接将脚本中IP修改为自己机器IP,运行脚本基本就能正常工作。/etc/network/interfaces可改可不改,看具体情况,比如虚拟机使用的DHCP自动分配IP,会在一定时间后换一个IP才能访问网络,反正只要IP和对应上就OK。一般虚拟机无法支持KVM的,所以这个地方记住得改VIRT_TYPE为qemu。如果失败了又不知道原因,也可以自己一个一个模块根据脚本手动安装,找到原因就好解决掉。比如从keystone开始安装,完了测试下是否正常,再依次安装glance和nova,dashbord。如果搭建源码调试环境,可以git clone或者apt-get source获得源码,我使用的IDE是eclipse&#43;pdev,以前用eclipse习惯从源码安装可以使用pip install如果还有遇到问题没解决的可以看下面的,也许是我遇到过的问题。</pute等服务阻塞导致无法正常启动Nova-compute服务启动后阻塞在连接libvirtd,此时如果执行命令virsh list阻塞则执行命令killall -9 dmidecode再重新启动nova-compute即可2.调试启动nova-*服务时将eventlet.monkey_patch()改为eventlet.monkey_patch(all=False,socket=True,select=True),否则会出线程切换的一个错误吧3.启动network服务时阻塞,log日志中在获取iptables则删除lock/nova中的文件重新启动4.nova-volumes服务启动时如果出现卷XXX(如nova-volumes)不存在,则需要新建一个分区并创建volumes分配卷组名pvcreate /dev/sda6Can't open /dev/sda6 exclusively. Mounted filesystem?出现以上错误的原因是分区文件正在使用中,必须先umount才行。pvcreate /dev/sda6Physical volume &/dev/sda6& successfully created建好物理卷后可以用“pvdisplay”命令查看物理卷情况pvdisplay--- NEW Physical volume ---PV Name /dev/sda6VG NamePV Size 1.06 GBAllocatable NOPE Size (KByte) 0Total PE 0Free PE 0Allocated PE 0PV UUID N2LgeT-RB4Y-8YEP-lO2J-tDWu-UeCT-4Obl8p如果需要启动时卷则修改/etc/fstab,按照规则增加一行该卷创建逻辑卷组vgcreate nova-volumes /dev/sda6还有些问题一时不记得,先记到这,有问题再补充,下面简答介绍下几个模块的源码。二、源码阅读keystone,glance,nova结构都非常相&#20284;,使用wsgi协议,webob,paste,routes几个框架,像我这样以前Python没接触过的人可能也没接触过这些东西,先可以大致了解下这几个框架,再来看源码就大致知道怎么回事了。先来说下keystone过程,下面是刚学习的时候记录的,直接贴过来,可能存在错误,有问题请指出,谢谢。启动keystone服务时,需要查找keystone.conf配置文件并解析,通过keystone.conf配置的logging.conf解析logging日志配置。deploy.appconfig会解析paste.deploy配置中 main section的部分create_server中deploy.loadapp一开始与appconfig一样,load app context。之后通过create方法解析paste配置的组成部分,并执行相关初始化。use = egg:Paste#urlmap先得到解析执行,进入paste.urlmap#urlmap_factory,将先前loadContext得到的config map作为参数传入。这里urlmap将会通过配置的uri和app对应起来,例如如果是composite:admin中的/2.0路径,将会继续通过查找每一个section pre找到pipeline中有一个pipeline:admin_api。然后查找pipeline中最后一个应用的配置放入context.app_context,这里是admin_service。Admin_service的协议是paste.app_factory,执行的方法是keystone.service:admin_app_factory。再同样的方法查找所有filter放入context.filter_contexts.然后用这个pipeline context调用create方法,pipeline中则是先create app context再依次create filter context。(从这里将从deploy模块回到keystone模块)Create app context执行admin_app_factory。解析目录模版:Catalog.RegionOne.identity.publicURLRegion=RegionOneService=identityKey=publicURL组合成json&#26684;式串{‘RegionOne’:{‘identity’:{‘publicuRL’:’http://localhost:${public_port}s/v2.0’}}}最终将整个目录模版解析成json&#26684;式的字典对象。解析完成后得到一个带有adminURL目录信息的version_controller,之后向routes.mapper添加路由信息,最终将构建完成的router返回给urlmap,完成请求路径与路由路径的一一对应。路由对象保存了请求路径信息,controller信息,action信息。至此,Keystone-all执行完成,启动了两个server等待请求,一个是admin_port等待,一个是public_port等待。请求到达服务时,将会按照paste配置执行filters,然后根据路由表配置进入模块方法执行。上面的介绍实际主要是讲paste和routes的过程,keystone利用这些框架,提供REST API,降低耦合,可以为各个模块提供用户认证功能。下面简单介绍glance项目。1.registry提供对DB操作的http服务,glance api通过对registry的http请求操作存储在DB中的镜像元数据,虽然registry api可访问,一般用户不直接操作registry api2.glance-api和glance-registry启动服务后,分别根据应用名和项目名查找paste配置文件,并部署路由信息将镜像元数据放入HTTP请求头,并将镜像文件作为内容请求glance-api地址。&glance-api接收请求,解析以x-image-meta和x-image-meta-property-开头的请求头信息作为镜像元数据,&之后使用registry client请求registry服务,在DB中存储镜像元数据,并获取ID&#20540;作为镜像文件存储的文件名,&文件存储或者以其他方式存储完镜像文件后,再次请求registry服务更新镜像状态等元数据信息。nova的项目稍微大些,抽取创建虚拟机和发布快照的过程简单说明。1.从glance获取镜像并创建虚拟机1)compute API获取请求后判断实例类型是否满足创建实例个数2) 在创建image_service时会判断image_href是否为如http://myglanceserver:9292/images/42的形式,是的话则获取指定glance服务,如果为ID串则获取默认glance服务。3) 请求glance获取image metadata4) 获取metadata后判断访问权限问题,首先是auth-token,有则返回,没则继续判断image是否是public或者当前用户是否是admin&5) 过滤获取的metadata只得到属于IMAGE_ATTRIBUTES = ['size', 'disk_mat','container_format', 'checksum', 'id','name', 'created_at', 'updated_at','deleted_at', 'deleted', 'status','min_disk', 'min_ram', 'is_public']中的属性把timestamp转成datetime转换'block_device_mapping', 'mappings'属性json字符串为map6) 确保存在default组,没有则创建7) 为新的实例更新db数据,增加实例数据和更新实例与安全组的关联数据,更新block_device_mapping,更新vm状态为building,更新task状态为scheduling8) 向scheduler发出启动实例请求,rpc远程方法调用run_instance9) compute-manager启动实例时先请求instance元数据10) 之后分配网络,更新float ip并关联fixed ip,返回网络信息11)创建instance维护目录(如/var/lib/nova/instances/instance-/)12) 实例信息写入libvirt.xml13) image_id做sha1摘要作为镜像名14) 缓存镜像,如果存在disk文件,则获取_base目录中的缓存镜像,&如果缓存镜像存在则用于后面的disk创建命令,不存在则请求glance服务获取镜像元数据与镜像文件数据,&如果是qcow2类型则会使用libvirt命令创建镜像,示例如下Create COW image:qemu-img create -f qcow2 -o cluster_size=2M,backing_file=/var/lib/nova/instances/_base/1d522ac141df5e61bce5 /var/lib/nova/instances/instance-/disk15) 往disk注入key,net,metadata和admin_password数据16) 开启loopCaller判断虚拟机状态是否为Running,是则跳出完成2.nova发布快照1) 进入nova.image.glance.image_service.create方法-&glance client创建镜像glance.client:add_image-&&使用REST API(带头信息x-image-meta-property-image_type': u'snapshot')请求将当前镜像作为快照类型创建一份元数据并获取ID2) compute API使用RPC调用computeManager做snapshot3) computeManager获取实例的virtDomain对象,镜像元数据和snapshot元数据4) 查找libvirt xml描述,解析出disk所在路径5) 如果虚拟机在运行,libvirt则暂停虚拟机,保存内存内容至文件6) 使用libvirt命令创建快照qemu-img snapshot -c ${快照名的十六进制} ${disk-path}7) 提取快照到临时文件夹qemu-img convert -f qcow2 -O qcow2 -s ${快照名的十六进制} ${disk-path} ${out-path}8) 从disk中删除快照qemu-img snapshot -d ${快照名的十六进制} ${disk-path}9) 如果虚拟机创建快照前在运行则将虚拟机从暂停转到运行状态10) 用glance client更新快照元数据信息11) 更新中实例元数据(Task_State=None)&#xe602; 下载
&#xe60c; 收藏
该文档贡献者很忙,什么也没留下。
&#xe602; 下载此文档
正在努力加载中...
虚拟机安装Linux及网络设置
下载积分:280
内容提示:
文档格式:PDF|
浏览次数:4|
上传日期: 14:05:38|
文档星级:&#xe60b;&#xe612;&#xe612;&#xe612;&#xe612;
该用户还上传了这些文档
虚拟机安装Linux及网络设置.PDF
官方公共微信

我要回帖

更多关于 linux虚拟机安装教程 的文章

 

随机推荐