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手動部署。