openstack的Cinder接入FC SAN存储的一些疑问?
Cinder有统一管理各种FC SAN存储的能力。
比如在open stack比较活跃的存储厂商,Netapp,EMC,HP,IBM和华为,都开发了各自的驱动,支持对接到Openstack。
Cinder默认是给VM提供块存储的, 但是能不能用Cinder直接给物理机提供块存储,直接在Linux物理机上,提供一个mount point,使用LVM给物理机挂载由Cinder管理的FC块存储。
所以有很多疑问,具体如下:
fc_fabric_address = <> (String) Management IP of fabric.
fc_fabric_password = <> (String) Password for user.
fc_fabric_port = 22 (Port(min=0, max=65535)) Connecting port
fc_fabric_ssh_cert_path = <> (String) Local SSH certificate Path.
fc_fabric_user = <> (String) Fabric user ID.
fc_southbound_protocol = REST_HTTP
fc_virtual_fabric_id = None (String) Virtual Fabric ID.
zone_activate = True (Boolean) Overridden zoning activation state.
zone_name_prefix = openstack (String) Overridden zone name prefix.
zoning_policy = initiator-target (String) Overridden zoning policy.
Openstack之Cinder对接华为FCV3存储及cinder多后端
在以往搭建openstack块存储cinder组件与fc存储对接时,我常采用了节点挂载fc盘,然后再以lvm、filesystem或ceph osd的方式来对接cinder,但这样有着不可避免的性能损耗,其实Openstack中已经集成主流存储厂家的FCDriver,可以让cinder与存储底层对接,得到更高以及稳定的性能表现。 此文介绍了在Mitaka版本对接华为OceanStor 5800V3的配置步骤以及踩过坑。
环境准备
硬件环境
1、华为OceanStor V3 Fcsan存储,光纤交换机。
2、带HBA的服务器
软件环境
1、存储上配置管理ip,建好所需要对接的pool,注意只需要池,其他的主机组、LUN组,添加主机什么的都不要,只要池。
2、光纤交换机做好zone,确保每台主机都和存储都能连接。
3、一套openstack平台,可以不装multipath。
Cinder配置
在有文档的情况下,当然要跟着文档走,官网上已经要cinder对接HUAWEI V3的doc,但是版本比较老才到liberty,V3的diver还是用HuaweiV3FCDriver,登录到github下载最新华为openstackcinderdriver配置文档 ,可以看到已经对应到了newton版,而且V3的driver已经改成了HuaweiFCDriver。
在/etc/cinder目录创建存储配置文件,格式为XML,名字随便设,如cinderhuaweiconf.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.HuaweiFCDrivercinder_huawei_conf_file = /etc/cinder/cinder_huawei_conf.xmlvolume_backend_name = V3_FC##在default段中,添加参数[DEFAULT]...enabled_backends=V3_FC
到此,重启cinder-volume服务,使用cinder service-list命令查看到V3_FC状态为up就可以用了~
cinder多后端开启
在生产环境中可能有多套存储对接,如ceph加FCSan、或者多个FCsan池。
Ceph加FCSan就很简单,只需要在cinder.conf中的backends参数添加名字和添加存储部分即可,如添加ceph的后端
[DEFAULT]...enabled_backends=V3_FC,rbd-1[rbd-1]rbd_ceph_conf = /etc/ceph/ceph.confrbd_pool = volumesvolume_backend_name = rbd-1volume_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: CERTIFICATEVERIFYFAILED] certificate verify failed”,这是由于本机没有存储的ca证书导致,可以通过手动下载然后再rest_client.py中指定路径,也可以使用stackflow中所说的禁忌大法,直接去除ssl验证,我觉得可行~~
打开/usr/lib/python2.7/site-packages/cinder/volume/drivers/huawei/rest_client.py,添加import sslssl._create_default_https_context = ssl._create_unverified_context
在对接成功后,创建了云硬盘,但在attach给虚拟机的时候报错”No FC initiator can be added to host”,当时找华为的人半天也说不清楚,问云的就说还没测试过mitaka版。。查了下fujitsu的存储配置文档才知道,存储对接是只需要创建pool,其他的都不要创建,看下华为存储,发现华为的人什么主机组,lun mapping都帮我们建好了。
收起[fc-zone-manager]
enable_unsupported_driver=False
fc_fabric_names=fabric1,fabric2
fc_san_lookup_service=cinder.zonemanager.drivers.brocade.brcd_fc_san_lookup_service.BrcdFCSanLookupService
zone_driver=cinder.zonemanager.drivers.brocade.brcd_fc_zone_driver.BrcdFCZoneDriver
zoning_policy=initiator-target
fc_fabric_address=fabric1_ip,fabric2_ip
fc_fabric_password=fabric1_password,fabric2_password
fc_fabric_port=22
fc_fabric_user=fabric1_user,fabric2_user
fc_southbound_protocol=REST_HTTP
fc_virtual_fabric_id=None
zone_activate=True
zone_name_prefix=openstack
zoning_policy=initiator-target