OpenStack Cinder 与各种后端存储技术的集成叙述与实践

先说下下loop设备

loop设备及losetup命令介绍

1. loop设备介绍

在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备。它能使我们像块设备一样访问一个文件。
在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统,那么这个文件就可以像一个磁盘设备一样被 mount 起来。
    上面说的文件格式,我们经常见到的是 CD 或 DVD 的 ISO 光盘镜像文件或者是软盘(硬盘)的 *.img 镜像文件。通过这种 loop mount (回环mount)的方式,这些镜像文件就可以被 mount 到当前文件系统的一个目录下。
    至此,顺便可以再理解一下 loop 之含义:对于第一层文件系统,它直接安装在我们计算机的物理设备之上;而对于这种被 mount 起来的镜像文件(它也包含有文件系统),它是建立在第一层文件系统之上,这样看来,它就像是在第一层文件系统之上再绕了一圈的文件系统,所以称为 loop。

2. losetup命令

losetup [ -e encryption ] [ -o offset ] loop_device file
    losetup [ -d ] loop_device

说明
此命令用来设置循环设备。循环设备可把文件虚拟成块设备,籍此来模拟整个文件系统,让用户得以将其视为硬盘驱动器,光驱或软驱等设备,并挂入当作目录来使用。
上面,命令格式中的选项与参数名:
-e 表示加密的方式
-o 设置数据偏移量
-d 卸载设备
loop_device 循环设备名,在 linux 下如 /dev/loop0 , /dev/loop1 等。

file 要与循环设备相关联的文件名,这个往往是一个磁盘镜象文件,如 *.img

3. 使用举例

(1)创建空的磁盘镜像文件,这里创建一个1.44M的软盘

$ dd if=/dev/zero of=floppy.img bs=512 count=2880

(2)使用 losetup将磁盘镜像文件虚拟成快设备

$ losetup /dev/loop1 floppy.img

(3)挂载块设备

$ mount /dev/loop0 /tmp

经过上面的三步之后,我们就可以通过/tmp目录,像访问真实快设备一样来访问磁盘镜像文件floppy.img。

(4) 卸载loop设备

$ umount /tmp

$ losetup -d /dev/loop1

Cinder项目为管理快设备而生,它最重要的地方就是如何做到和各种存储后端就到完美适配,用好后端存储的功能,本文为Cinder 多种后端存储(LVM, FC+SAN, iSCSI+SAN, NFS, VMWARE, Glusterfs)的场景总结, 以防自己将来忘记,欢迎交流, 共同成长

1.LVM

开始OpenStack Cinder实践之旅的入门存储, cinder.conf 什么都不配,默认就是使用LVM, LVM的原理

先把分区用pvcreate做成物理卷, 再把多个物理卷做成一个卷组,然后创建volume的时候就通过lvcreate分配lvm逻辑卷。

做部署时,用dd在当前目录创建一个设定大小(本例中为10G)的文件(cinder-volumes),然后通过losetup命令把他影射为loop device(虚拟快设备),然后基于这个快设备建立逻辑卷, 然后就是建立vg, 建立vg的时候可以一次包含多个pv,本例只使用了一个。

[html] view plaincopy

  1. dd if=/dev/zero of=/vol/cinder-volumes bs=1 count=0 seek=10G
  2. # Mount the file.
  3. loopdev=`losetup -f`
  4. losetup $loopdev /vol/cinder-volumes
  5. # Initialize as a physical volume.
  6. pvcreate $loopdev
  7. # Create the volume group.
  8. vgcreate cinder-volumes $loopdev
  9. # Verify the volume has been created correctly.
  10. pvscan

如果要扩充 cinder-volumes的容量,可以借用loop 设备

    • # dd if=/dev/zero of=/var/lib/cinder/cinder-volumes1 bs=1k count=500000000  #500G
    • # losetup -f  (查找一个没有使用的loop device,笔者这里使用/dev/oop2)
    • # losetup /dev/loop2 /var/lib/cinder/cinder-volumes1
    • # pvcreate /dev/loop2
    • # vgextend cinder-volumes /dev/loop2

建立好volume group后,使用cinder.conf的初始配置即可,  注意多节点时要配置好iscsi_ip_address为提供存储服务节点的管理ip

重启cinder-volume服务

就可以进行正常的volume创建,挂载,卸载等等操作了

question1:LVM如何实现挂载?

创建很简单,通过lvcreate命令即可,挂载稍微复杂点, 先要把卷export为scsi存储目标设备(target,会有个lun ID),  然后通过linux scsi initiator软件实现到目标设备的连接,这里用到两个软件,scsi tagert管理软件(这个里面有多种如Tgt,Lio,Iet,ISERTgt,默认使用Tgt, 都是为装有SCSI initiator的操作系统提供块级scsi存储)与linux scsi initiator,所以两次操作分别对应命令为tgtadm与iscsiadm。

