Ceph對象網關快速入門


  安裝Ceph對象網關

  1,在 client-node 上執行預安裝步驟。如果你打算使用 Civetweb 的默認端口 7480 ,必須通過 firewall-cmd 或 iptables 來打開它。

  2,從管理節點的工作目錄,在client-node上安裝對象網關軟件包。

ceph-deploy install --rgw <client-node> [<client-node> ...]

   注意:ceph-client為可以連接的主機名或者IP地址,最好設置好ssh免密,否則需要輸入密碼才能進行安裝

      最好在對應節點設置好yum源使用以下命令安裝,否則安裝很慢或者安裝失敗

yum -y update && yum -y install ceph-radosgw 

   新建對象網關實例

ceph-deploy rgw create {node_name}

   例如

 ceph-deploy rgw create node1

   查看

[root@admin-node my-cluster]# ceph -s
  cluster:
    id:     8dc0f409-70c1-4499-94a9-466abdf4f30d
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum node1,node2,node3 (age 30m)
    mgr: node1(active, since 35m), standbys: node2
    mds:  1 up:standby
    osd: 3 osds: 3 up (since 19h), 3 in (since 19h)
    rgw: 1 daemon active (node1) #一個對象網關運行在node1上
 
  task status:
 
  data:
    pools:   5 pools, 256 pgs
    objects: 235 objects, 14 MiB
    usage:   3.0 GiB used, 45 GiB / 48 GiB avail
    pgs:     256 active+clean

   一旦網關開始運行,你就可以通過 7480 端口來訪問它(比如 http://client-node:7480 )。

  配置 CEPH 對象網關實例

  1,通過修改 Ceph 配置文件可以更改默認端口(比如改成 80 )。增加名為 [client.rgw.<client-node>] 的小節,把 <client-node> 替換成你自己 Ceph 客戶端節點的短名稱(即 hostname -s 的輸出)。例如,你的節點名就是 client-node ,在 [global] 節后增加一個類似於下面的小節:

[client.rgw.client-node]
rgw_frontends = "civetweb port=80"

   例如修改配置文件

[global]
fsid = 8dc0f409-70c1-4499-94a9-466abdf4f30d
mon_initial_members = node1
mon_host = 192.168.1.101
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 2
public network = 192.168.1.0/24
mon_allow_pool_delete = true
#增加以下兩行
[client.rgw.node1]
rgw_frontends = "civetweb port=80"

   2,為了使新端口設置生效需要重啟Ceph對象網關

  如果是在管理節點修改了配置還需要先同步配置至網關節點

 ceph-deploy --overwrite-conf admin client-node

   重啟對象網關

 systemctl restart ceph-radosgw.target

   你應該可以生成一個未授權的請求,並收到應答。例如,一個如下不帶參數的請求:

http://<client-node>:80

   應該收到這樣的應答:

<ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<Owner>
<ID>anonymous</ID>
<DisplayName/>
</Owner>
<Buckets/>
</ListAllMyBucketsResult>

   使用網關

  為了使用 REST 接口,首先需要為S3接口創建一個初始 Ceph 對象網關用戶。然后,為 Swift 接口創建一個子用戶。然后你需要驗證創建的用戶是否能夠訪問網關。

  為 S3 訪問創建 RADOSGW 用戶

  一個``radosgw`` 用戶需要被新建並被分配權限。命令 man radosgw-admin 會提供該命令的額外信息。

  為了新建用戶,在 gateway host 上執行下面的命令:

sudo radosgw-admin user create --uid="testuser" --display-name="First User"

   命令解析

radosgw-admin 
user create #創建用戶     
--uid="testuser"  #用戶名為testuser
--display-name="First User" #用戶顯示名為First User

   刪除用戶

radosgw-admin user  rm --uid=testuser

   注意:刪除用戶需要確保沒有使用該用戶創建的bucket,如果創建了bucket需要先刪除bucket才能刪除用戶,如果bucket內有文件需要先刪除文件才能刪除bucket

  創建用戶輸入類似以下內容

[root@admin-node ~]# radosgw-admin user create --uid="testuser" --display-name="First User"
{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "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": []
}

   

Note 其中 keys->access_key 和``keys->secret_key`` 的值在訪問的時候需要用來做驗證

   注意

Important 請檢查輸出的 key。有個時候 radosgw-admin 會在生成的JSON 中的 access_key 和和 secret_key 部分包含有轉義字符 \ ,並且一些客戶端不知道如何處理 JSON 中的這個字符。補救措施包括移除 JSON 中的 \ 字符,將該字符串封裝到引號中,重新生成這個 key 並確保不再包含 \ ,或者手動指定``access_key`` 和和 secret_key 。如果 radosgw-admin 生成的 JSON 中的同一個key中包含轉義字符 \ 同時包含有正斜杠 / 形如 \/ ,請只移除 JSON 轉義字符 \ ,不要刪除正斜杠 / ,因為在 key 中它是一個有效字符。

   新建一個Swift子用戶

  如果你想要使用這種方式訪問集群,你需要新建一個 Swift 子用戶。創建 Swift 用戶包括兩個步驟。第一步是創建用戶。第二步是創建 secret key。

  新建swift用戶

radosgw-admin subuser create --uid=testuser --subuser=testuser:swift --access=full

   參數解析

radosgw-admin 
subuser create #創建子用戶 
--uid=testuser #上層用戶是testuser
--subuser=testuser:swift #子用戶id
 --access=full #權限是所有

 

  輸入類似下面這樣

{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "GYDZVA9SejxTIIQlXo19eg0veJSC0dUk33Yk8zpL"
        }
    ],
    "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": []
}

 

 

 

   新建 secret key:

sudo radosgw-admin key create --subuser=testuser:swift --key-type=swift --gen-secret

   輸出類似下面這樣

{
    "user_id": "testuser",
    "display_name": "First User",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "subusers": [
        {
            "id": "testuser:swift",
            "permissions": "full-control"
        }
    ],
    "keys": [
        {
            "user": "testuser",
            "access_key": "5YE82KZNJLIINFF3BHJQ",
            "secret_key": "Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3"
        }
    ],
    "swift_keys": [
        {
            "user": "testuser:swift",
            "secret_key": "LGTP6OUjHgxL7pWLplislHMsSTNr0bZRsgDnLdlT"
        }
    ],
    "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": []
}

   驗證訪問

  測試s3訪問

  為了驗證 S3 訪問,你需要編寫並運行一個 Python 測試腳本。S3 訪問測試腳本將連接 radosgw, 新建一個新的 bucket 並列出所有的 buckets。 aws_access_key_id 和 aws_secret_access_key 的值來自於命令``radosgw_admin`` 的返回值 access_key 和 secret_key 。

  執行以下步驟

  1,你需要安裝python-boto包

sudo yum install python-boto

   2,新建Python腳本文件

vi s3test.py

   3,將下面的內容添加到文件中:

import boto.s3.connection

access_key = '5YE82KZNJLIINFF3BHJQ'
secret_key = 'Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3'
conn = boto.connect_s3(
        aws_access_key_id=access_key,
        aws_secret_access_key=secret_key,
        host='192.168.1.101', port=80,
        is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(),
       )

bucket = conn.create_bucket('my-new-bucket')
for bucket in conn.get_all_buckets():
    print "{name} {created}".format(
        name=bucket.name,
        created=bucket.creation_date,
    )

   將 {hostname} 替換為你配置了網關服務的節點的主機名。比如 gateway host. 將 {port} 替換為對象網關所使用的端口。

  4,運行腳本

  輸出以下內容

  創建新的bucket

[root@admin-node ~]# python s3test.py 
my-new-bucket 2020-08-07T07:47:17.399Z

   使用s3cmd測試訪問對象網關

  第一步安裝測試工具並編寫配置文件

yum install s3cmd

   配置文件,key為用戶testuser對應的key

[root@admin-node ~]# cat /root/.s3cfg 
[default]
access_key = 5YE82KZNJLIINFF3BHJQ
secret_key = Hek58VS56X47FUeq5UACKAONqIvD6SWxWQZ06Az3
host_base = 192.168.1.101:80
host_bucket = 192.168.1.101:80/%(bucket)
cloudfront_host = 192.168.1.101:80
use_https = False

   列出所有bucket

[root@admin-node ~]# s3cmd ls
2020-08-07 07:47  s3://my-new-bucket

   創建bucket

s3cmd mb s3://test_bucket

   創建后在查看

[root@admin-node ~]# s3cmd ls
2020-08-07 07:47  s3://my-new-bucket
2020-08-07 08:05  s3://test_bucket

   上傳文件至bucket

[root@admin-node ~]# s3cmd put /etc/fstab s3://test_bucket/

   下載文件至當前目錄

 s3cmd get s3://test_bucket/fstab

 

  測試Swift訪問

  Swift 訪問的驗證則可以使用``swift`` 的命令行客戶端。可以通過命令 man swift 獲取更多命令行選項的更多信息。

   執行下面的命令安裝 swift 客戶端

sudo yum install python-setuptools
sudo easy_install pip
sudo pip install --upgrade setuptools
sudo pip install --upgrade python-swiftclient

   注意:如果是Python3版本 easy_install命令類似於easy_install-3.6

  執行下面的命令驗證 swift 訪問:

swift -A http://{IP ADDRESS}:{port}/auth/1.0 -U testuser:swift -K '{swift_secret_key}' list

   使用網關服務器的外網 IP 地址替換其中的 {IP ADDRESS} ,使用新建 swift 用戶時執行的命令 radosgw-admin key create 的輸出替換其中的 {swift_secret_key} 。使用你的 Civetweb 所使用的端口替換其中 {port} ,比如默認是 7480 。如果你不替換這個端口,它的默認值是 80. 舉例如下:

 swift -A http://192.168.1.101:80/auth/1.0 -U testuser:swift -K 'LGTP6OUjHgxL7pWLplislHMsSTNr0bZRsgDnLdlT' list

   輸出如下

my-new-bucket

   

  


免責聲明!

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



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