Ceph 對象存儲

1、什麼是對象存儲python

一、對象存儲,也就是鍵值存儲,經過其接口指令,也就是簡單GET、PUT、DEL和其餘擴展指令,向存儲服務上傳下載數據等nginx

二、對象存儲中全部數據都被認爲是一個對象。因此,任何數據均可以存入對象存儲服務器,如圖片、視頻、音頻等web

2、Ceph 對象存儲的構成apache

Ceph 對象存儲主要是經過 RGW  來實現,那麼什麼是 RGW 呢?swift

一、RGW 即 Rados Gateway 的全稱。vim

二、RGW 是 Ceph 對象存儲網關,用於向客戶端應用程序提供存儲界面,提供 RESTful API 訪問接口。瀏覽器

三、RGW 能夠部署多臺作爲 高可用和負載均衡,拓撲以下圖:bash

clipboard[36]

3、部署 RGW 服務服務器

一、在 ceph-a 上經過 ceph-deploy 將 ceph-radosgw 軟件包安裝到 ceph-e 中負載均衡

[root@ceph-a ~]# ceph-deploy install --rgw ceph-e

clipboard[37]

二、將配置文件、密鑰文件同步到 ceph-e

[root@ceph-a ceph]# ceph-deploy admin ceph-e

clipboard[38]

三、啓動一個RGW服務

[root@ceph-a ceph]# ceph-deploy rgw create ceph-e

clipboard[39]

四、登錄 ceph-e 驗證服務是否啓動

[root@ceph-e yum.repos.d]# ps -ef | grep radosgw

clipboard[40]

五、查看 rgw 狀態

[root@ceph-e yum.repos.d]# systemctl status ceph-radosgw\*

clipboard[41]

六、查看端口是否有監聽

[root@ceph-e yum.repos.d]# netstat -tpnl | grep 7480

clipboard[42]

經過以上 6 步,咱們的 RGW 服務已經能夠成功運行了。

七、RGW 內建了一個名爲 civetweb 的 web 服務器,這個服務器與 apache/nginx 相似,既然是 web 服務,那麼使用 80 端口就更爲方便,爲了應用便捷,能夠將默認的 7480 端口修改成 80 端口。

修改 ceph-e 節點的 ceph.conf 配置文件,追加如下內容:

[root@ceph-e ceph]# vim ceph.conf
[client.rgw.ceph-e]
host = ceph-e
rgw_frontends = "civetweb port=80"

保存退出並重啓服務

[root@ceph-e ceph]# systemctl restart ceph-radosgw.target

八、查看端口是否修改爲功

[root@ceph-e ceph]# netstat -tpnl

clipboard[43]

九、驗證

打開瀏覽器,輸入 http://192.168.20.148,以下圖

clipboard[44]

或者在命令行中輸入 curl http://192.168.20.148 \r ,\r表示發送回車鍵指令,以下如

clipboard[45]

4、使用第三方軟件訪問

一、使用亞馬遜 s3 客戶端進行訪問

①、登錄 ceph-e(RGW)建立用戶

[root@ceph-e radosgw]# radosgw-admin user create --uid="radosgw" --display-name="First User"

clipboard[46]

user: radosgw
access_key: N6ALEK0KS0ISYCIM5JBG
secret_key: qK9hrpX2uwna4elPP1VsuErmAHBw3So40fE2K4yM

②、受權用戶,容許 radosgw 讀寫 users 信息:

[root@ceph-e radosgw]# radosgw-admin caps add --uid=radosgw --caps="users=*"

clipboard[47]

容許 radosgw 讀寫全部的usage信息:

[root@ceph-e radosgw]# radosgw-admin caps add --uid=radosgw --caps="usage=read,write"

clipboard[48]

③、建立子用戶,作爲後面 swift 客戶端訪問時使用

[root@ceph-e radosgw]# radosgw-admin subuser create --uid=radosgw --subuser=radosgw:swift --access=full

clipboard[49]

④、建立密鑰

[root@ceph-e radosgw]# radosgw-admin key create --subuser=radosgw:swift --key-type=swift --gen-secret

clipboard[50]

user: radosgw:swift
secret_key: NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl

⑤、在 ceph-f 安裝 s3 客戶端軟件

首先,咱們找一下 yum 源有沒有 s3 的 rpm 包

