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
    
原文地址:https://www.cnblogs.com/hsyw/p/14541028.html