openstack+ڦ
来自「OpenStack块存储nova-volume工作机制和相关问题」· 代码 · 共 284 行 · 第 1/2 页
TXT
284 行
主要因为没有nova-volumes卷组,或者iscsitarget服务没有启动(或者没有安装)。
1、vgdisplay
没有nova-volumes卷组,可以创建卷组和磁盘
$ dd if=/dev/zero of=/opt/nova-volumes.img bs=1M seek=100000 count=0
$ losetup -f /opt/nova-volumes.img
$ losetup -a
$ vgcreate nova-volumes /dev/loop0
记着启动nova-volume然后创建volume,否则下面仍然不能创建
$ service nova-volume restart
$ nova volume-create --display_name "volume1" 10
2、service tgt status
由于nova.conf设置tgtadm管理,在控制节点(nova-volume所在的物理节点)使用tgt提供target服务,通过tgtadm管理。
1)没有安装tgt,或者没有正常启动tgt,可以apt安装(可以用iscsitarget,对于inet管理工具,对应iscsitarget iscsitarget-dkms,需要sed
-i -e 's/false/true/' /etc/default/iscsitarget是服务可以工作)
然后执行以下命令安装和设置为可以启动
apt-get install -y tgt
service tgt start
service nova-volume restart
lsof | grep 3260可以查看端口是否监听
2)如果既没有nova-volumes卷组,也没有安装tgt,切忌保证这两者都存在,并且nova.conf设置正确,然后重启nova-volume,再创建volume
有人安装tgt并启动后就create,结果nova-volume并没有启动,所以问题依然存在;
有人创建nova-volumes,也没有重启nova-volume,也不能正常工作。
3.3、OpenStack中创建volume一直在creating,怎么停掉(stop)
主要因为nova-volume没有正常启动,即使现在启动了还会停留在这个状态。
需要手动更改数据库里相关状态信息,从creating改为deleted然后删掉。
对于这个没有创建成功的volume,可以直接更改数据库改为deleted,注意nova volume-delete会提示找不到。
如果不能创建某些卷,并且提示存在这种volume,比如lvdis(参考:http://www.linbayan8.com)play查到这个逻辑卷,需要lvremove;如果tgt中可以看到这个target,需要使用tgtadm删除
tgtadm --op delete --lld=iscsi --mode=target --tid=1
3.4、OpenStack中nova-volume执行出现问题,检查什么地方
主要因为nova-volume没有正常启动或者计算节点没有能找到target,可以检查以下这些问题。
nova-volume是否正常;控制点,详见问题3.2
tgt是否开启;服务端
open-iscsi是否安装和开启;客户端
客户端(计算节点)iscsiadm discovery看看能不能找到存储服务;
分析nova-volume.log、nova-compute.log和libvirt.log。
3.5、OpenStack中tgt管理target
控制节点查看target
tgtadm --lld iscsi --op show --mode target
建立target
sudo tgtadm --op new --lld=iscsi --mode=target --tid=1 --targetname=iqn.2010-10.org.openstack:volume-00000001
3.6、OpenStack中计算节点管理volume
查看建立的session
sudo iscsiadm -m session
手动发现target
sudo iscsiadm -m discovery -t sendtargets -p IP:port
登入登出
sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --login
sudo iscsiadm -m node -T targetname(iqn.2010-10.org.openstack:volume-00000004) -p 10.200.200.4:3260 --logout
sudo iscsiadm -m node -o [delete|new|update] -T targetname
如果使用命令
sudo iscsiadm -m discovery -t sendtargets -p compute_node
报以下错误
iscsiadm: Connection to Discovery Address 192.168.139.50 closed
iscsiadm: Login I/O error, failed to receive a PDU
这是因为没有找到target,可以create一个volume,此时会建立一个卷,建立一个target。
3.7、OpenStack中挂载volume一直阻塞停留在attaching,什么原因,怎么解决
在volume-create成功创建volume后,挂载到实例,如果遇到什么提示都没有nova volume-attach后仍然为available,那么是你的挂载有问题,比如使用的设备名/dev/vdc已经使用了,需要检查日志。
更多的问题是,nova volume-attach一直attaching,删不掉也挂不上。这时候,nova-manage service list你会发现nova-compute已经停止,如果以上所描述的问题(nova-volume没有正常工作)都不存在,那么需要你更改OpenStack源代码了,这是OpenStack的一个bug。
1)对于这个没有挂载成功的volume,可以直接更改数据库改为available,或者使用nova-manage
volume delete来通过数据库删除这个volume,注意nova volume-delete会删不掉。
2)对于这个bug,需要更改以下两处源代码:
vi /usr/share/pyshared/nova/virt/libvirt/connection.py
把virt_dom.attachDevice(xml)这一行改为
LOG.info("attaching device with virsh")device_path = connection_info['data']['device_path']utils.execute('virsh', "attach-disk", instance_name, device_path, mount_device, run_as_root=True )
vi /usr/share/pyshared/nova/rootwrap/compute.py
添加一行
filters.CommandFilter("/usr/bin/virsh", "root"),
这样就行了,注意volume-attach填写的设备名不能重复,虽然它并不一定使用你指定的设备名作为实例的设备名。
如果很多服务没有正常工作,可以重启所有服务
for a in libvirt-bin nova-network nova-compute nova-api nova-objectstore nova-scheduler novnc nova-volume nova-consoleauth; do service "$a" restart;
done
为了集中这些讨论,请访问原始出处:《OpenStack块存储nova-volume相关问题》。如有OpenStack问题和解决,请直接下面回复,这样也方便后来人。如有其它问题反馈,Kayven微博留言(E-mail)。国内对于OpenStack还处于比较初级的阶段,技术研究公开的资料较少,多为一些安装部署问题相关的文章,比较深入的技术分析和比较全面的介绍较少。希望有什么经验和观点,可以在这里分享出来供大家讨论,也帮助理清自己的思路。
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?