一、ceph對象存儲簡介
Ceph對象網關是一個對象存儲接口,建立在此基礎之上, librados以為應用程序提供通往Ceph存儲集群的RESTful網關。
Ceph對象存儲支持兩個接口:
- 與S3兼容:為對象存儲功能提供與Amazon S3 RESTful API的大部分子集兼容的接口。
- 兼容Swift:為對象存儲功能提供與OpenStack Swift API的大部分子集兼容的接口。
Ceph對象存儲使用Ceph對象網關守護進程(radosgw),它是用於與Ceph存儲群集進行交互的HTTP服務器。由於它提供與OpenStack Swift和Amazon S3兼容的接口,因此Ceph對象網關具有自己的用戶管理。Ceph對象網關可以將數據存儲在用於存儲來自Ceph文件系統客戶端或Ceph塊設備客戶端的數據的同一Ceph存儲群集中。S3和Swift API共享一個公共的名稱空間,因此可以使用一個API編寫數據,而使用另一個API檢索數據。
沒有特殊聲明,在 ceph-node-11 節點上執行
二、部署RGW存儲網關
在上面的介紹中有提到,Ceph對象存儲使用Ceph對象網關守護進程(radosgw),它是用於與Ceph存儲群集進行交互的HTTP服務器。所以我們需要先安裝ceph-radosgw。
此博文基於部署ceph集群 (Nautilus版)進行操作。
$ yum -y install ceph-radosgw
$ cd ~/ceph-deploy # 必須進入此目錄下
$ ceph-deploy rgw create ceph-node-11
# 將 ceph-node-11 設置為 radosgw
輸出如下:
$ ceph -s # 查看集群狀態,多了一個rgw服務
cluster:
id: 5c52998e-a8a2-4602-b3ea-cff2af43b128
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 2m)
mgr: ceph-node-11(active, since 4m), standbys: ceph-node-12, ceph-node-13
osd: 3 osds: 3 up (since 3m), 3 in (since 3m)
rgw: 1 daemon active (ceph-node-11)
task status:
data:
pools: 4 pools, 128 pgs
objects: 187 objects, 1.2 KiB
usage: 3.0 GiB used, 297 GiB / 300 GiB avail
pgs: 128 active+clean
$ ss -lnpt | grep 7480 # 確認端口在監聽
LISTEN 0 128 *:7480 *:* users:(("radosgw",pid=20059,fd=45))
LISTEN 0 128 :::7480 :::* users:(("radosgw",pid=20059,fd=46))
$ ceph osd lspools # radosgw部署成功后,會自動增加幾個資源池
1 .rgw.root
2 default.rgw.control
3 default.rgw.meta
4 default.rgw.log
2.1 修改rgw的默認監聽端口
2.1.1 修改配置文件
$ cd ~/ceph-deploy
$ vim ceph.conf
# 增加如下配置
# 將 ceph-node-11 替換為你rgw所在節點的主機名
[client.rgw.ceph-node-11]
rgw_frontends = "civetweb port=80"
2.1.2 替換配置文件
# 將后面三個替換為你ceph集群中的所有節點
$ ceph-deploy --overwrite-conf config push ceph-node-11 ceph-node-12 ceph-node-13
2.1.3 重啟生效
$ systemctl restart ceph-radosgw.target
$ ss -lnpt | grep radosgw # 確認端口已修改
LISTEN 0 128 *:80 *:* users:(("radosgw",pid=21549,fd=44))
三、創建ceph對象網關用戶
若想使用對象網關,必須先在radosgw里創建一個用戶。
創建的用戶分兩種類型:
- S3風格的;
- SWIFT風格的;
3.1 創建用於S3訪問的RADOSGW用戶
$ radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo"
上述命令執行成功后,輸出如下:
如果沒有保存也沒關系,后續可以使用如下命令去查詢:
$ radosgw-admin user list # 查看用戶列表
[
"ceph-s3-user"
]
$ radosgw-admin user info --uid ceph-s3-user
{
"user_id": "ceph-s3-user",
"display_name": "Ceph S3 User Demo",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "ceph-s3-user",
"access_key": "CMED3NGU5LG41XITKNJO",
"secret_key": "yukR3jibKtIHQmLwanK6wsSUCiXWuwjPJLUhAORq"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"default_placement": "",
"default_storage_class": "",
"placement_tags": [],
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"user_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
},
"temp_url_keys": [],
"type": "rgw",
"mfa_ids": []
}
3.2 創建用於SWIFT訪問的RADOSGW用戶
swift用戶需要基於上面s3創建的用戶來創建,所以在創建swift類型的用戶前,需要保證有如下用戶:
$ radosgw-admin user list # 確保有一個可用賬戶
[
"ceph-s3-user"
]
$ radosgw-admin subuser create --uid ceph-s3-user --subuser=ceph-s3-user:swift --access=full
# 基於ceph-s3-user用戶創建swift擁有所有權限的用戶
返回的結果如下:
$ radosgw-admin key create --subuser=ceph-s3-user:swift --key-type=swift --gen-secret
# 生成 ceph-s3-user:swift 對應的secret_key
返回的結果如下:
四、訪問radosgw驗證賬戶
4.1 測試S3結構訪問
4.1.1 使用python腳本驗證
需要編寫並運行Python測試腳本來驗證S3訪問。S3訪問測試腳本將連接到radosgw,創建一個新存儲桶並列出所有存儲桶。
$ yum -y install python-boto # 安裝腳本依賴
# 測試腳本如下
# 請自行替換 access_key、secret_key、host、port 為你實際的值
$ cat > s3test.py << EOF
import boto.s3.connection
access_key = 'CMED3NGU5LG41XITKNJO'
secret_key = 'yukR3jibKtIHQmLwanK6wsSUCiXWuwjPJLUhAORq'
conn = boto.connect_s3(
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
host='192.168.99.11', port=80,
is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
)
bucket = conn.create_bucket('ceph-s3-bucket')
for bucket in conn.get_all_buckets():
print "{name} {created}".format(
name=bucket.name,
created=bucket.creation_date,
)
EOF
$ python s3test.py # 執行腳本,輸出如下表示訪問成功
ceph-s3-bucket 2021-06-16T03:11:09.599Z
4.1.2 使用命令行驗證
$ yum -y install s3cmd # 安裝依賴工具
$ s3cmd --configure # 進入配置
按照圖中進行相應的配置(根據實際情況進行修改)!
$ sed -i 's#signature_v2 = .*#signature_v2 = True#g' /root/.s3cfg
# 修改配置文件 如果不修改,那么使用命令行時,會報錯 403
# 查看s3cmd支持的操作
$ s3cmd -h
返回的部分結果如圖:
4.2 s3cmd常用命令
$ s3cmd mb s3://s3cmd-demo
# 創建一個名為 s3cmd-demo 的bucket
$ s3cmd ls # 查看bucket 列表
2021-06-16 03:11 s3://ceph-s3-bucket
2021-06-16 10:54 s3://s3cmd-demo
$ s3cmd put /etc/fstab s3://s3cmd-demo/fstab
# 上傳文件至bucket
$ s3cmd get s3://s3cmd-demo/fstab
# 下載文件(默認下載到當前目錄)
$ s3cmd get s3://s3cmd-demo/fstab /tmp/fstab-t
# 下載至指定目錄,並重命名
$ s3cmd rm s3://s3cmd-demo/fstab # 刪除指定文件
$ s3cmd put /etc/ s3://s3cmd-demo/etc/ --recursive
# 上傳目錄至bucket
$ s3cmd rm s3://s3cmd-demo/etc/ --recursive
# 刪除指定目錄
4.3 測試swift用戶訪問
$ yum -y install python-setuptools python-pip
$ pip install --upgrade python-swiftclient -i https://mirrors.aliyun.com/pypi/simple/
# 安裝基礎工具
$ swift -A http://192.168.99.11:80/auth -U ceph-s3-user:swift \
-K ItD7PF3fB09I45JQIIxJDR1l4gKXc1bR8WHutwRF list
# 訪問驗證
# -A:指定認證URL
# -U:指定用戶名稱
# -K:指定用戶對應的 secret_key
ceph-s3-bucket
s3cmd-demo
$ cat > ~/.swift << EOF
export ST_AUTH=http://192.168.99.11:80/auth
export ST_USER=ceph-s3-user:swift
export ST_KEY=ItD7PF3fB09I45JQIIxJDR1l4gKXc1bR8WHutwRF
EOF
# 配置環境變量訪問
$ source ~/.swift # 刷新環境變量
$ swift list # 訪問驗證(查看bucket列表)
ceph-s3-bucket
s3cmd-demo
4.4 swift常用指令
$ swift post swift-demo # 創建一個bucket
$ swift list # 查看bucket列表
$ swift upload swift-demo /etc/passwd
# 上傳/etc/passwd 文件到swift-demo這個bucket
$ swift delete swift-demo etc/passwd
# 刪除文件
$ swift upload swift-demo /etc
# 上傳 /etc/ 目錄至swift-demo這個bucket
$ swift list swift-demo # 查看目錄內容
$ swift download swift-demo etc/passwd
# 下載 /etc/passwd 文件至本地