[root@ceph-f ~]# yum list | grep s3

clipboard[51]

發現,有 s3 的 rpm 包,所以直接安裝便可

[root@ceph-f ~]# yum -y install s3cmd.noarch

⑥、對 s3 進行配置

[root@ceph-f ~]# s3cmd --configure

clipboard[52]

注意:

Access Key: N6ALEK0KS0ISYCIM5JBG
Secret Key: qK9hrpX2uwna4elPP1VsuErmAHBw3So40fE2K4yM
Default Region [US]:                        #這裏必定不要修改,不然後面會報錯
S3 Endpoint [s3.amazonaws.com]: 192.168.20.148
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket)s.192.168.20.148 bucket     #至關於百度網盤的建立文件夾,這裏是固定格式
Path to GPG program [/usr/bin/gpg]:                 #保持默認
Use HTTPS protocol [Yes]: no                    #這裏寫 no ,由於沒有提供 https 端口
HTTP Proxy server name:                       #這裏不用寫,由於沒有代理
Test access with supplied credentials? [Y/n] y
Save settings? [y/N] y

⑦、客戶端測試,查看內容

[root@ceph-f ~]# s3cmd ls

clipboard[53]

空的,由於就像百度雲盤同樣,剛申請,沒有建立,因此是空的

⑧、建立存儲數據的 bucket (相似於存儲數據的目錄)要求 xxx_yyy 格式

[root@ceph-f ~]# s3cmd mb s3://cephdir

clipboard[54]

發現報錯了,看上圖,發現,出錯是由於咱們的寫的格式不正確,按照正確的格式從新書寫,再來一次

[root@ceph-f ~]# s3cmd mb s3://ceph_dir

clipboard[55]

如上圖,成功了

⑨、再次查看客戶端內容

[root@ceph-f ~]# s3cmd ls

clipboard

這裏提供 s3 的測試腳本

[root@ceph-f ~]# yum -y install python-boto
[root@ceph-f ~]# vim s3test.py
import boto.s3.connection
access_key = 'N6ALEK0KS0ISYCIM5JBG'
secret_key = 'qK9hrpX2uwna4elPP1VsuErmAHBw3So40fE2K4yM'
conn = boto.connect_s3(
         aws_access_key_id=access_key,         
         aws_secret_access_key=secret_key,         
         host='ceph-e', port=80,         
         is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),        
         )
bucket = conn.create_bucket('xxx_yyy')
for bucket in conn.get_all_buckets():
     print "{name} {created}".format(         
     name=bucket.name,         
     created=bucket.creation_date,     
     )

在使用時,請替換本身的 access_key、secret_key、主機名和端口

二、swift 接口測試

①、須要安裝如下軟件包

[root@ceph-f ~]# yum install python-setuptools
[root@ceph-f ~]# easy_install pip
[root@ceph-f ~]# pip install --upgrade setuptools
[root@ceph-f ~]# pip install --upgrade python-swiftclient

②、命令行訪問

swift -A http://192.168.20.148/auth/v1.0 -U radosgw:swift -K NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl list

clipboard[56]

swift -A http://192.168.20.148/auth/v1.0 -U radosgw:swift -K NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl stat -v

clipboard[57]

這裏提供 swift 的測試腳本:

[root@ceph-f ~]# vim swift.py
import swiftclient
user = 'radosgw:swift'
key = 'NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl'

conn = swiftclient.Connection(
         user=user,         
         key=key,         
         authurl='http://192.168.20.148/auth/v1.0',
         )
for container in conn.get_account()[1]:
         print container['name']

在使用時,請替換本身的 access_key、secret_key、authurl

到此,的 Ceph 對象存儲已經完結,若是各位大俠有什麼不明白的地方,請參考官網文檔


關於 Ceph 集羣的實現,請參閱小弟的另一篇博文:http://www.javashuo.com/article/p-ghmqdwwp-cq.html
關於 Ceph 塊設備的應用,請參閱小弟的另一篇博文:http://www.javashuo.com/article/p-wsutnfvb-n.html
關於 CephFS 文件系統的應用,請參閱小弟的另一篇博文:http://www.javashuo.com/article/p-clfsvaka-x.html


5、總結

Ceph 對象存儲目前尚不不穩定,且官方文檔較舊,這裏只作大概講解,不作深刻研究。

相關文章
相關標籤/搜索