ceph對象存儲的配置與S3、swift接口的使用

首先簡單瞭解一下一些ceph對象存儲的基本知識:
Ceph:
起始於2006年
開發語言:C
強一致性
塊存儲
對象存儲
Swift:

起始於2008年
開發語言:Python
最終一致性
對象存儲
真正的大型公用雲服務產品中使用

對象存儲介紹:

Ceph本質上就是一個rados,利用命令rados就可以訪問和使用ceph的對象存儲,但作爲一個真正產品機的對象存儲服務,通常使用的是Restfulapi的方式進行訪問和使用。而radosgw其實就是這個作用,安裝完radosgw以後,就可以使用api來訪問和使用ceph的對象存儲服務了。
本質上radosgw(其實也是一個命令)和rbd命令一樣,其實是ceph集羣的客戶端。只不過,radosgw即作爲rados的客戶端,同時又提供http restful接口,作爲服務端供用戶使用。

首先明白一下架構,radosgw其實名副其實,就是rados的一個網關,作用是對外提供對象存儲服務。本質上radosgw(其實也是一個命令)和rbd命令一樣,其實是ceph集羣的客戶端。只不過,radosgw即作爲rados的客戶端,同時又提供http restful接口,作爲服務端供用戶使用。Radosgw對用戶而言就是一個http restful的應用,因此本質上來講,對其進行使用就是通過http的方式,但顯然每次都要用戶構建http訪問的url和headers不是一個很方便的方式,因此radosgw兼容了通用的對象存儲接口,分別是亞馬遜的s3和openstack的swift,這也就是說你可以用swift或者s3的客戶端來訪問radosgw。
Radosgw包含兩個命令行工具:
一個是radosgw,這個是用來啓動radosgw服務的腳本,是一個二進制文件;
另外一個是radosgw-admin,這是用來管理radosgw的賬號的一個命令行工具,主要用來創建、查看、修改radosgw的賬號信息。

注意,ragw的賬號信息僅僅是對radosgw的用戶而言,這個和ceph中的用戶不是一個概念。
Radosgw作爲ceph集羣(rados)的客戶端,因此他在ceph中有一個賬號,通常叫做client.radosgw.gateway。在啓動radosgw這個服務時,會讀取ceph.conf中[client.radosgw.gateway]這個section。

開始操作:Ceph 對象存儲服務提供了 REST 風格的 API ,它有與 Amazon S3 和 OpenStack Swift 兼容的接口。也就是通常意義的鍵值存儲,其接口就是簡單的GET、PUT、DEL和其他擴展;Ceph 對象存儲可以簡稱爲 RGW,Ceph RGW 是基於 librados,爲應用提供 RESTful 類型的對象存儲接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 兩種類型。接下來就分別演示通過這兩種方式使用 Ceph RGW。

接下來就是我實際的配置操作:

Ceph 對象存儲可以簡稱爲 RGW,Ceph RGW 是基於 librados,爲應用提供 RESTful 類型的對象存儲接口,其接口方式支持 S3(兼容 Amazon S3 RESTful API) 和 Swift(兼容 OpenStack Swift API) 兩種類型。接着之前的文章,還是在之前搭建的ceph集羣基礎上操作。接下來就分別演示通過這兩種方式使用 Ceph RGW。

1、首先需要安裝 Ceph 對象網關。
Ceph 從 v0.80 開始,使用內嵌 Civetweb 作爲 Web Server,無需額外安裝 web 服務器或配置 FastCGI,其默認端口爲 7480。在 mon節點目錄通過 ceph-deploy 安裝 Ceph RGW。一般是在管理節點下,但是搭建的ceph集羣沒有管理節點,所以就在mon節點下面,在這裏我們還是使用 node1 節點(也就是我的mon節點)做測試。
首先進入到mon節點的my-cluster目錄下面,然後執行下面命令:
$ ceph-deploy install –rgw node1
2、新建 Ceph 對象網關實例
在 mon節點工作目錄創建一個 Ceph rgw 實例,一旦對象網關開始運行,我們就可以通過 http://node1:7480 地址訪問啦。
$ ceph-deploy –overwrite-conf rgw create node1
[ceph_deploy.conf][DEBUG ] found configuration file at:
…….
省略
…….
[ceph_deploy.rgw][INFO ] The Ceph Object Gateway (RGW) is now running on host admin and default port 7480

