blob.png blob.png

 上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。


    继上篇《Ceph 之 使用ceph-deploy部署ceph集群》,ceph集群搭建完成之后,接下来就是使用了,ceph集群可以提供给块设备、文件系统、对象存储 进行使用,其中块设备的应用最成熟和广泛,可以用在生产系统;对象存储也很成熟,可以用在生产系统;文件系统据官网说还不是特别稳定,不建议在生产系统中使用。再重复一下环境:

环境:

系统centos7.4

ceph版本 ceph version 10.2.10

测试服务器为kvm虚拟机(openstack虚拟机)


服务器分配如下:


节点 服务 cluster network
ceph-1(admin-node) osd.{1,2,},mon.ceph-1 eth0:192.168.1.161/24
ceph-2 osd.{3,4},mon.ceph-2 eth0:192.168.1.162/24
ceph-3 osd.{5,6},mon.ceph-3 eth0:192.168.1.163/24

节点 服务 cluster network
control03(client) ceph client eth0:192.168.1.132/24

    ceph每个节点在原来系统盘的基础上增加2块osd盘/dev/vdb 、/dev/vdc,集群共有6个osd进程,3个monitor进程。管理节点用作执行ceph-deploy命令,使用ceph-1节点充当。

    节点control03上面与ceph集群独立作为ceph集群的使用者(client),同一个局域网,是另一个openstack的一个控制节点,这里仅作测试用,与openstack没有联系。大家应该大概猜测到了后续我的思路是什么,openstack可以使用外部ceph集群,只需要在部署的时候进行相应的配置修改,就能够实现,这种架构我认为是一个不错的选择。

  

    一、块设备的使用

    我是参照官网进行的操作,其中块设备的操作网址:

    http://docs.ceph.com/docs/master/start/quick-rbd/

    逻辑还是很简单,首先是将客户端纳入到ceph集群中,这里有一个概念,就是客户端和ceph集群可以分开的,也可以是合在一起的,一般较小规模的是合在一起,比如我的环境下面,3个node节点的ceph集群,直接3个节点就可以使用ceph集群,不需要重新ceph-deploy install和ceph-deploy admin 。具体步骤如下:

    1、客户端安装。在客户端节点上进行ceph-deploy install 和ceph-deploy admin 操作,如果在集群节点本身使用,可以跳过这一步;注意,在执行之前,双方的/etc/hosts文件添加主机纪录能够解析双方主机名称,然后ssh密钥拷贝,使ceph admin节点可以直接免密ssh登陆客户端。

    ssh-copy-id 
    ceph-deploy install 
    ceph-deploy admin 

    

    2、创建pool池。在admin节点上(随便哪一个,只要执行过ceph-deploy admin命令的节点即可)执行下面的命令:

    ceph osd pool create rbd 64 //其中rbd是pool的名称
    注:官网上的命令是: rbd pool init  , 在我的环境中rbd命令没有pool子命令,应该是版本原因。

    3、配置块设备。在客户端侧创建image镜像,映射镜像到块设备,格式化块设备,mount块设备,其中后面两步和其他块设备的使用一样的。

    a.创建image镜像

    命令格式: #rbd create foo --size 4096 --image-feature layering [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
    rbd create foo --size 4096 --image-feature layering   //创建一个名字为foo的镜像,如果没有制定pool名称,那么默认是rbd

    b.映射镜像到块设备

    命令格式:#rbd map foo --name client.admin [-m {mon-IP}] [-k /path/to/ceph.client.admin.keyring]
    rbd map foo //将foo镜像映射到块设备

    c.格式化块设备

    命令格式:mkfs.ext4 -m0 /dev/rbd/rbd/foo  //-m0 表示不保留空间为0
    mkfs.ext4 /dev/rbd/rbd/foo

    d.mount块设备

    mkdir /mnt/foo
    mount /dev/rbd/rbd/foo /mnt/foo
    cd /mnt/foo


