zoukankan      html  css  js  c++  java
  • Ceph部署(二)RGW搭建

    背景

    Ceph RGW简介

    Ceph RGW基于librados,是为应用提供RESTful类型的对象存储接口。RGW提供两种类型的接口:
      1) S3:兼容Amazon S3RESTful API;
      2) Swift:兼容OpenStack Swift API。
      RGW架构
      S3和Swift API共享同一个命名空间,所以可以使用两种API访问相同的数据。

    环境规划

    如上篇文章《Ceph部署(一)集群搭建》所述:4台服务器:1台作为Monitor,1台作为OSD RGW,还有两台作为OSD。ps:我们不搭建CephFS。
    所有服务器都安装Ubuntu 16.04。

    部署Ceph RGW

    进入上文所述的my-cluster目录。

    $ cd my-cluster
    

    修改默认端口(可选的)

      RGW默认使用Civetweb作为其Web Sevice,而Civetweb默认使用端口7480提供服务,如果想修改端口(如80端口),就需要修改Ceph的配置文件。在配置文件中增加一个section[client.rgw.],其中需要修改为RGW的hostname。如下:

    [client.rgw.node4]
    rgw_frontends = "civetweb port=80"
    
    

      然后再将配置文件推送到RGW节点。

    $ ceph-deploy --overwrite-conf config push node4
    

    安装CEPH OBJECT GATEWAY

      格式为:

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

      由于我们环境中只有一个RGW,所以执行命令:

    $ ceph-deploy install –-rgw node4
    

    管理RGW节点

    Ceph CLI工具需要在管理员模式下运行,因此需要执行以下命令:

    $ ceph-deploy admin node4
    

    安装RGW实例

    执行命令:

    $ ceph-deploy rgw create node4
    

      一旦RGW开始运行,我们就可以通过端口7480(如果没有修改的话)来访问。如:

    http://node4:7480
    

      如果RGW运行正常,它应该返回类似的信息:

    <ListAllMyBucketsResult>
      <Owner>
        <ID>anonymous</ID>
        <DisplayName/>
      </Owner>
      <Buckets/>
    </ListAllMyBucketsResult>
    
    

      注意:剩下的创建用户的步骤都应该在RGW节点上运行。

    创建S3用户

      想正常的访问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": "I0PJDPCIYZ665MW88W9R",
            "secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
        }],
        "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用户

      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:swift",
            "access_key": "3Y1LNW4Q6X0Y53A52DET",
            "secret_key": ""
        }, {
            "user": "testuser",
            "access_key": "I0PJDPCIYZ665MW88W9R",
            "secret_key": "dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA"
        }],
        "swift_keys": [{
            "user": "testuser:swift",
            "secret_key": "244+fz2gSqoHwR3lYtSbIyomyPHf3i7rgSJrF/IA"
        }],
        "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接口访问确认。

    测试S3接口

      需要创建一个Python测试脚本来测试S3访问。该脚本会连接RGW,创建一个bucket并列出所有的bucket。其中,变量access_key和secret_access的值,来自于创建S3用户命令时,radosgw-admin命令返回的keys->access_key和keys->secret_key。
      执行以下步骤,首先安装python-boto库,该库用于连接S3:

    $ apt-get install python-boto
    

      创建并编辑Python脚本:

    $ vi s3test.py
    
    import boto.s3.connection
    
    access_key = 'I0PJDPCIYZ665MW88W9R'
    secret_key = 'dxaXZ8U90SXydYzyS5ivamEP20hkLSUViiaR+ZDA'
    conn = boto.connect_s3(
            aws_access_key_id=access_key,
            aws_secret_access_key=secret_key,
            host='{hostname}', port={port},
            is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
           )
    
    bucket = conn.create_bucket('my-new-bucket')
    for bucket in conn.get_all_buckets():
        print "{name} {created}".format(
            name=bucket.name,
            created=bucket.creation_date,
        )
    
    

      替换{hostname}、{port}为真实环境的hostname(或者ip)和RGW的端口。执行命令进行测试:

    $ python s3test.py
    

      输出应该类似如下:

    my-new-bucket-2 2017-02-19T04:34:17.530Z
    

    5.4.8 测试Swift接口

      Swfit的访问可以通过命令行。首先安装相关软件包:

    $ apt-get install python-setuptools
    $ apt-get install python-swiftclient
    
    

      执行下列命令,范文Swift接口:

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

      替换{IP ADDRESS}、{port}、{swift_secret_key}等相关参数,其中{swift_secret_key}为创建Swift用户时,radosgw-admin命令返回的swift_keys->secret_key的值。正常的输出应该为:

    my-new-bucket
    

    小结

      通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。但如果想挑战下自己,或者想让自己了解更多,试试完全的手动部署Ceph吧Ceph手动部署

  • 相关阅读:
    JobTracker作业启动过程分析
    结构体传参
    getchar()
    char *a与char a[n]的区别
    EOF NULL 之间的区别
    现代方法第15章第三节的程序
    交换机console口连接
    undefined reference问题总结
    二维数组与指针
    数组作为参数传递的时候,被调用的函数内无法计算出数组的大小
  • 原文地址:https://www.cnblogs.com/styshoo/p/6472181.html
Copyright © 2011-2022 走看看