從日誌中可以看到 RGW 已經運行起來了,我們來訪問以下試下。
$ curl http://node1:7480

#!/usr/bin/pyhton
import boto
import boto.s3.connection
access_key = 'OHP5X3XQSC1IOWQUYDNT'
secret_key = 'BqiUlhfWGvsz30FVCjzUhPesGH4NDa69joNHEYep'
conn = boto.connect_s3(
            aws_access_key_id = access_key,
                aws_secret_access_key = secret_key,
                    host = '192.168.1.220', port=80,
                        is_secure=False,
                            calling_format = boto.s3.connection.OrdinaryCallingFormat(),
                            )
bucket = conn.create_bucket('my-first-s3-bucket')
for bucket in conn.get_all_buckets():
            print "{name}\t{created}".format(
                                    name = bucket.name,
                                                    created = bucket.creation_date,)

“`

注意:這裏使用了python-boto 包,使用認證信息連接 S3,然後創建了一個 my-first-s3-bucket 的 bucket,最後列出所有已創建的 bucket,打印名稱和創建時間。
最後,執行腳本,看下結果是否正確。
lxl@lxl-virtual-machine:~$ python s3.py
my-first-s3-bucket 2018-03-04T08:17:40.921Z
測試通過。

我們可以看一下:

注意:default.rgw.data.root。它包含bucekt和bucket元數據,bucket創建了兩個對象一個:一個是< bucket_name > 另一個是.bucket.meta.< bucket_name >.< marker > 這個marker是創建bucket中生成的。 同時用戶創建的buckets在.rgw.buckets.index都對應一個object對象,其命名是格式:.dir.< marker >
然後查看:
[root@node1 ~]# rados -p default.rgw.data.root ls
.bucket.meta.my-first-s3-bucket:9ad5259a-77d7-4407-99b0-562c217cdb87.24101.1
my-first-s3-bucket
可以看到創建了my-first-s3-bucket

創建 Swift 用戶
要通過 Swift 訪問對象網關,需要 Swift 用戶是作爲子用戶 subuser 被創建的。
$ sudo radosgw-admin subuser create –uid=rgwuser –subuser=rgwuser:swift –access=full
{
“user_id”: “rgwuser”,
“display_name”: “This is first rgw test user”,
“email”: “”,
“suspended”: 0,
“max_buckets”: 1000,
“auid”: 0,
“subusers”: [
{
“id”: “rgwuser:swift”,
“permissions”: “full-control”
}
],
“keys”: [
{
“user”: “rgwuser”,
“access_key”: “OHP5X3XQSC1IOWQUYDNT”,
“secret_key”: “BqiUlhfWGvsz30FVCjzUhPesGH4NDa69joNHEYep”
}
],
“swift_keys”: [
{
“user”: “rgwuser:swift”,
“secret_key”: “twTTtZ8pCVENvXJUbxfNj0lPogwaCWHdDRQpM9DK”
}
],
“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”: []
}

注意:返回的 Json 值中,我們要記住兩個 secret_key 因爲下邊我們測試訪問 Swift 接口時需要使用。
測試訪問 Swift 接口
訪問 Swift 接口可以通過 swift 命令行客戶端來完成,然後通過客戶端命令訪問 Swift 接口。
# 安裝 Swift 命令行客戶端
sudoaptgetinstallpythonsetuptools sudo easy_install pip
sudopipinstallupgradesetuptools sudo pip install –upgrade python-swiftclient
# 訪問 Swift 接口
$ swift -A http://192.168.1.220:80/auth/1.0 -U rgwuser:swift -K ‘twTTtZ8pCVENvXJUbxfNj0lPogwaCWHdDRQpM9D\’ list my-first-s3-bucket
注意:192.168.1.220:80爲網關服務器的外網訪問 IP 地址,這裏爲mon節點 IP,端口默認 7480,因爲上面已修改端口號,這裏也需要對應修改爲80。密鑰 Key 爲上邊返回值中的 secret_key。
同樣,測試通過。

參考:http://blog.csdn.net/aixiaoyang168/article/details/78825850

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章