這篇文章主要介紹了OpenStack Cinder與各種后端存儲技術(shù)集成的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
公司主營業(yè)務(wù):網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出崇仁免費做網(wǎng)站回饋大家。
Cinder項目為管理塊設(shè)備而生,它最重要的地方就是如何做到和各種存儲后端的完美適配,用好后端存儲的功能。
1.LVM
開始OpenStack Cinder實踐之旅的入門存儲, cinder.conf 什么都不配,默認(rèn)就是使用LVM, LVM的原理

先把分區(qū)用pvcreate做成物理卷, 再把多個物理卷做成一個卷組,然后創(chuàng)建volume的時候就通過lvcreate分配lvm邏輯卷。
做部署時,用dd在當(dāng)前目錄創(chuàng)建一個設(shè)定大小(本例中為10G)的文件(cinder-volumes),然后通過losetup命令把他影射為loop device(虛擬快設(shè)備),然后基于這個快設(shè)備建立邏輯卷, 然后就是建立vg, 建立vg的時候可以一次包含多個pv,本例只使用了一個。
01.dd if=/dev/zero of=/vol/cinder-volumes bs=1 count= seek=10G
02.# Mount the file.
03.loopdev=`losetup -f`
04.losetup $loopdev /vol/cinder-volumes
05.# Initialize as a physical volume.
06.pvcreate $loopdev
07.# Create the volume group.
08.vgcreate cinder-volumes $loopdev
09.# Verify the volume has been created correctly.
10.pvscan
建立好volume group后,使用cinder.conf的初始配置即可
重啟cinder-volume服務(wù)
就可以進(jìn)行正常的volume創(chuàng)建,掛載,卸載等等操作了
question1:LVM如何實現(xiàn)掛載?
創(chuàng)建很簡單,通過lvcreate命令即可,掛載稍微復(fù)雜點, 先要把卷export為scsi存儲目標(biāo)設(shè)備(target,會有個lun ID), 然后通過linux scsi initiator軟件實現(xiàn)到目標(biāo)設(shè)備的連接,這里用到兩個軟件,scsi tagert管理軟件(這個里面有多種如Tgt,Lio,Iet,ISERTgt,默認(rèn)使用Tgt, 都是為裝有SCSI initiator的操作系統(tǒng)提供塊級scsi存儲)與linux scsi initiator,所以兩次操作分別對應(yīng)命令為tgtadm與iscsiadm。
要求:a) 計算節(jié)點所在的機(jī)器一定要有HBA卡(光纖網(wǎng)卡),
查看host上有無HBA卡方式:
一種方法:
1.$ lspci
2.20:00.0 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02)
3.20:00.1 Fibre Channel: Emulex Corporation Zephyr-X LightPulse Fibre Channel Host Adapter (rev 02
二種方法:
可以查看/sys/class/fc_host/
當(dāng)有兩塊光纖網(wǎng)卡,則有host1 與host2兩個目錄
1.$ cat /sys/class/fc_host/host1/port_name
2.0x10000090fa1b825a wwpn (作用如同MAC地址)
b) 網(wǎng)卡通過光纖線連接到后端存儲上, 以ibm的svc為例,必須保證連接上了,可以登錄svc圖形界面查看host是不是active的, 或者ssh登錄svc,運行命令
1.ww_2145:SVC:superuser>svcinfo lsfabric -delim ! -wwpn "10000090fa1b825a"
2.
3.10000090FA1B825A!0A0C00!3!node_165008!500507680130DBEA!2!0A0500!active!x3560m4-06MFZF1!!Host
這樣才能保證做卷的掛載與卸載時沒有問題
下面是實踐,以Storwize設(shè)備為例:
1.volume_driver = cinder.volume.drivers.storwize_svc.StorwizeSVCDriver
2.san_ip = 10.2.2.123
3.san_login = superuser
4.#san_pass<a href="
http://www.it165.net/edu/ebg/
" target="_blank" class="keylink">word</a> = passw0rd
5.san_private_key = /svc_rsa
6.storwize_svc_volpool_name = DS3524_DiskArray1
7.storwize_svc_connection_protocol = FC
san_password與san_private_key可以二選一,推薦san_private_key 方式,這個私鑰文件用ssh-keygen生成,生成好留下私鑰, 把公鑰放到san設(shè)備上,以后其他host也想連接此存儲設(shè)備時, 可直接使用此私鑰, 不需重復(fù)生成。
測試過程,建個volume
1.[root@localhost ~]# cinder create --display-name test55 1
2.[root@localhost ~]# nova volume-list
3.+--------------------------------------+-----------+--------------+------+-------------+-------------+
4.| ID | Status | Display Name | Size | Volume Type | Attached to |
5.+--------------------------------------+-----------+--------------+------+-------------+-------------+
6.| 24f7e457-f71a-43ce-9ca6-4454fbcfa31f | available | test55 | 1 | None | |
7.+--------------------------------------+-----------+--------------+------+-------------+-------------+
用以下instance來進(jìn)行attach掛載虛擬硬盤, 省了boot instance的過程~
01.[root@localhost ~]# nova list
02.+--------------------------------------+-----------+--------------+------+-------------+-------------+
03.| 77d7293f-7a20-4f36-ac86-95f4c24b29ae | test2 | ACTIVE | - | Running | net_local=10.0.1.5 |
04.+--------------------------------------+-------+--------+------------+-------------+--------------------+
05.[root@localhost ~]# nova volume-attach 77d7293f-7a20-4f36-ac86-95f4c24b29ae 24f7e457-f71a-43ce-9ca6-4454fbcfa31f
06.+----------+--------------------------------------+
07.| Property | Value |
08.+----------+--------------------------------------+
09.| device | /dev/vdb |
10.| id | 24f7e457-f71a-43ce-9ca6-4454fbcfa31f |
11.| serverId | 77d7293f-7a20-4f36-ac86-95f4c24b29ae |
12.| volumeId | 24f7e457-f71a-43ce-9ca6-4454fbcfa31f |
13.+----------+--------------------------------------+
14.[root@localhost ~]# cinder list
15.+--------------------------------------+-----------+--------------+------+-------------+----------+--------------------------------------+
16.| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
17.+--------------------------------------+-----------+--------------+------+-------------+----------+--------------------------------------+
18.| 24f7e457-f71a-43ce-9ca6-4454fbcfa31f | in-use | test55 | 1 | None | false | 77d7293f-7a20-4f36-ac86-95f4c24b29ae |
19.+--------------------------------------+-----------+--------------+------+-------------+-------------+
這個是通過TCP/IP 協(xié)議來連接存儲設(shè)備的,只需要保證存儲服務(wù)節(jié)點能夠ping通san ip和計算機(jī)點能ping存儲設(shè)備上的iSCSI node ip即可。
以ibm的svc或者v7000為例。
與FC部分配置唯一的不同就是
1.storwize_svc_connection_protocol = FC ==》 storwize_svc_connection_protocol = iSCSI
測試過程同上,一切ok
這個主要是使用vcenter來管理快存儲。cinder這個其實就是封裝了一層, 最終都是調(diào)用vcenter的存儲管理的功能。就像是一個中轉(zhuǎn)一樣,修改cinder.conf中如下配置項
1.volume_driver = cinder.volume.drivers.vmware.vmdk.VMwareVcVmdkDriver
2.vmware_host_ip = $VCENTER_HOST_IP
3.vmware_host_username = $VCENTER_HOST_USERNAME
4.vmware_host_password = $VCENTER_HOST_PASSWORD
5.vmware_wsdl_location = $WSDL_LOCATION
6.# VIM Service WSDL Location
7.# example, 'file:///home/SDK5.5/SDK/vsphere-ws/wsdl/vim25/vimService.wsdl
測試過程同2,一切即ok。
非常普遍的一種網(wǎng)絡(luò)文件系統(tǒng),原理可google,直接開始cinder中的實踐
第一步: 規(guī)劃好NFS存儲server端, 分別分布在那些節(jié)點,那些目錄,這里在兩個節(jié)點做規(guī)劃,作為nfs server端,10.11.0.16:/var/volume_share和10.11.1.178:/var/volume_share,在這兩臺機(jī)器上建好目錄/var/volume_share, 并export為nfs存儲,在兩個節(jié)點上啟動nfs服務(wù)
第二步:建立/etc/cinder/share.txt,內(nèi)容如下, 告知可以被mount的共享存儲
1.10.11.0.16:/var/volume_share
2.10.11.1.178:/var/volume_share
修改權(quán)限及用戶組
1.$ chmod 0640 /etc/cinder/share.txt
2.$ chown root:cinder /etc/cinder/share.txt
第三步:編輯/etc/cinder/cinder.conf
1.volume_driver=cinder.volume.drivers.nfs.NfsDriver
2.nfs_shares_config=/etc/cinder/shares.txt
3.nfs_mount_point_base=$state_path/mnt
重啟cinder-volume服務(wù),ok了,測試過程和2一樣。
有一次變更環(huán)境,voluem-attach報了錯:
01.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher connector)
02.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/nova/openstack/common/excutils.py", line 68, in __exit__
03.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb)
04.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/nova/virt/block_device.py", line 239, in attach
05.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher device_type=self['device_type'], encryption=encryption)
06.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 1263, in attach_volume
07.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher disk_dev)
08.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/nova/openstack/common/excutils.py", line 68, in __exit__
09.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb)
10.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/nova/virt/libvirt/driver.py", line 1250, in attach_volume
11.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher virt_dom.attachDeviceFlags(conf.to_xml(), flags)
12.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 179, in doit
13.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher result = proxy_call(self._autowrap, f, *args, **kwargs)
14.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 139, in proxy_call
15.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher rv = execute(f,*args,**kwargs)
16.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib/python2.6/site-packages/eventlet/tpool.py", line 77, in tworker
17.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher rv = meth(*args,**kwargs)
18.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher File "/usr/lib64/python2.6/site-packages/libvirt.py", line 419, in attachDeviceFlags
19.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher if ret == -1: raise libvirtError ('virDomainAttachDeviceFlags() failed', dom=self)
20.2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher libvirtError: internal error unable to execute QEMU command '__com.redhat_drive_add': Device 'drive-virtio-disk1' could not be initialized
這個錯來自libvirt,做以下設(shè)置即可,先察看virt_use_nfs是off還是on
1.$ /usr/sbin/getsebool virt_use_nfs
如果是off,做以下設(shè)置
1.$ /usr/sbin/setsebool -P virt_use_nfs on
寫這么多, 覺得這個是比較好的,難怪redhat會收購它, 有眼光啊,它為分布式文件系統(tǒng),可擴(kuò)展到幾個PB數(shù)量級的集群文件系統(tǒng)。可以把多個不同類型的存儲塊通過Infiniband RDMA或者TCP/IP匯聚成一個大的并行網(wǎng)絡(luò)文件系統(tǒng)。
簡單總結(jié)自己體會到的它的兩個特性
1.橫向擴(kuò)展能力強, 可以把不同節(jié)點的brick server組合起來,形成大的并行網(wǎng)絡(luò)文件系統(tǒng)
2.可以做軟RAID,通過條帶技術(shù)[stripe] 和鏡像卷[replica], 提高并發(fā)讀寫速度和容災(zāi)能力
下面提供一個cinder+glusterfs實踐全過程, 穿插敘述glusterfs的優(yōu)良特性的說明和使用
第一步:首先安裝部署好gluterfs server環(huán)境:
本例中使用10.11.0.16和10.11.1.178作為連個節(jié)點,首先要在它們上裝包
兩種方式:yum源 or RPM 包
1:yum -y install glusterfs glusterfs-fuse glusterfs-server
2:去以下網(wǎng)址下載包, 例如http://download.gluster.org/pub/gluster/glusterfs/3.5/3.5.0/RHEL/epel-6.5/x86_64/
glusterfs-3.5.0-2.el6.x86_64.rpm glusterfs-fuse-3.5.0-2.el6.x86_64.rpm glusterfs-server-3.5.0-2.el6.x86_64.rpm
glusterfs-cli-3.5.0-2.el6.x86_64.rpm glusterfs-libs-3.5.0-2.el6.x86_64.rpm
我下載了3.5版本的,利用rpm的方式安裝上。
裝好之后,規(guī)劃好多節(jié)點上的brick server,本例中將在10.11.1.178 和10.11.0.16上分別建立/var/data_cinder和/var/data_cinder2目錄,并在10.11.1.178上建立存儲集群cfs。
1.啟動10.11.1.178和10.11.0.16上的glusterd服務(wù)
[root@chen ~]# /etc/init.d/glusterd start
2.在10.11.1.178上察看存儲池狀態(tài)
1.[root@kvm-10-11-1-178 ~]# gluster peer probe 10.11.0.16
2.[root@kvm-10-11-1-178 ~]# gluster peer probe 10.11.1.178 #本地也可以不執(zhí)行
3.創(chuàng)建存儲集群
用法:$ gluster volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT>] [transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>?<vg_name>... [force]
stripe 條帶,類似做RAID0, 提高讀寫性能的,
replica 顧名思義,鏡像,類似于做RAID1, 數(shù)據(jù)會成鏡像的寫
stripe+ replica 可以做RAID10,此時stripe COUNT * replica COUNT =brick-server COUNT, 說多了,哈哈
1.[root@kvm-10-11--16 var]# mkdir data_cinder
2.[root@kvm-10-11--16 var]# mkdir data_cinder2
3.[root@kvm-10-11-1-178 var]# mkdir data_cinder
4.[root@kvm-10-11-1-178 var]# mkdir data_cinder2
5.[root@kvm-10-11-1-178 var]# gluster volume create cfs stripe 2 replica 2 10.11.0.16:/var/data_cinder210.11.1.178:/var/data_cinder 10.11.0.16:/var/data_cinder 10.11.1.178:/var/data_cinder2 force
6.volume create: cfs: success: please start the volume to access data
注意:不要 gluster volume create cfs stripe 2 replica 2 10.11.0.16:/var/data_cinder2 10.11.0.16:/var/data_cinder 10.11.1.178:/var/data_cinder 10.11.1.178:/var/data_cinder2 force, 因為前兩個是做RAID1, 在同一個節(jié)點上就起不到容災(zāi)能力了。
4. start 存儲集群
用法:$ gluster volume start <NEW-VOLNAME>
01.[root@kvm-10-11-1-178 var]# gluster volume start cfs
02.volume start: cfs: success
03.[root@kvm-10-11-1-178 ~]# gluster volume info all
04.Volume Name: cfs
05.Type: Striped-Replicate
06.Volume ID: ac614af9-11b8-4ff3-98e6-fe8c3a2568b6
07.Status: Started
08.Number of Bricks: 1 x 2 x 2 = 4
09.Transport-type: tcp
10.Bricks:
11.Brick1: 10.11.0.16:/var/data_cinder2
12.Brick2: 10.11.1.178:/var/data_cinder
13.Brick3: 10.11.0.16:/var/data_cinder
14.Brick4: 10.11.1.178:/var/data_cinder2
第二步:client端,也就是cinder-volume service所在的節(jié)點,這端除了glusterfs-server包不用裝,其他都要裝上,這端就和nfs那些一樣了,保證服務(wù)啟動時會做好mount。
建立/etc/cinder/share.conf,內(nèi)容如下, 告知可以被mount的集群存儲
1.10.11.1.178:/cfs
修改權(quán)限及用戶組
1.$ chmod 0640 /etc/cinder/share.conf
2.$ chown root:cinder /etc/cinder/share.conf
cinder.conf 配置
1.glusterfs_shares_config = /etc/cinder/shares.conf
2.glusterfs_mount_point_base = /var/lib/cinder/volumes
3.volume_driver=cinder.volume.drivers.glusterfs.GlusterfsDriver
1.[root@chen ~]# for i in api scheduler volume; do sudo service openstack-cinder-${i} restart; done
1.[root@chen ~]# cinder create --display-name chenxiao-glusterfs 1
2.[root@chen ~]# cinder list
3.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
4.| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
5.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
6.| 866f7084-c624-4c11-a592-8c00fcabfb23 | available | chenxiao-glusterfs | 1 | None | false | |
7.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
每個brick server上都有此存儲數(shù)據(jù)的分布, 都為512M, 只有1/2G 是因為做個RAID0, 分布在四處,總共有2G,是因為做了RAID1,以其中一個為例:
1.[root@kvm-10-11-1-178 data_cinder]# ls -al
2.總用量 20
3.drwxrwxr-x 3 root cinder 4096 6月 18 20:43 .
4.drwxr-xr-x. 27 root root 4096 6月 18 10:24 ..
5.drw------- 240 root root 4096 6月 18 20:39 .glusterfs
6.-rw-rw-rw- 2 root root 536870912 6月 18 20:39 volume-866f7084-c624-4c11-a592-8c00fcabfb23
boot個instance, 進(jìn)行attach操作。
01.[root@chen data_cinder]# nova volume-attach f5b7527e-2ab8-424c-9842-653bd73e8f26 866f7084-c624-4c11-a592-8c00fcabfb23
02.+----------+--------------------------------------+
03.| Property | Value |
04.+----------+--------------------------------------+
05.| device | /dev/vdd |
06.| id | 866f7084-c624-4c11-a592-8c00fcabfb23 |
07.| serverId | f5b7527e-2ab8-424c-9842-653bd73e8f26 |
08.| volumeId | 866f7084-c624-4c11-a592-8c00fcabfb23 |
09.+----------+--------------------------------------+
1.[root@chen data_cinder]# cinder list
2.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
3.| ID | Status | Display Name | Size | Volume Type | Bootable | Attached to |
4.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
5.| 866f7084-c624-4c11-a592-8c00fcabfb23 | in-use | chenxiao-glusterfs | 1 | None | false | f5b7527e-2ab8-424c-9842-653bd73e8f26 |
6.+--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“OpenStack Cinder與各種后端存儲技術(shù)集成的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
文章題目:OpenStackCinder與各種后端存儲技術(shù)集成的示例分析
文章起源:http://www.chinadenli.net/article30/piicso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、響應(yīng)式網(wǎng)站、網(wǎng)站排名、網(wǎng)站維護(hù)、企業(yè)建站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)