在以往搭建openstack块存储cinder组件与fc存储对接时,我常采用了节点挂载fc盘,然后再以lvm、filesystem或ceph osd的方式来对接cinder,但这样有着不可避免的性能损耗,其实Openstack中已经集成主流存储厂家的FCDriver,可以让cinder与存储底层对接,得到更高以及稳定的性能表现。
此文介绍了在Mitaka版本对接华为OceanStor 5800V3的配置步骤以及踩过坑~
首发:blog.bobozhu.cn
华为OceanStor V3 Fcsan存储,光纤交换机。
带HBA的服务器
存储上配置管理ip,建好所需要对接的pool,注意只需要池,其他的主机组、LUN组,添加主机什么的都不要,只要池。
光纤交换机做好zone,确保每台主机都和存储都能连接。
一套openstack平台,可以不装multipath。
在有文档的情况下,当然要跟着文档走,官网上已经要cinder对接HUAWEI V3的doc,但是版本比较老才到liberty,V3的diver还是用HuaweiV3FCDriver,登录到github下载最新华为openstack_cinder_driver配置文档 ,可以看到已经对应到了newton版,而且V3的driver已经改成了HuaweiFCDriver。
在/etc/cinder目录创建存储配置文件,格式为XML,名字随便设,如cinder_huawei_conf.xml
<?xml version=‘1.0‘ encoding=‘UTF-8‘?> <config> <Storage> <Product>V3</Product> <Protocol>FC</Protocol> <RestURL>https://x.x.x.x:8088/deviceManager/rest/</RestURL> <UserName>xxx</UserName> <UserPassword>xxx</UserPassword> </Storage> <LUN> <LUNType>xxx</LUNType> <WriteType>xxx</WriteType> <MirrorSwitch>xxx</MirrorSwitch> <LUNcopyWaitInterval>xxx</LUNcopyWaitInterval> <Timeout>432000</Timeout> <StoragePool>xxx;xxx;xxx</StoragePool> </LUN> <Host OSType="Linux" HostIP="x.x.x.x, x.x.x.x" /> </config>
注意:
这里面有几个强制参数,Product、Protocol、RestURL,Username、Userpassword、StoragePool,产品和协议当然就是V3和FC了,resturl是华为开放的restful链接,基本上就是上面的x.x.x改成管理ip即可,注意大小写,正常在浏览器打开会返回timeout。用户名密码华为默认是admin,Huawei12#$(通用密码)。StoragePool可以建多个,通过分号隔开,但这样的多个池就在一个cinder后端了。HostIP为nova-compute对应的IP。
注意此配置文件权限要为cinder.cinder,但是在实际docker容器中为root好像也没关系。。。
在cinder.conf中添加
[V3_FC] volume_driver = cinder.volume.drivers.huawei.huawei_driver.HuaweiFCDriver cinder_huawei_conf_file = /etc/cinder/cinder_huawei_conf.xml volume_backend_name = V3_FC ##在default段中,添加参数 [DEFAULT] ... enabled_backends=V3_FC
到此,重启cinder-volume服务,使用cinder service-list命令查看到V3_FC状态为up就可以用了~
在生产环境中可能有多套存储对接,如ceph加FCSan、或者多个FCsan池。
Ceph加FCSan就很简单,只需要在cinder.conf中的backends参数添加名字和添加存储部分即可,如添加ceph的后端
[DEFAULT] ... enabled_backends=V3_FC,rbd-1 [rbd-1] rbd_ceph_conf = /etc/ceph/ceph.conf rbd_pool = volumes volume_backend_name = rbd-1 volume_driver = cinder.volume.drivers.rbd.RBDDriver
再多加FCSan,重复上面的对接FCsan步骤即可。
要注意,在有多个cinder后端时要创建卷类型并关联后端,这样在创建卷的时候就可以选择自己想要的池。
#> cinder type-create FC_V3 #> cinder type-key FC_V3 set volume_backend_name=V3_FC #> cinder type-create rbd1 #> cinder type-key rbd1 set volume_backend_name=rbd-1
到此,重启cinder服务就可以创建卷啦~
#> cinder create-volume --volume-type V3_FC --display_name FC_VOLUME 10
TIP: 踩过的坑
在配置完cinder对接之后,重启cinder服务总是报失败,日志中有认证失败的400的报错“[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed”,这是由于本机没有存储的ca证书导致,可以通过手动下载然后再rest_client.py中指定路径,也可以使用stackflow中所说的禁忌大法,直接去除ssl验证,我觉得可行~~
打开/usr/lib/python2.7/site-packages/cinder/volume/drivers/huawei/rest_client.py,添加 import ssl ssl._create_default_https_context = ssl._create_unverified_context
在对接成功后,创建了云硬盘,但在attach给虚拟机的时候报错”No FC initiator can be added to host”,当时找华为的人半天也说不清楚,问云的就说还没测试过mitaka版。。查了下fujitsu的存储配置文档才知道,存储对接是只需要创建pool,其他的都不要创建,看下华为存储,发现华为的人什么主机组,lun mapping都帮我们建好了。。
最后,还有一个遗留问题,在glance对接cinder的时候,上传镜像会报“ ‘NoneType’ object has no attribute ‘Client’”,看了下代码是在import 某个client V3的时候失败了,时间有限还没来及看。。忘了是哪个client了,也不知道是不是跟多cinder后端有关。。。
本文出自 “DanielQu” 博客,请务必保留此出处http://qujunorz.blog.51cto.com/6378776/1893673
Openstack之cinder对接华为FCV3存储及cinder多后端
原文:http://qujunorz.blog.51cto.com/6378776/1893673