设为首页 收藏本站
查看: 1375|回复: 0

[经验分享] OpenStack升级之Nova-volume升级和迁移问题

[复制链接]

尚未签到

发表于 2016-1-9 11:38:14 | 显示全部楼层 |阅读模式
  前面一段时间已经完成了nova-volume从essex到folsom的升级和从nova-volume到cinder的迁移,虽然在升级过程中看上去没什么问题,但是在迁移到cinder时, 原来在essex版nova-volume下创建的卷就有问题了(folsom版下创建的卷能平稳的迁移的到cinder无任何问题),主要表现在以下几个方面:

1.实例中无法访问已经挂载的卷;

2.实例挂载的卷可以卸载,但是再挂载到某个实例的时候报错;

3.通过horizon或nova命令重启实例的时候会因为报卷方面的错误而启动失败(类似:Cannot reboot instance: cannot read header '/dev/disk/by-path/ip-10.61.2.15:3260-iscsi-iqn.2010-10.org.openstack:volume-0000002a-lun-1': Input/output error)。

问题原因
  出现这些问题的根本原因是在folsom版的nova-volume和cinder中的volume采用了uuid替换了essex版中表示volume的整形id。在升级nova的时候, 基本上已经把所有的与volume id相关的内容替换成uuid了,但是仍然有两个地方被忽略了:

一是nova数据库中block_device_mapping中的connection_info字段没有更新;

二是做为volume实际存储后端的相应的lvm中的逻辑卷的命名没有更新。

在folsom版的nova-volume中这还没有什么问题,因此它会生成新旧两个版本的tgt配置文件:

[iyunv@store3 ~]# ll /var/lib/nova/volumes/
总用量 72
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-00000006
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-0000000b
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-00000019
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-0000001d
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-00000026
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-00000027
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-0000002a
-rw-r--r-- 1 nova nova 158 11月 19 22:41 volume-0000002d
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-032f0be8-ec6d-49be-ba44-4b455ad6d54c
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-57b5633f-d2e3-46dc-852a-c3685ca386c8
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-580ef03c-7ced-4b22-9803-0592ebb0c449
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-759e09fc-4f86-4648-a2ed-ab77fe53c4b7
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-a92be614-4805-41a0-b24d-2d2aee74aede
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-abb16cd5-700b-46ce-a4a1-1515dd83b4e4
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-d04bc03c-b095-478a-8b45-6257bed84afb
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-d70c9f6c-9883-4ba3-b029-f09fc6411906
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-e3427bc5-8f64-41ea-9b2d-96bf8b8a9abd
-rw-r--r-- 1 nova nova 214 12月 16 11:31 volume-f4227ba6-6719-4585-848e-68b2a65ae989

  这些配置文件内容都形如如下:

[iyunv@store3 ~]# cat /var/lib/nova/volumes/volume-00000006
<target iqn.2010-10.org.openstack:volume-00000006>
backing-store /dev/nova-volumes/volume-00000006
</target>
[iyunv@store3 ~]# cat /var/lib/nova/volumes/volume-032f0be8-ec6d-49be-ba44-4b455ad6d54c
<target iqn.2010-10.org.openstack:volume-032f0be8-ec6d-49be-ba44-4b455ad6d54c>
backing-store /dev/nova-volumes/volume-032f0be8-ec6d-49be-ba44-4b455ad6d54c
</target>

  这里最重要的就是这个backing-store配置,它告诉tgt创建iscsi target时把逻辑 LUN1映射到哪个后端的lvm逻辑卷,如果这个对应的lvm逻辑卷不存在的话就只会建立LUN0控制器了, 不会创建LUN1了。而这个lvm逻辑卷是在我们创建volume的时候同时创建的,nova-volume在升级时只会创建新旧的tgt配置文件,而lvm逻辑卷还是用的原来的形如 /dev/nova-volumes/volume-00000006而没有重命名,这样在folsom版中的nova-volume中可以正常使用旧的卷,但是如果从实例上卸载再想重新挂载的话估计也是不可能的。
而在迁移到cinder后就只生成新的tgt配置文件了,但是对应的lvm逻辑卷又没有重命名过来。于是就出现了以上问题。

解决办法
  这里我采用比较笨的办法,就是从nova数据库的block_device_mapping表中找出旧的volume-%08x到新的volume-uuid的映射,重命名旧的lvm中的对应的逻辑卷,然后通过horizon 重新挂载相关实例的卷(如果detach卷时报libvirtError: invalid argument: no target device vdc,先reboot下实例即可,detach完成后再reboot实例)。为此我写了个小脚本来帮助找到这种映射关系,并生成重命名lvm逻辑卷的脚本lvrename.sh和恢复脚本re-lvrename.sh。在各个存储节点运行lvrename.sh
然后在Horizon中重新挂载就好了。

[ugyn@ugyn-fedora fix-volume]$ cat volume.sh
#!/usr/bin/env bash
MYSQL_NOVA_HOST=10.61.2.12
MYSQL_NOVA_USER=nova
MYSQL_NOVA_PASSWORD=nova
mysql -h $MYSQL_NOVA_HOST -u $MYSQL_NOVA_USER -p$MYSQL_NOVA_PASSWORD nova \
-e "select volume_id, connection_info from block_device_mapping where deleted = 0" \
| awk '/volume-000000\w\w/ {match($0, /volume-000000\w\w/);print substr($0, RSTART, RLENGTH), "volume-" $1}' \
| sort -u \
| cat > volume-map
cat volume-map \
| awk '{print "lvrename nova-volumes " $0}' \
| cat > lvrename.sh
cat volume-map \
| awk '{print "lvrename nova-volumes " $2, $1}' \
| cat > re-lvrename.sh
chmod u+x *.sh

  遗憾的是CentOS6.2测试发现awk不识别/(volume-000000\w{2})/这个正则表达式,我是在F17运行并生成相关文件的。
把/(volume-000000\w{2})/改成/(volume-000000\w\w)/就能在CentOS下正常工作了。
  另外不知道awk有没有直接将前面过滤所用的正则表达式匹配的内容输出的方法???

  北方工业大学 |
云计算研究中心 | 姜永

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-162142-1-1.html 上篇帖子: Openstack Folsom KeyStone Install(版本日期2013.1) 下篇帖子: 为OpenStack制作自定义的镜像(centos/windows)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表