二. 对象存储的使用

    和块存储一样,首先是安装客户端,创建网关实例,在需要的情况下更改相关配置。

    1.安装客户端。在admin端执行:

    命令格式:#ceph-deploy install --rgw  [ ...]
    ceph-deploy install --rgw control03

    2.创建网关实例。在admin端执行:

    ceph-deploy rgw create 
    ceph-deploy rgw create control03
    注意,实例rgw默认的端口是7480 ,如果需要更改端口,可以通过修改配置文件ceph.conf实现,具体详见官网:http://docs.ceph.com/docs/master/start/quick-rgw/

    3.使用对象存储网关。

    ceph对象存储网关为应用提供 RESTful 类型的对象存储接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 两种类型。其中swift场景,比如可以在openstack中直接使用ceph对象存储网关作为swift的存储。这里不做详细记录。


三.文件系统的使用

    Ceph FS是一个支持POSIX接口的文件系统。文件系统对于客户端来说可以方便的挂载到本地使用。Ceph FS构建在RADOS之上,继承RADOS的容错性和扩展性,支持冗余副本和数据高可靠性。


MDS

    MDS(Metadata Server)即元数据Server主要负责Ceph FS集群中文件和目录的管理。 元数据主要记录数据的属性,如文件存储位置、大小、存储时间等,同时负责文件查找、文件记录、存储位置记录、访问授权等。


    MDS与ceph-mon和ceph-osd类似也是一个Daemon进程,可以像MON和OSD一样在多节点部署实现冗余。MDS进程可以被配置为活跃或者被动状态,活跃的MDS为主MDS,其他的MDS处于备用状态,当主MDS节点故障时,备用MDS节点会接管其工作并被提升为主节点。


MDS部署

     在admin节点(ceph-1)运行ceph-deploy命令部署mds到control03上:

    命令格式:#ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] ...]
    ceph-deploy mds create control03

创建CephFS

    CephFS需要使用两个Pool来分别存储数据和元数据,下面我们分别创建fs_data和fs_metadata两个Pool。设置pg_num为128:

    ceph osd pool create fs_data 128
    ceph osd pool create fs_metadata 128
    ceph osd lspools
    以上命令可以在随便一个有admin权限的节点运行,即可以在ceph-1上也可以在contro03上执行,因为这2个节点都执行过ceph-deploy admin命令。


    接下来创建一个CephFS:

    ceph fs new cephfs fs_metadata fs_data


    使用下面的命令可以查看创建的CephFS:

    ceph fs ls
    name: cephfs, metadata pool: fs_metadata, data pools: [fs_data ]


挂载CephFS

    客户端访问Ceph FS有两种方式:

    Kernel内核驱动:Linux内核从2.6.34版本开始加入对CephFS的原声支持

    Ceph FS FUSE: FUSE即Filesystem in Userspace

    因为我们的系统内核版本满足要求,所以我们以Kernel驱动方式挂载前面创建的那个CephFS:


    mkdir /mnt/mycephfs
    mount -t ceph 192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/ /mnt/mycephfs -o name=admin,secret=AQDVMQZbVNKEHhAAn0bzjYQpAgP5W1gKwtnthw==
    注:上面的secret是ceph admin的密钥,在文件/etc/ceph/ceph.client.admin.keyring中;如果集群中有多个文件系统,可以通过参数 -o mds_namespace=myfs 专门指定。
    df -h
    Filesystem                                                  Size  Used Avail Use% Mounted on
    192.168.1.161:6789,192.168.1.162:6789,192.168.1.163:6789:/  210G  496M  210G   1% /mnt/mycephfs

    

    卸载Ceph文件系统:

    umount /mnt/mycephfs

总结:

    集群服务器和客户端服务器可以分开也可以复用,总的来说使用ceph-deploy部署工具可以非常方便的部署块设备/对象存储/文件系统客户端程序及相关配置,概念上也比较清晰。

    进一步的,可以通过部署独立的ceph集群给openstack使用,这样openstack本身部署的时候不要启用ceph,在使用块设备/对象存储的相关组建上配置使用外部ceph集群,可以有更灵活的架构选择,比如块设备使用一个快速固态硬盘存储池,对象存储使用慢速硬盘存储池,这样对隔离故障域也很有好处。