ceph存儲之OSS對象存儲


一、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檢索數據。

2021-06-13_173926

沒有特殊聲明,在 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

輸出如下:

2021-06-13_223616

$ 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"

上述命令執行成功后,輸出如下:

2021-06-16_105553

如果沒有保存也沒關系,后續可以使用如下命令去查詢:

$ 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擁有所有權限的用戶

返回的結果如下:

2021-06-16_110431

$ radosgw-admin key create --subuser=ceph-s3-user:swift --key-type=swift --gen-secret
# 生成 ceph-s3-user:swift 對應的secret_key

返回的結果如下:

2021-06-16_110612

四、訪問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  # 進入配置

按照圖中進行相應的配置(根據實際情況進行修改)!

2021-06-16_171027

$ sed -i 's#signature_v2 = .*#signature_v2 = True#g' /root/.s3cfg
# 修改配置文件  如果不修改,那么使用命令行時,會報錯 403
# 查看s3cmd支持的操作
$ s3cmd -h

返回的部分結果如圖:

2021-06-16_171608

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 文件至本地


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM