Ceph部署(二)RGW搭建

背景

Ceph RGW簡介

Ceph RGW基於librados,是爲應用提供RESTful類型的對象存儲接口。RGW提供兩種類型的接口:
  1) S3:兼容Amazon S3RESTful API;
  2) Swift:兼容OpenStack Swift API。
  這裏寫圖片描述
  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手動部署

發佈了122 篇原創文章 · 獲贊 55 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章