前言
在以往搭建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配置
在有文檔的情況下,當然要跟着文檔走,官網上已經要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就可以用了~
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.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後端有關。。。