Ceph RGW架構簡介

我們知道Ceph可以提供塊、文件和對象三種形態的存儲。而RGW就是提供對象存儲的網關,也即對象存儲網關。所謂對象存儲網關,也就是對象存儲的入口,本質上是一個HTTP伺服器,與Nginx和Apache無異。通過這個入口,用戶可以通過HTTP協議,以RESTful的方式訪問Ceph的對象存儲。 Ceph RGW的整體架構如圖1所示,對象存儲網關實際上是調用librados的API來實現數據的存儲和讀取。而該網關同時提供了兼容AWS S3和OpenStack Swift的對象存儲訪問介面(API)

另外,有些同學可能不清楚對象存儲的特點。在介紹後續內容之前,我們大概瞭解一下對象存儲是如何存儲數據的。對象存儲的應用場景通常是互聯網場景,一個對象存儲通常會給多個用戶(租戶)使用。而在一個用戶下面可以創建多個(swift裡面稱為容器container)。在桶中可以存儲對象,對象就是我們存儲的數據,比如圖片或者是視頻等。如果將對象存儲與我們常規存儲做一個類比,就好比文件夾,而對象就好比文件,但不同之處在於桶裡面只能存儲對象,而不能嵌套桶。如圖2是對象存儲數據組織形式。

今天我們主要除了介紹Ceph對象存儲網關基本架構外,我們重點介紹一下如何在幾個Ceph集羣上部署一個RGW,並且通過Swift客戶端進行訪問。

部署環境描述

為了簡化環境,本文使用的是2副本Ceph集羣,在實際生產中通常是3副本。另外,本文使用的是本地虛擬機,也就是通過VirtualBox或者其它虛擬化平臺安裝的虛擬操作系統。本文操作系統版本為CentOS 7.4。如圖3所示,我們的RGW安裝在ceph-s節點。

部署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

具體結果如下:

基本驗證

如果上述配置沒有出現任何問題的話,其實Ceph的對象存儲網關已經正常工作了。前面我們說了,對象存儲其實是基於HTTP協議的,因此我們可以通過瀏覽器進行訪問,比如在瀏覽器中輸入如下內容: 192.168.142.133:7480 回車後,可以看到如下內容:

對象存儲訪問驗證

前面我們進行了安裝和連通性的基本驗證,對於對象存儲的功能來說還差得遠。下面我們通過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相關的內容。

參考文獻:

1. jianshu.com/p/f6e336bd9

2. blog.csdn.net/u01144673

3. blog.csdn.net/Poo_Chai/


推薦閱讀:
相關文章