2. FC(Fibre Channel) +SAN 设备

要求:a) 计算节点所在的机器一定要有HBA卡(光纤网卡),
                    查看host上有无HBA卡方式:

一种方法:

[html] view plaincopy

  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/

当有两块光纤网卡,则有host1 与host2两个目录

[html] view plaincopy

  1. $ cat /sys/class/fc_host/host1/port_name
  2. 0x10000090fa1b825a wwpn (作用如同MAC地址)

b) 网卡通过光纤线连接到后端存储上, 以ibm的svc为例,必须保证连接上了,可以登录svc图形界面查看host是不是active的, 或者ssh登录svc,运行命令

[html] view plaincopy

  1. ww_2145:SVC:superuser>svcinfo lsfabric -delim ! -wwpn "10000090fa1b825a"
  2. 10000090FA1B825A!0A0C00!3!node_165008!500507680130DBEA!2!0A0500!active!x3560m4-06MFZF1!!Host

这样才能保证做卷的挂载与卸载时没有问题
下面是实践,以Storwize设备为例:

[html] view plaincopy

  1. volume_driver = cinder.volume.drivers.storwize_svc.StorwizeSVCDriver
  2. san_ip = 10.2.2.123
  3. san_login = superuser
  4. #san_password = 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设备上,以后其他host也想连接此存储设备时, 可直接使用此私钥, 不需重复生成。

测试过程,建个volume

[html] view plaincopy

  1. [[email protected] ~]#  cinder create --display-name test55 1
  2. [[email protected] ~]#  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来进行attach挂载虚拟硬盘, 省了boot instance的过程~

[html] view plaincopy

  1. [[email protected] ~]#  nova list
  2. +--------------------------------------+-----------+--------------+------+-------------+-------------+
  3. | 77d7293f-7a20-4f36-ac86-95f4c24b29ae | test2 | ACTIVE | -          | Running     | net_local=10.0.1.5 |
  4. +--------------------------------------+-------+--------+------------+-------------+--------------------+
  5. [[email protected] ~]# nova volume-attach 77d7293f-7a20-4f36-ac86-95f4c24b29ae 24f7e457-f71a-43ce-9ca6-4454fbcfa31f
  6. +----------+--------------------------------------+
  7. | Property | Value                                |
  8. +----------+--------------------------------------+
  9. | 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. [[email protected] ~]# 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. +--------------------------------------+-----------+--------------+------+-------------+-------------+

3. iSCSI+SAN 设备

这个是通过TCP/IP 协议来连接存储设备的,只需要保证存储服务节点能够ping通san ip和计算机点能ping存储设备上的iSCSI node ip即可。

以ibm的svc或者v7000为例。
   与FC部分配置唯一的不同就是

[html] view plaincopy

  1. storwize_svc_connection_protocol = FC ==》 storwize_svc_connection_protocol = iSCSI

测试过程同上,一切ok

4. 使用VMWARE

这个主要是使用vcenter来管理快存储。cinder这个其实就是封装了一层, 最终都是调用vcenter的存储管理的功能。就像是一个中转一样,修改cinder.conf中如下配置项

[html] view plaincopy

  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。

5.NFS

非常普遍的一种网络文件系统,原理可google,直接开始cinder中的实践

第一步: 规划好NFS存储server端, 分别分布在那些节点,那些目录,这里在两个节点做规划,作为nfs server端,10.11.0.16:/var/volume_share和10.11.1.178:/var/volume_share,在这两台机器上建好目录/var/volume_share, 并export为nfs存储,在两个节点上启动nfs服务

第二步:建立/etc/cinder/share.txt,内容如下, 告知可以被mount的共享存储

[html] view plaincopy

  1. 10.11.0.16:/var/volume_share
  2. 10.11.1.178:/var/volume_share

修改权限及用户组

[html] view plaincopy

  1. $ chmod 0640 /etc/cinder/share.txt
  2. $ chown root:cinder /etc/cinder/share.txt

第三步:编辑/etc/cinder/cinder.conf

[html] view plaincopy

  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服务,ok了,测试过程和2一样。

有一次变更环境,voluem-attach报了错:

[html] view plaincopy

  1. 2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher     connector)
  2. 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__
  3. 2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher     six.reraise(self.type_, self.value, self.tb)
  4. 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
  5. 2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher     device_type=self[‘device_type‘], encryption=encryption)
  6. 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
  7. 2014-06-12 11:41:58.659 19312 TRACE oslo.messaging.rpc.dispatcher     disk_dev)
  8. 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__
  9. 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,做以下设置即可,先察看virt_use_nfs是off还是on

[html] view plaincopy

  1. $ /usr/sbin/getsebool virt_use_nfs

如果是off,做以下设置

[html] view plaincopy

  1. $ /usr/sbin/setsebool -P virt_use_nfs on

6.GlusterFS

写这么多, 觉得这个是比较好的,难怪redhat会收购它, 有眼光啊,它为分布式文件系统,可扩展到几个PB数量级的集群文件系统。可以把多个不同类型的存储块通过Infiniband RDMA或者TCP/IP汇聚成一个大的并行网络文件系统。

简单总结自己体会到的它的两个特性
           1.横向扩展能力强, 可以把不同节点的brick server组合起来,形成大的并行网络文件系统
           2.可以做软RAID,通过条带技术[stripe] 和镜像卷[replica], 提高并发读写速度和容灾能力

下面提供一个cinder+glusterfs实践全过程, 穿插叙述glusterfs的优良特性的说明和使用

第一步:首先安装部署好gluterfs server环境:

本例中使用10.11.0.16和10.11.1.178作为连个节点,首先要在它们上装包

两种方式:yum源 or RPM 包

1:yum -y install glusterfs glusterfs-fuse glusterfs-server
            2:去以下网址下载包, 例如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的方式安装上。

装好之后,规划好多节点上的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服务

[[email protected] ~]# /etc/init.d/glusterd start

2.在10.11.1.178上察看存储池状态

[html] view plaincopy

  1. [[email protected] ~]# gluster peer probe 10.11.0.16
  2. [[email protected] ~]# gluster peer probe 10.11.1.178 #本地也可以不执行

3.创建存储集群
      用法:$ gluster volume create <NEW-VOLNAME> [stripe <COUNT>] [replica <COUNT>] [transport <tcp|rdma|tcp,rdma>] <NEW-BRICK>?<vg_name>... [force]
      stripe 条带,类似做RAID0, 提高读写性能的,
      replica 顾名思义,镜像,类似于做RAID1, 数据会成镜像的写

stripe+ replica 可以做RAID10,此时stripe COUNT * replica  COUNT =brick-server  COUNT, 说多了,哈哈

[html] view plaincopy

  1. [[email protected] var]# mkdir data_cinder
  2. [[email protected] var]# mkdir data_cinder2
  3. [[email protected] var]# mkdir data_cinder
  4. [[email protected] var]# mkdir data_cinder2
  5. [[email protected] var]# gluster volume create cfs stripe 2 replica 2 10.11.0.16:/var/data_cinder2 10.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, 在同一个节点上就起不到容灾能力了。

4. start 存储集群 
用法:$ gluster  volume start <NEW-VOLNAME>

[html] view plaincopy

  1. [[email protected] var]# gluster volume start cfs
  2. volume start: cfs: success
  3. [[email protected] ~]# gluster volume info all
  4. Volume Name: cfs
  5. Type: Striped-Replicate
  6. Volume ID: ac614af9-11b8-4ff3-98e6-fe8c3a2568b6
  7. Status: Started
  8. Number of Bricks: 1 x 2 x 2 = 4
  9. 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所在的节点,这端除了glusterfs-server包不用装,其他都要装上,这端就和nfs那些一样了,保证服务启动时会做好mount。

建立/etc/cinder/share.conf,内容如下, 告知可以被mount的集群存储

[html] view plaincopy

  1. 10.11.1.178:/cfs

修改权限及用户组

[html] view plaincopy

  1. $ chmod 0640 /etc/cinder/share.conf
  2. $ chown root:cinder /etc/cinder/share.conf

cinder.conf 配置

[html] view plaincopy

  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

[html] view plaincopy

  1. [[email protected] ~]# for i in api scheduler volume; do sudo service openstack-cinder-${i} restart; done

[html] view plaincopy

  1. [[email protected] ~]# cinder create --display-name  chenxiao-glusterfs 1
  2. [[email protected] ~]# 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上都有此存储数据的分布, 都为512M, 只有1/2G 是因为做个RAID0, 分布在四处,总共有2G,是因为做了RAID1,以其中一个为例:

[html] view plaincopy

  1. [[email protected] 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, 进行attach操作。

[html] view plaincopy

  1. [[email protected] data_cinder]# nova volume-attach f5b7527e-2ab8-424c-9842-653bd73e8f26 866f7084-c624-4c11-a592-8c00fcabfb23
  2. +----------+--------------------------------------+
  3. | Property | Value                                |
  4. +----------+--------------------------------------+
  5. | device   | /dev/vdd                             |
  6. | id       | 866f7084-c624-4c11-a592-8c00fcabfb23 |
  7. | serverId | f5b7527e-2ab8-424c-9842-653bd73e8f26 |
  8. | volumeId | 866f7084-c624-4c11-a592-8c00fcabfb23 |
  9. +----------+--------------------------------------+

[html] view plaincopy

  1. [[email protected] 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. +--------------------------------------+----------------+--------------------+------+-------------+----------+--------------------------------------+

原文http://blog.csdn.net/juvxiao/article/details/32315299

时间: 2024-12-21 05:14:51

OpenStack Cinder 与各种后端存储技术的集成叙述与实践的相关文章

openstack swift做glance后端存储

在controller里操作 vim /etc/glance/glance-api.conf [glance_store] default_store = swift          默认为file 改为swift stores = file, http                默认不用动 swift_store_auth_version = 2        默认版本为2 stores=glance.store.swift.Store,glance.store.filesystem.S

openstack中nfs最为nova的后端存储

运行一个可用的nfs服务: [[email protected] ~]# showmount -e 192.168.100.10Export list for controller:/nfs *查看openstack当前nova的后端存储位置:我修改了默认云主机存储路径 [[email protected] ~]# cat /etc/nova/nova.conf | grep instances_path | grep -v "#"instances_path=/data/nova/i

Openstack存储总结之:详解如何使用NFS作为Cinder的后端存储

NFS服务简单描述 NFS是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操 作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法. NFS的基本原则是"容许不同的客户端及服务端通过一组RPC分享相同的文件系统",它是独立于操作系统,容许不同硬件及操作系统的系统共同进行文件的分享. NFS

使用Ceph作为OpenStack的后端存储

概述 libvirt配置了librbd的QEMU接口,通过它可以在OpenStack中使用Ceph块存储.Ceph块存储是集群对象,这意味着它比独立的服务器有更好的性能. 在OpenStack中使用Ceph块设备,必须首先安装QEMU,libvirt和OpenStack,下图描述了 OpenStack和Ceph技术层次结构: http://my.oschina.net/JerryBaby/blog/376580 我翻译的官方文档,仅供参考 ^ ^. 系统规划 OpenStack集群: 控制节点:

【恒天云技术分享系列10】OpenStack块存储技术

原文:http://www.hengtianyun.com/download-show-id-101.html 块存储,简单来说就是提供了块设备存储的接口.用户需要把块存储卷附加到虚拟机(或者裸机)上后才可以与其交互.这些卷都是持久的,它们可以被从运行实例上解除或者重新附加而数据保持完整不变.OpenStack 中的实例是不能持久化的,需要挂载 volume,在 volume 中实现持久化.Cinder 就是提供对 volume 实际需要的存储块单元的实现管理功能. 1.单机块存储 1.1 LV

配置NFS网络存储作为cinder的后端存储

安装cinder和nfs yum install -y openstack-cinder yum install cifs-utils 在controller节点配置nfs [[email protected] ~]# mkdir -p /data/nfs #创建一个共享挂载资源的目录 [[email protected] ~]# cat /etc/exports /data/nfs *(rw,sync,root_squash) #NFS服务程序的配置文件为/etc/exports sync 同

openstack——cinder服务篇

一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系统:或者直接使用裸硬盘存储数据(数据库) 通过 NFS.CIFS 等 协议,mount 远程的文件系统 第一种裸硬盘的方式叫做 Block Storage(块存储),每个裸硬盘通常也称作 Volume(卷) 第二种叫做文件系统存储.NAS 和 NFS 服务器,以及各种分布式文件系统提供的都是这种存储.

有Ceph、GlusterFS等分布式存储的实际开发和应用经验,Openstack Cinder框架、容器卷管理方案如Flocker

岗位职责:参与构建云存储服务,包括开发.设计和运维工作?. 任职要求:1.本科及以上,3年以上存储系开发.设计或运维工作经验:2.熟练操作Linux系统并对内核比较了解:对云计算.虚拟化有所了解:3.有Ceph.GlusterFS等分布式存储的实际开发和应用经验:4.至少精通JAVA.Python.Ruby.C/C++.Go等语言之一,具备较强的开发能力和技巧:5.有参与过云平台或大型互联网系统底层平台开发设计者优先:参与过开源代码项目贡献的优先:6.喜欢钻研技术,想从事云计算的开发设计和运维工

配置cinder-backup服务使用ceph作为后端存储

在ceph监视器上执行 CINDER_PASSWD='cinder1234!' controllerHost='controller' RABBIT_PASSWD='0penstackRMQ' 1.创建pool池 为cinder-backup服务创建pool池(因为我只有一个OSD节点,所以要将副本数设置为1) ceph osd pool create cinder-backup 32 ceph osd pool set cinder-backup size 1 ceph osd pool ap