首页 文章 精选 留言 我的

精选列表

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

OpenStack CEPH Liberty 统一存储 bug解决

1, 问题: glance 镜像 raw 格式,启动云主机报错 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 2015 - 12 - 13 11 : 53 : 27.597 11654 INFOnova.virt.libvirt.driver[req - db7b8ac1 - 8218 - 4ab0 - b769 - 9c4d4379843b e198d9f41e784308858a52b174fc822aa7fc63796b934498ba9b6d1a918cb2c7 - - - ][instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]Creatingimage 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[req - db7b8ac1 - 8218 - 4ab0 - b769 - 9c4d4379843b e198d9f41e784308858a52b174fc822aa7fc63796b934498ba9b6d1a918cb2c7 - - - ][instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]Instancefailedtospawn 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]Traceback(mostrecentcalllast): 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/compute/manager.py" ,line 2155 , in _build_resources 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] yield resources 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/compute/manager.py" ,line 2009 , in _build_and_run_instance 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]block_device_info = block_device_info) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py" ,line 2437 , in spawn 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]admin_pass = admin_password) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py" ,line 2861 , in _create_image 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]instance,size,fallback_from_host) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py" ,line 6282 , in _try_fetch_image_cache 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]size = size) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/imagebackend.py" ,line 240 , in cache 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] * args, * * kwargs) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/imagebackend.py" ,line 777 , in create_image 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]prepare_template(target = base,max_size = size, * args, * * kwargs) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/oslo_concurrency/lockutils.py" ,line 254 , in inner 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] return f( * args, * * kwargs) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/imagebackend.py" ,line 230 , in fetch_func_sync 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]fetch_func(target = target, * args, * * kwargs) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py" ,line 2853 , in clone_fallback_to_fetch 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]backend.clone(context,disk_images[ 'image_id' ]) 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/imagebackend.py" ,line 808 , in clone 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] if self .driver.is_cloneable(location,image_meta): 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/storage/rbd_utils.py" ,line 193 , in is_cloneable 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a] if image_meta.disk_format! = 'raw' : 2015 - 12 - 13 11 : 53 : 27.932 11654 ERRORnova.compute.manager[instance: 18efe519 - e86b - 43e9 - 842a - f974a751e29a]AttributeError: 'dict' object hasnoattribute 'disk_format' 2,问题分析 1,查找问题定位:/usr/lib/python2.7/site-packages/nova/virt/libvirt/storage/rbd_utils.py 1 2 3 4 5 6 7 import ipdb;ipdb.set_trace() if image_meta.disk_format! = 'raw' : reason = ( "rbdimageclonerequiresimageformattobe" "'raw'butimage{0}is'{1}'" ). format ( url,image_meta.disk_format) LOG.debug(reason) return False 2, ipdb 启动服务追踪 1 [root@AthComputeLiberty10325~] #ipdb/usr/bin/nova-compute--config-file=/etc/nova/nova.conf 3,发现蛛丝马迹 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 AttributeError: "'dict'objecthasnoattribute'disk_format'" >/usr/lib/python2.7/site-packages/nova/virt/libvirt/storage/rbd_utils.py(194)is_cloneable() 193 -->194 if image_meta.disk_format!= 'raw' : 195reason=( "rbdimageclonerequiresimageformattobe" ipdb>args self=<nova.virt.libvirt.storage.rbd_utils.RBDDriverobjectat0x5f41850> image_location={ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}} image_meta={ 'status' :u 'active' , 'deleted_at' :None, 'name' :u 'Ceph-linux6.6.v2.0' , 'deleted' :None, 'container_format' :u 'ovf' , 'created_at' :datetime.datetime(2015,12,12,8,47,40,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'disk_format' :u 'raw' , 'updated_at' :datetime.datetime(2015,12,12,9,35,22,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'locations' :[{ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}}], 'owner' :u 'a7fc63796b934498ba9b6d1a918cb2c7' , 'id' :u '05cfd97d-f0d8-43b4-9796-180f650e79ce' , 'min_ram' :0, 'checksum' :u '0909ad3eebe539efc2054196abffdb41' , 'min_disk' :0, 'is_public' :None, 'direct_url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'properties' :{}, 'size' :128849018880} ipdb>image_meta.disk_format ***AttributeError: 'dict' object has no attribute 'disk_format' ipdb>image_meta.disk_format() ***AttributeError: 'dict' object has no attribute 'disk_format' ipdb>image_meta.disk_format. values () ***AttributeError: 'dict' object has no attribute 'disk_format' ipdb>dir(image_meta.disk_format) ***AttributeError: 'dict' object has no attribute 'disk_format' ipdb>args self=<nova.virt.libvirt.storage.rbd_utils.RBDDriverobjectat0x5f41850> image_location={ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}} image_meta={ 'status' :u 'active' , 'deleted_at' :None, 'name' :u 'Ceph-linux6.6.v2.0' , 'deleted' :None, 'container_format' :u 'ovf' , 'created_at' :datetime.datetime(2015,12,12,8,47,40,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'disk_format' :u 'raw' , 'updated_at' :datetime.datetime(2015,12,12,9,35,22,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'locations' :[{ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}}], 'owner' :u 'a7fc63796b934498ba9b6d1a918cb2c7' , 'id' :u '05cfd97d-f0d8-43b4-9796-180f650e79ce' , 'min_ram' :0, 'checksum' :u '0909ad3eebe539efc2054196abffdb41' , 'min_disk' :0, 'is_public' :None, 'direct_url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'properties' :{}, 'size' :128849018880} ipdb>image_meta { 'status' :u 'active' , 'deleted_at' :None, 'name' :u 'Ceph-linux6.6.v2.0' , 'deleted' :None, 'container_format' :u 'ovf' , 'created_at' :datetime.datetime(2015,12,12,8,47,40,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'disk_format' :u 'raw' , 'updated_at' :datetime.datetime(2015,12,12,9,35,22,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'locations' :[{ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}}], 'owner' :u 'a7fc63796b934498ba9b6d1a918cb2c7' , 'id' :u '05cfd97d-f0d8-43b4-9796-180f650e79ce' , 'min_ram' :0, 'checksum' :u '0909ad3eebe539efc2054196abffdb41' , 'min_disk' :0, 'is_public' :None, 'direct_url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'properties' :{}, 'size' :128849018880} ipdb>type(image_meta) <type 'dict' > ipdb>image_meta { 'status' :u 'active' , 'deleted_at' :None, 'name' :u 'Ceph-linux6.6.v2.0' , 'deleted' :None, 'container_format' :u 'ovf' , 'created_at' :datetime.datetime(2015,12,12,8,47,40,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'disk_format' :u 'raw' , 'updated_at' :datetime.datetime(2015,12,12,9,35,22,tzinfo=<iso8601.iso8601.Utcobjectat0x604ae90>), 'locations' :[{ 'url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'metadata' :{}}], 'owner' :u 'a7fc63796b934498ba9b6d1a918cb2c7' , 'id' :u '05cfd97d-f0d8-43b4-9796-180f650e79ce' , 'min_ram' :0, 'checksum' :u '0909ad3eebe539efc2054196abffdb41' , 'min_disk' :0, 'is_public' :None, 'direct_url' :u 'rbd://03e180bd-7504-4883-8d0f-5506c63d4a4f/images/05cfd97d-f0d8-43b4-9796-180f650e79ce/snap' , 'properties' :{}, 'size' :128849018880} ipdb>image_meta[ 'disk_format' ] u 'raw' 3,解决问题bug: 修改前: if image_meta.disk_format != 'raw': 修改后: if image_meta['disk_format'] != 'raw': 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 179 180 def is_cloneable( self ,image_location,image_meta): 181 import ipdb;ipdb.set_trace() 182 url = image_location[ 'url' ] 183 try : 184 fsid,pool,image,snapshot = self .parse_url(url) 185 except exception.ImageUnacceptablease: 186 LOG.debug( 'notcloneable:%s' ,e) 187 return False 188 189 if self ._get_fsid()! = fsid: 190 reason = '%sisinadifferentcephcluster' % url 191 LOG.debug(reason) 192 return False 193 194 #Addwilliam,image_meta.disk_format!='raw' 195 #so... 196 if image_meta[ 'disk_format' ]! = 'raw' : 197 reason = ( "rbdimageclonerequiresimageformattobe" 198 "'raw'butimage{0}is'{1}'" ). format ( 199 url,image_meta.disk_format) 200 LOG.debug(reason) 201 return False 4, 完成操作 1 2 3 4 5 2015 - 12 - 13 13 : 18 : 36.659 19827 INFOnova.virt.libvirt.firewall[req - 7d3b097b - 701d - 4352 - a8cc - 87bc6fb3f9f1 e198d9f41e784308858a52b174fc822aa7fc63796b934498ba9b6d1a918cb2c7 - - - ][instance: 36025fe9 - 5abe - 44de - bdb8 - 71983a3645f2 ]Calledsetup_basic_filtering in nwfilter 2015 - 12 - 13 13 : 18 : 36.660 19827 INFOnova.virt.libvirt.firewall[req - 7d3b097b - 701d - 4352 - a8cc - 87bc6fb3f9f1 e198d9f41e784308858a52b174fc822aa7fc63796b934498ba9b6d1a918cb2c7 - - - ][instance: 36025fe9 - 5abe - 44de - bdb8 - 71983a3645f2 ]Ensuringstaticfilters 2015 - 12 - 13 13 : 18 : 37.418 19827 INFOnova.compute.manager[ - ][instance: 36025fe9 - 5abe - 44de - bdb8 - 71983a3645f2 ]VMStarted(LifecycleEvent) 2015 - 12 - 13 13 : 18 : 37.441 19827 INFOnova.virt.libvirt.driver[ - ][instance: 36025fe9 - 5abe - 44de - bdb8 - 71983a3645f2 ]Instancespawnedsuccessfully. 2015 - 12 - 13 13 : 18 : 37.525 19827 INFOnova.compute.manager[req - a92e6077 - 014c - 421c - 9fcc - 9d21e6f7d420 - - - - - ][instance: 36025fe9 - 5abe - 44de - bdb8 - 71983a3645f2 ]Duringsync_power_statetheinstancehasapendingtask(spawning).Skip. 本文转自 swq499809608 51CTO博客,原文链接:http://blog.51cto.com/swq499809608/1722459

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

