块设备(rbd)
    1、块设备可以应用为:
        1、作为额外的磁盘使用
        2、可以作为裸设备使用
        3、可以格式化成文件系统,然后挂载给虚拟机或者物理服务器使用
    
    2、创建块设备(可以在任意一台ceph节点上创建)
    下面的命令创建一个名为ceph-client1-rbd1、大小为10G的RBD设备
    [root@ceph-node1 ~]# rbd create ceph-client1-rbd1 --size 10240
    注意:默认情况下rbd镜像会保存在ceph集群的rbd池中,可以使用-p参数改变池
    
    3、列出rbd设备镜像(可在任意一台节点上列出)
    [root@ceph-node3 ~]# rbd ls
    ceph-client1-rbd1

    
    4、查看创建后的块设备的信息(可以在任意一台ceph节点上查看)
    [root@ceph-node1 ~]# rbd --image ceph-client1-rbd1 info
    rbd image 'ceph-client1-rbd1':
    size 10240 MB in 2560 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.857a238e1f29
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    flags: 

    5、创建ceph客户端
    安装一台虚拟机或者用一台物理机来作为cpeh客户端进行测试,操作系统需要是linux(我的环境是centos7)
    
    需要注意:
        1、linux内核从2.6.32版本开始支持ceph
        2、建议使用2.6.34以及以上的内核版本
    
    查看内核版本命令:uname -rbd
    检查是否支持rbd命令: modprobe rbd
    
    安装完客户端的操作系统之后,记得将ceph集群的IP地址和主机名添加到hosts文件中:
    192.168.89.101 ceph-node1
    192.168.89.102 ceph-node2
    192.168.89.103 ceph-node3
    192.168.89.139 ceph-client1

    
    6、映射rados块设备给客户端
        在映射之前,需要授权给客户端访问ceph集群的权限,需要下面两个步骤,添加秘钥环(客户端与ceph集群之间的身份验证就是基于这个秘钥环)和添加ceph配置文件
    
        1、在管理节点(ceph-deploy)上通过ceph-deploy工具给ceph-client1安装ceph包
        deploy install ceph-client1-rbd1
        
        2、在管理节点上(ceph-deploy)上通过ceph-deploy工具给ceph-client1客户端下发秘钥环和ceph配置文件
        用于授予客户端访问ceph集群的权限
        ceph-deploy admin ceph-client1
        
        3、登录ceph-client1客户端检查秘钥文件和配置文件是否下发成功
        进入/ect/ceph/目录
        [root@ceph-client1 ceph]# ls -l
        -rw------- 1 root root 129 Jan  6 22:51 ceph.client.admin.keyring #这是下发后的秘钥文件
        -rw-r--r-- 1 root root 234 Jan  6 22:51 ceph.conf #这是下发后的配置文件
        -rw-r--r-- 1 root root  92 Oct  4 10:50 rbdmap
        -rw------- 1 root root   0 Jan  6 22:51 tmpUcImw6
        
        4、在ceph-client1客户端上查询ceph集群的RBD镜像
        [root@ceph-client1 ~]# rbd ls #列出rbd列表
        ceph-client1-rbd1
        [root@ceph-client1 ~]# rbd info --image ceph-client1-rbd1 #查看rbd镜像详细信息
        rbd image 'ceph-client1-rbd1':
            size 10240 MB in 2560 objects
            order 22 (4096 kB objects)
            block_name_prefix: rbd_data.857a238e1f29
            format: 2
            features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
            flags: 
        
        5、授权之后,就在ceph-client1客户端上映射名为'ceph-client1-rbd1'的rbd镜像:
        rbd map --image ceph-client1-rbd1
        
        执行上述映射命令后发生如下错误:
        [root@ceph-client1 log]# rbd map --image ceph-client1-rbd1
        rbd: sysfs write failed
        RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
        In some cases useful info is found in syslog - try "dmesg | tail" or so.
        rbd: map failed: (6) No such device or address
        遇到问题:rbd镜像的一些特性,OS kernel并不支持,所以映射失败
        
        查看下该镜像支持了哪些特性
        [root@ceph-client1 ~]# rbd info ceph-client1-rbd1
        rbd image 'ceph-client1-rbd1':
        size 10240 MB in 2560 objects
        order 22 (4096 kB objects)
        block_name_prefix: rbd_data.857a238e1f29
        format: 2
        features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
        flags: 
        可以看到特性feature一栏,由于我OS的kernel只支持layering,其他都不支持,所以需要把部分不支持的特性disable掉。
        
        以下方法根据实际情况选其一即可!(我这里使用的是方式二)
        
        【方法一:】直接diable这个rbd镜像的不支持的特性:
        [root@ceph-client1 ~]# rbd feature disable ceph-client1-rbd1 exclusive-lock object-map fast-diff deep-flatten
        [root@ceph-client1 ~]# rbd info ceph-client1-rbd1 #关闭后查看
        rbd image 'ceph-client1-rbd1':
            size 10240 MB in 2560 objects
            order 22 (4096 kB objects)
            block_name_prefix: rbd_data.857a238e1f29
            format: 2
            features: layering #仅剩一个特性
            flags: 

        【方法二:】在ceph集群中任意节点上创建rbd镜像时就指明需要的特性,如:
        $ rbd create --size 10240 ceph-client1-rbd1 --image-feature layering
        rbd create --size 10240 ceph-client1-rbd1 --image-feature layering exclusive-lock object-map fast-diff deep-flatten

        【方法三:】修改Ceph配置文件/etc/ceph/ceph.conf,在global section下,增加
        rbd_default_features = 1
        再创建rdb镜像。
        rbd create ceph-client1-rbd1 --size 10240
        
        
        6、解决上述问题之后,再次尝试映射
        [root@ceph-client1 ~]# rbd map --image ceph-client1-rbd1
        /dev/rbd0
        此刻,映射成功
        
        7、查看映射信息
        [root@ceph-client1 ~]# rbd showmapped
        id pool image             snap device    
        0  rbd  ceph-client1-rbd1 -    /dev/rbd0 

        8、如需指定RBD镜像所属池的名称(这是可选的操作)可以执行以下命令:
        rbd map rbd/ceph-client1-rbd1
        
        10、映射之后,格式化RBD块设备,并创建文件系统
        [root@ceph-client1 ~]# fdisk -l /dev/rbd0
        Disk /dev/rbd0: 10.7 GB, 10737418240 bytes, 20971520 sectors
        Units = sectors of 1 * 512 = 512 bytes
        Sector size (logical/physical): 512 bytes / 512 bytes
        I/O size (minimum/optimal): 4194304 bytes / 4194304 bytes
        
        [root@ceph-client1 ~]# mkfs.xfs /dev/rbd0
        [root@ceph-client1 ~]# mkdir /mnt/ceph-vol1
        [root@ceph-client1 ~]# mount /dev/rbd0 /mnt/ceph-vol1/
        
        [root@ceph-client1 ~]# df -H
        Filesystem           Size  Used Avail Use% Mounted on
        devtmpfs             494M     0  494M   0% /dev
        tmpfs                507M     0  507M   0% /dev/shm
        tmpfs                507M  6.9M  500M   2% /run
        tmpfs                507M     0  507M   0% /sys/fs/cgroup
        /dev/mapper/cl-root  8.6G  1.6G  7.0G  19% /
        /dev/sda1            1.1G  195M  869M  19% /boot
        tmpfs                102M     0  102M   0% /run/user/0
        /dev/rbd0             11G   35M   11G   1% /mnt/ceph-vol1 #这个是挂载后的
        
        11、取消映射块设备
        [root@ceph-client1 ~]# umount /mnt/ceph-vol1/ #取消挂载
        [root@ceph-client1 ~]# rbd unmap /dev/rbd/rbd/ceph-client1-rbd1 #取消映射
        [root@ceph-client1 ~]# rbd showmapped #查看是否取消成功,如没有任何输出则表示取消映射成功
        
        12、如下删除块设备,执行以下命令
        [root@ceph-node1 ~]# rbd rm ceph-client1-rbd1
        Removing image: 100% complete...done.
        [root@ceph-node1 ~]# rbd ls