1、什麼是對象存儲python
一、對象存儲,也就是鍵值存儲,經過其接口指令,也就是簡單GET、PUT、DEL和其餘擴展指令,向存儲服務上傳下載數據等nginx
二、對象存儲中全部數據都被認爲是一個對象。因此,任何數據均可以存入對象存儲服務器,如圖片、視頻、音頻等web
2、Ceph 對象存儲的構成apache
Ceph 對象存儲主要是經過 RGW 來實現,那麼什麼是 RGW 呢?swift
一、RGW 即 Rados Gateway 的全稱。vim
二、RGW 是 Ceph 對象存儲網關,用於向客戶端應用程序提供存儲界面,提供 RESTful API 訪問接口。瀏覽器
三、RGW 能夠部署多臺作爲 高可用和負載均衡,拓撲以下圖:bash
3、部署 RGW 服務服務器
一、在 ceph-a 上經過 ceph-deploy 將 ceph-radosgw 軟件包安裝到 ceph-e 中負載均衡
[root@ceph-a ~]# ceph-deploy install --rgw ceph-e
二、將配置文件、密鑰文件同步到 ceph-e
[root@ceph-a ceph]# ceph-deploy admin ceph-e
三、啓動一個RGW服務
[root@ceph-a ceph]# ceph-deploy rgw create ceph-e
四、登錄 ceph-e 驗證服務是否啓動
[root@ceph-e yum.repos.d]# ps -ef | grep radosgw
五、查看 rgw 狀態
[root@ceph-e yum.repos.d]# systemctl status ceph-radosgw\*
六、查看端口是否有監聽
[root@ceph-e yum.repos.d]# netstat -tpnl | grep 7480
經過以上 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
九、驗證
打開瀏覽器,輸入 http://192.168.20.148,以下圖
或者在命令行中輸入 curl http://192.168.20.148 \r ,\r表示發送回車鍵指令,以下如
4、使用第三方軟件訪問
一、使用亞馬遜 s3 客戶端進行訪問
①、登錄 ceph-e(RGW)建立用戶
[root@ceph-e radosgw]# radosgw-admin user create --uid="radosgw" --display-name="First User"
user: radosgw access_key: N6ALEK0KS0ISYCIM5JBG secret_key: qK9hrpX2uwna4elPP1VsuErmAHBw3So40fE2K4yM
②、受權用戶,容許 radosgw 讀寫 users 信息:
[root@ceph-e radosgw]# radosgw-admin caps add --uid=radosgw --caps="users=*"
容許 radosgw 讀寫全部的usage信息:
[root@ceph-e radosgw]# radosgw-admin caps add --uid=radosgw --caps="usage=read,write"
③、建立子用戶,作爲後面 swift 客戶端訪問時使用
[root@ceph-e radosgw]# radosgw-admin subuser create --uid=radosgw --subuser=radosgw:swift --access=full
④、建立密鑰
[root@ceph-e radosgw]# radosgw-admin key create --subuser=radosgw:swift --key-type=swift --gen-secret
user: radosgw:swift secret_key: NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl
⑤、在 ceph-f 安裝 s3 客戶端軟件
首先,咱們找一下 yum 源有沒有 s3 的 rpm 包
[root@ceph-f ~]# yum list | grep s3
發現,有 s3 的 rpm 包,所以直接安裝便可
[root@ceph-f ~]# yum -y install s3cmd.noarch
⑥、對 s3 進行配置
[root@ceph-f ~]# s3cmd --configure
注意:
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
空的,由於就像百度雲盤同樣,剛申請,沒有建立,因此是空的
⑧、建立存儲數據的 bucket (相似於存儲數據的目錄)要求 xxx_yyy 格式
[root@ceph-f ~]# s3cmd mb s3://cephdir
發現報錯了,看上圖,發現,出錯是由於咱們的寫的格式不正確,按照正確的格式從新書寫,再來一次
[root@ceph-f ~]# s3cmd mb s3://ceph_dir
如上圖,成功了
⑨、再次查看客戶端內容
[root@ceph-f ~]# s3cmd ls
這裏提供 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
swift -A http://192.168.20.148/auth/v1.0 -U radosgw:swift -K NhTk42HlMcAnv2GBXqatqMPeI20eSLod30AOJLwl stat -v
這裏提供 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 對象存儲目前尚不不穩定,且官方文檔較舊,這裏只作大概講解,不作深刻研究。