OpenStack入门修炼之网络虚拟化基础(20)

1.Linux Bridge的基本概念 假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是: 如何让 VM1 能够访问外网? ① 给 VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge br0 将 eth0 和 vnet0 连接起来,如下图所示 Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机或者 Hub。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。 在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据; 反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。 现在我们增加一个虚机 VM2,如下图所示 VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。 2.理解virbr0 virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。 virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。 [root@linux-node1 ~]# ifconfig brqc39c1348-5a: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255 ether 00:0c:29:4c:ef:31 txqueuelen 0 (Ethernet) RX packets 1069698 bytes 374890434 (357.5 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 854554 bytes 289390857 (275.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::20c:29ff:fe4c:ef31 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:4c:ef:31 txqueuelen 1000 (Ethernet) RX packets 1272820 bytes 454742027 (433.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 948074 bytes 428034564 (408.2 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 12361940 bytes 4186785589 (3.8 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 12361940 bytes 4186785589 (3.8 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 tapae04cfac-d0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 ether 6a:ef:28:f7:c5:90 txqueuelen 1000 (Ethernet) RX packets 5 bytes 438 (438.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 13043 bytes 2231018 (2.1 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:8b:7a:13 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 查看虚拟机 [root@linux-node1 ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- - centos 关闭 查看虚拟机网卡信息 [root@linux-node1 ~]# virsh domiflist centos 接口 类型 源 型号 MAC ------------------------------------------------------- - network default virtio 52:54:00:e4:75:83 查看桥接网卡信息,可以看到virbr0-nic桥接到virbr0网卡上 [root@linux-node1 ~]# brctl show bridge name bridge id STP enabled interfaces brqc39c1348-5a 8000.000c294cef31 no eth0 tapae04cfac-d0 virbr0 8000.5254008b7a13 yes virbr0-nic 启动虚拟机 [root@linux-node1 ~]# virsh start centos 域 centos 已开始 [root@linux-node1 ~]# virsh list --all Id 名称 状态 ---------------------------------------------------- 1 centos running 使用TightVNC连接192.168.56.11,查看网卡信息 [root@linux-node1 ~]# ssh 192.168.122.169 root@192.168.122.169's password: Last login: Tue Dec 12 15:04:59 2017 ping外网可通 [root@localhost ~]# ping www.baidu.com PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data. 64 bytes from 14.215.177.39: icmp_seq=1 ttl=127 time=13.4 ms 64 bytes from 14.215.177.39: icmp_seq=2 ttl=127 time=9.14 ms 64 bytes from 14.215.177.39: icmp_seq=3 ttl=127 time=8.47 ms 64 bytes from 14.215.177.39: icmp_seq=4 ttl=127 time=15.5 ms 64 bytes from 14.215.177.39: icmp_seq=5 ttl=127 time=8.85 ms 64 bytes from 14.215.177.39: icmp_seq=6 ttl=127 time=8.85 ms ^C --- www.a.shifen.com ping statistics --- 6 packets transmitted, 6 received, 0% packet loss, time 5012ms rtt min/avg/max/mdev = 8.473/10.716/15.538/2.741 ms 没有问题,可以访问外网,说明 NAT 起作用了。 需要说明的是,使用 NAT 的虚拟机 centos可以访问外网,但外网无法直接访问 centos。 因为 centos 发出的网络包源地址并不是 192.168.122.169,而是被 NAT 替换为宿主机的 IP 地址了。 这个与使用 br0 不一样,在 br0 的情况下,centos 通过自己的 IP 直接与外网通信,不会经过 NAT 地址转换。 版权声明:原创作品,谢绝转载。否则将追究法律责任 本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049817

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

