美文网首页
Ceph对象存储RGW架构及安装实战

Ceph对象存储RGW架构及安装实战

作者: SunnyZhang的IT世界 | 来源:发表于2019-05-19 19:44 被阅读0次

    Ceph RGW架构简介

    我们知道Ceph可以提供块、文件和对象三种形态的存储。而RGW就是提供对象存储的网关,也即对象存储网关。所谓对象存储网关,也就是对象存储的入口,本质上是一个HTTP服务器,与Nginx和Apache无异。通过这个入口,用户可以通过HTTP协议,以RESTful的方式访问Ceph的对象存储。
    Ceph RGW的整体架构如图1所示,对象存储网关实际上是调用librados的API来实现数据的存储和读取。而该网关同时提供了兼容AWS S3和OpenStack Swift的对象存储访问接口(API)

    图1 RGW整体架构
    另外,有些同学可能不清楚对象存储的特点。在介绍后续内容之前,我们大概了解一下对象存储是如何存储数据的。对象存储的应用场景通常是互联网场景,一个对象存储通常会给多个用户(租户)使用。而在一个用户下面可以创建多个(swift里面称为容器container)。在桶中可以存储对象,对象就是我们存储的数据,比如图片或者是视频等。如果将对象存储与我们常规存储做一个类比,就好比文件夹,而对象就好比文件,但不同之处在于桶里面只能存储对象,而不能嵌套桶。如图2是对象存储数据组织形式。
    图2 对象存储数据组织

    今天我们主要除了介绍Ceph对象存储网关基本架构外,我们重点介绍一下如何在几个Ceph集群上部署一个RGW,并且通过Swift客户端进行访问。

    部署环境描述

    为了简化环境,本文使用的是2副本Ceph集群,在实际生产中通常是3副本。另外,本文使用的是本地虚拟机,也就是通过VirtualBox或者其它虚拟化平台安装的虚拟操作系统。本文操作系统版本为CentOS 7.4。如图3所示,我们的RGW安装在ceph-s节点。

    图3 Ceph集群

    部署Ceph RGW

    进入安装Ceph集群的时候创建的目录中,本文之前的目录为mycluster,因此进入该目录。

    $ cd my-cluster
    

    RGW默认使用Civetweb作为其Web Sevice,而Civetweb默认使用端口7480提供服务,如果想修改端口(如80端口),就需要修改Ceph的配置文件。在配置文件中增加一个section。
    [client.rgw.ceph-s]
    rgw_frontends = "civetweb port=80"
    注意: 这一步并不是必须的,根据实际情况进行设定

    安装Ceph对象存储网关

    我们可以通过ceph-deploy命令非常方便的安装Ceph的对象存储网关软件(也就是RGW)。如下是命令格式:

    $ ceph-deploy install --rgw <gateway-node1> [<gateway-node2> ...]
    

    比如在我们的ceph-s节点安装该软件,则可以执行如下命令:

    $ ceph-deploy install –-rgw ceph-s
    

    创建RGW实例

    上面步骤只是安装了必要的软件,但并没有创建需要的存储资源(存储池)。之前版本的安装需要用户手动创建多个存储池,安装比较麻烦,且容易出错。目前安装非常方便,可以通过ceph-deploy命令直接创建需要的资源,具体执行如下命令即可:

    $ ceph-deploy rgw create ceph-s
    

    创建完成后我们可以看一下目前Ceph集群的资源情况,在管理节点输入如下命令查看存储池的情况:

    $ rados lspools
    

    具体结果如下:


    图4 对象存储所需的存储池

    基本验证

    如果上述配置没有出现任何问题的话,其实Ceph的对象存储网关已经正常工作了。前面我们说了,对象存储其实是基于HTTP协议的,因此我们可以通过浏览器进行访问,比如在浏览器中输入如下内容:
    http://192.168.142.133:7480
    回车后,可以看到如下内容:


    图5 连通性验证

    对象存储访问验证

    前面我们进行了安装和连通性的基本验证,对于对象存储的功能来说还差得远。下面我们通过swift的客户端工具进行验证。

    注意:后续创建用户的操作应该在RGW节点上运行。

    创建用户

    我们前面介绍了对象存储的数据结构,数据必须存储在某个用户下面。因此,想正常的访问RGW,需要创建相应的RGW用户,并赋予相应的权限,radosgw-admin命令实现了这些功能。
    执行下面命令,来创建一个名为testuser的用户:

    $ radosgw-admin user create --uid="testuser" --display-name="First User"
    

    命令的输出大致如下:

    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "testuser",
                "access_key": "U0IJ8M27SRME1XMZSYPA",
                "secret_key": "YexQ1T1VVS8wIMgMp5KgAZsNjbF5OotTnDgavPdA"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }
    

    注意:需要记住返回结果中keys->access_key和keys->secret_key的值,用于S3接口访问确认。

    创建子用户

    Swift用户是作为子用户subuser被创建的,执行以下命令:

    $ radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full
    

    输出结果大致如下:

    {
        "user_id": "testuser",
        "display_name": "First User",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [
            {
                "id": "testuser:swift",
                "permissions": "full-control"
            }
        ],
        "keys": [
            {
                "user": "testuser",
                "access_key": "U0IJ8M27SRME1XMZSYPA",
                "secret_key": "YexQ1T1VVS8wIMgMp5KgAZsNjbF5OotTnDgavPdA"
            }
        ],
        "swift_keys": [
            {
                "user": "testuser:swift",
                "secret_key": "ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp"
            }
        ],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "max_size_kb": -1,
            "max_objects": -1
        },
        "temp_url_keys": []
    }
    

    注意:需要记住返回结果中swift_keys->secret_key的值,用于Swift接口访问确认。

    用Swift的客户端访问对象存储

    我们前面说了Ceph对象存储是兼容Swift的,因此我们可以直接用Swift的客户端访问Ceph对象存储。当然,我们需要首先安装该客户端。
    添加yum源
    新建文件/etc/yum.repos.d/openstack.repo,然后写入如下内容:

    [centos-openstack-liberty]    
    name=CentOS-7 - OpenStack liberty    
    baseurl=http://vault.centos.org/centos/7.3.1611/cloud/x86_64/openstack-liberty/
    gpgcheck=0    
    enabled=1    
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-Centos-7
    

    更新yum缓存后就可以安装swift客户端了。

    $ yum update
    $ yum install python-swiftclient
    

    命令样式
    Swift客户端的命令格式如下所示:

    $ swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list
    

    其中swift为主命令,而后面的list为子命令。在实际使用的时候,需要替换{IP ADDRESS}、{port}、{swift_secret_key}等相关参数,其中{swift_secret_key}为创建Swift用户时radosgw-admin命令返回的swift_keys->secret_key的值。如果忘记了上述内容,可以通过radosgw-admin命令查看
    创建容器/桶
    首先是需要一容器,Swift创建容器的命令为swift post contaner_name。具体命令如下:

     swift -A http://192.168.142.133:7480/auth/1.0 -U testuser:swift -K 'ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp' post testbucket
    

    可以通过list命令查看一下我们创建的容器:

    swift -A http://192.168.142.133:7480/auth/1.0 -U testuser:swift -K 'ozmuwVXWSeUg30TO8qkYggmbM7dXy2a4VlGid2Sp' list
    

    上传对象
    有了容器后,我们就可以向容器上传对象了。具体命令如下,为了清晰一些,这里省略了认证相关的内容

    swift upload testbucket ./mysql.yaml
    

    成功后可以看一下容器中的内容,具体命令如下:

    swift list testbucket
    

    小结

    至此,我们完成了本文要介绍的内容。这里我们介绍了Ceph对象存储的基本架构、安装和基于Swift客户端的使用。当然这里仅仅是入门级的,如果各位童鞋想继续深入学习,请关注本号,本号会持续更新Ceph相关的内容。

    关注微信公众号,获取信息更及时: itworld123

    参考文献:

    1. https://www.jianshu.com/p/f6e336bd9999
    2. https://blog.csdn.net/u011446736/article/details/81083078
    3. https://blog.csdn.net/Poo_Chai/article/details/80856662?utm_source=blogxgwz1

    相关文章

      网友评论

          本文标题:Ceph对象存储RGW架构及安装实战

          本文链接:https://www.haomeiwen.com/subject/kwefzqtx.html