CEPH之對象存儲


一、官方文檔

http://docs.ceph.org.cn/
http://docs.ceph.org.cn/radosgw/

二、安裝 CEPH 對象網關

自從 firefly (v0.80) 版本開始,Ceph 對象網關運行在 Civetweb 上(已經集成進守護進程 ceph-radosgw ),而不再是 Apache 和 FastCGI 之上。使用 Civetweb簡化了Ceph對象網關的安裝和配置。
# 操作文檔
http://docs.ceph.org.cn/install/install-ceph-gateway/

2.1、部署

# 1、在管理節點的工作目錄下,給 Ceph 對象網關節點安裝Ceph對象所需的軟件包
[root@node1 ~]# yum install -y ceph-radosgw  # 之前在三個節點都安裝過了

# 2、部署rgw
[root@node1 ~]# cd /app/ceph-deploy/ceph-deploy/
[root@node1 ceph-deploy]# ceph-deploy rgw create node1

# 3、報錯解決(查看日志)
[root@node1 ceph-deploy]# tail -f /var/log/ceph/ceph-client.rgw.node1.log 
###
ceph.conf 配置文件加上
mon_max_pg_per_osd = 1000
###

# 4、推送配置文件,然后重啟
[root@node1 ceph-deploy]# ceph-deploy  --overwrite-conf  admin node1 node2 node3  # (node1執行)
[root@node1 ceph-deploy]# sudo systemctl restart ceph.target      # (這個三個節點都重啟)

# 5、端口檢查
[root@node1 ceph-deploy]# ss -ntl | grep 7480 
LISTEN     0      128          *:7480                     *:*                  
LISTEN     0      128         :::7480                    :::*  

# 6、curl一下(出現一下情況是正常的了)
[root@node1 ceph-deploy]# curl http://node1:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult

2.2、在任何時候如果你遇到麻煩,而你也想重新來一次,執行下面的命令來清除配置

ceph-deploy purge <gateway-node1> [<gateway-node2>]
ceph-deploy purgedata <gateway-node1> [<gateway-node2>]

2.3、修改網關默認端口

# 1、在ceph.conf 末尾加上
[root@node1 ceph-deploy]# vim ceph.conf 
[client.rgw.node1]
rgw_frontends = "civetweb port=80"

# 2、推送文件
[root@node1 ceph-deploy]# ceph-deploy --overwrite-conf config push node1 node2 node3 

# 3、重啟
[root@node1 ceph-deploy]# systemctl restart ceph.target      # (這個三個節點都重啟)

# 4、測試是否更改成功
[root@node1 ceph-deploy]# curl http://node1:80
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>[root@node1

2.4、使用對象存儲

為了使用 REST 接口,首先需要為S3接口創建一個初始 Ceph 對象網關用戶。然后,為 Swift 接口創建一個子用戶。然后你需要驗證創建的用戶是否能夠訪問網關。
2.4.1、創建用戶,在 gateway host 上執行下面的命令
[root@node3 ~]# radosgw-admin user create --uid="ceph-s3-user" --display-name="Ceph S3 User Demo"        
{
    "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": "7W1JL897CI54324HN4GH",
            "secret_key": "pBqTKmOTBOPaCulchBzusudlIFJrlKqpH7L0mKcE"
        }
    ],
    "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": []
}

# 其他命令
[root@node3 ~]# radosgw-admin user list
[
    "ceph-s3-user"
]
[root@node3 ~]# radosgw-admin user info  --uid   ceph-s3-user
2.4.3、測試 S3 訪問

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

執行下面的步驟:

  1. 你需要安裝 python-boto 包:

    sudo yum install python-boto
    
  2. 新建 Python 腳本文件:

    vi s3test.py
    
  3. 將下面的內容添加到文件中:

    import boto
    import boto.s3.connection
    
    access_key = '7W1JL897CI54324HN4GH'
    secret_key = 'pBqTKmOTBOPaCulchBzusudlIFJrlKqpH7L0mKcE+ZDA'
    conn = boto.connect_s3(
            aws_access_key_id = access_key,
            aws_secret_access_key = secret_key,
            host = '{hostname}', port = {port},
            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}".format(
                        name = bucket.name,
                        created = bucket.creation_date,
     )
    

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

  4. 運行腳本:

    python s3test.py
    

    輸出類似下面的內容:

    my-new-bucket 2015-02-16T17:09:10.000Z
    


免責聲明!

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



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