OpenStack入门修炼之KVM介绍及安装(3)

1.什么是虚拟化? 虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。 物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。 那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢? 这个主要是通过一个叫做 Hypervisor 的程序实现的。 2.虚拟化的分类 ①Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。 ②物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。 理论上讲: ①号虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高; ②号虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。 3.KVM的介绍 KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。 KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。 那 IO 的虚拟化,比如存储和网络设备由谁实现呢? 这个就交给 Linux 内核和Qemu来实现。 说白了,作为一个 Hypervisor,KVM 本身只关注虚拟机调度和内存管理这两个方面。IO 外设的任务交给 Linux 内核和 Qemu。 4.Libvrit Libvirt是KVM的管理工具,Libvirt包含3个组成部分:后台daemon程序libvirtd、API库、和命令行工具virsh ①libvirtd是服务程序,接收和处理API请求; ②API库是可以基于libvirt的开发工具,例如vir-manager ③virsh是KVM的命令行工具,比如在实际生产中,图形界面无法使用或无法通过vnc链接云主机时,可以通过virsh命令行进行操作。 5.KVM的安装 (1)查看cpu是否支持虚拟化 [root@linux-node1 ~]# grep -E '(vmx|svm)' /proc/cpuinfo ** flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts nopl xtopology tsc_reliable nonstop_tsc aperfmperf eagerfpu pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm arat pln pts dtherm tpr_shadow vnmi ept vpid fsgsbase smep xsaveopt (2)安装qemu-kvm(用户态管理工具),libvirt(命令行管理工具),virt-install(安装kvm工具) [root@linux-node1 ~]# yum install -y qemu-kvm libvirt [root@linux-node1 ~]# yum install -y virt-install (3)启动libvirtd服务,查看是否创建多出一个虚拟网卡:virbr0 [root@linux-node1 ~]# systemctl enable libvirtd [root@linux-node1 ~]# systemctl start libvirtd [root@linux-node1 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::20c:29ff:fe03:f3fe prefixlen 64 scopeid 0x20<link> ether 00:0c:29:03:f3:fe txqueuelen 1000 (Ethernet) RX packets 224847 bytes 330431521 (315.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 96423 bytes 9122932 (8.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1 (Local Loopback) RX packets 204 bytes 16460 (16.0 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 204 bytes 16460 (16.0 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:67:fb:26 txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 (4)创建虚拟机 安装kvm虚拟机的需求:硬盘,光盘镜像。 ①创建的虚拟机内存大小不能超过物理机的大小; ②创建的虚拟机不需要每次都安装启动,只需要通过镜像进行启动。 [root@linux-node1 ~]# qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G Formatting '/opt/CentOS-7-x86_64.raw', fmt=raw size=10737418240 [root@linux-node1 ~]# virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 \ > --cdrom=/tmp/CentOS-7-x86_64-DVD-1611.iso --disk path=/opt/CentOS-7-x86_64.raw \ > --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole Starting install... Domain installation still in progress. You can reconnect to the console to complete the installation process. 然后快速用TightVNS链接192.168.56.11,按"Tab"键,然后输入:net.ifnames=0 biosdevname=0,更改网卡名称为eth0.按"Enter"进入安装。如图: 总结思路: 1.创建虚拟磁盘 2.通过virt-install安装一台虚拟机 3.通过TightVNC客户端工具连接到192.168.56.11:5900进行安装操作,默认qumu-kvm的端口是5900端口,端口从5900计算. 遇到的问题总结: 1.如果多次执行安装: 1.删除 rm -f /opt/CentOS-7-x86_64.raw 2.虚拟机的名称,需要指定--name参数进行修改 virt-install --virt-type kvm --name CentOS-dxxxx7-x86_64 --ram 1024 \ --cdrom=/tmp/CentOS-7-x86_64-DVD-1611.iso --disk path=/opt/CentOS-7-x86_64.raw \ --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 2.如何删除KVM创建的桥接网卡: brctl show ifconfig br0 down brctl delbr br0 systemctl restart network 3.如何在Centos 7 系统安装完毕修改网卡名为eth0: (1)首先,先编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME项修改为eth0 继续,重命名该配置文件 (2)然后,禁用该可预测命名规则。对于这一点,你可以在启动时传递“net.ifnames=0 biosdevname=0 ”的内核参数。这是通过编辑/etc/default/grub并加入“net.ifnames=0 biosdevname=0 ”到GRUBCMDLINELINUX变量来实现的。 (3)运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。 (4)reboot重启系统生效 本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2049395

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

