zoukankan      html  css  js  c++  java
  • 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 文件至本地
    
    *************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
  • 相关阅读:
    Qt QApplication 类简介--Qt 类简介专题(四)
    回调函数
    C++类型转换总结
    Debug Error
    C++回调函数(callback)的使用
    Nokia5230连接电脑无线上网
    photoshop cs6\cs5找不到扫描仪的解决办法(Twain_32.8BA补丁下载)
    UML类图几种关系的总结
    实现单点登录
    poj 1151Atlantis线段树求矩形面积并解题报告
  • 原文地址:https://www.cnblogs.com/lvzhenjiang/p/14890750.html
Copyright © 2011-2022 走看看