多线程之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

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

Openstack安装部署指南翻译系列 之 硬件需求

1.1.1.1.控制节点 控制器节点运行身份服务,镜像服务,计算的管理部分,网络的管理部分,各种网络代理和仪表板。它还包括支持服务,如SQL数据库,消息队列和NTP。 可选地,控制节点运行块存储,对象存储,编排和计量服务的部分。 控制器节点至少需要两个网络接口。 1.1.1.2.计算节点 计算节点运行虚拟机实例的Compute的管理程序部分。默认情况下,Compute使用KVM虚拟机管理程序。计算节点还运行网络服务代理,将实例连接到虚拟网络,并通过安全组向实例提供防火墙服务。 可以部署多个计算节点。每个节点至少需要两个网络接口。 1.1.1.3.块存储节点 可选的Block Storage节点包含块存储和共享文件系统为实例提供服务的磁盘。 为了简单起见,计算节点和此节点之间的服务流量使用管理网络。生产环境应实施单独的存储网络,以提高性能和安全性。我们的生产环境是通过划分VLAN使用单独的存储网络。 可以部署多个块存储节点,我们该项目使用1个块存储节点。每个节点至少需要一个网络接口。 1.1.1.4. 共享存储 可选的共享存储节点包含共享存储服务,用于提供共享存储。 我们的生产环境使用单独的存储网络,以提高性能和安全性。 此服务需要两个节点。每个节点至少需要一个网络接口。 本文转自yuweibing51CTO博客,原文链接:http://blog.51cto.com/yuweibing/1981166,如需转载请自行联系原作者

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

openstack各服务端口使用情况

端口占用情况 端口情况可以使用ss -tanp命令进行查看 监听的所有端口ss -tanp | grep LISTEN 基础服务 22 --SSH 3306 --MariaDB(MySQL) 27017 --MongoDB(Telemetry计量数据收集服务,没有进行安装) 5672、25672 --RabbitMQ(nova计算服务需要,以及neutron的linux_bridge代理需要) 11211 --Memcached(horizon界面服务需要) keystone 35357 --admin 5000 --user glance 9191 --Glance Registry 9292 --Glance API neutron 9696 --neutron nova 6080 --nova-novncproxy 8774、8775 --nova-api cinder 8776--Cinder-api

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Spring

Spring

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册