前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Ceph Swift Api 配置与使用(三)

Ceph Swift Api 配置与使用(三)

作者头像
Lansonli
修改2022-04-28 08:47:39
8400
修改2022-04-28 08:47:39
举报
文章被收录于专栏:Lansonli技术博客

Ceph Swift Api 配置与使用

一、Ceph Swift Api 说明

在 ceph 的使用上, 互联网大规模的文件场景下, fs 并不能满足生产的使用要求, rados 本地化操作也不便于服务的接入与使用, 这里我们就要采用 Ceph Swift Api 来实现文件的存储管理。

二、Ceph Swift Api 特点

Swift 是由 Rackspace 开发,用来为云计算提供可扩展存储的项目。专注于对象存储, 并提供一套 REST风格的Api 来访问, 与 Ceph 强一致性不同, 它是最终一致性。两者都是优秀的开源项目, 并无明显优劣之分,在使用场景上有所不同, 如果是专注于对象存储, 那么可以选择swift 即可满足需要, 如果还有块存储要求, 那么选择Ceph 更为合适。这里选择 Ceph , 因为通过网关可以适配兼容 swift api , 同时在数据访问上具有较强的扩展性:

  • Ceph可通过Rados网关用兼容S3的RESTful API访问,对AWS云环境下的其他内容也能很好的兼容, 比如OpenStack Swift的对象存储访问接口。
  • CephFS:是一个POSIX兼容的文件系统,可以在任何Linux发行版上运行,操作系统可直接访问Ceph存储。
  • RBD:RBD是一个Linux内核级的块设备,允许用户像任何其他Linux块设备一样访问Ceph。
  • ISCSI 网关: 这一增加的功能是SUSE加上去的,它允许管理员在Ceph之上运行iSCSI(互联网小型计算机系统接口)网关,从而将其转变为任何操作系统都可以访问的SAN(Storage Area Network,存储区域网络)文件管理器。

三、Ceph RGW 介绍

Ceph 可以提供块、文件和对象三种形态的存储。 RGW 就是提供对象存储的网关,也即对象存储网关。 所谓对象存储网关,也就是对象存储的入口,本质上是一个HTTP 服务器,与 Nginx 和 Apache 无特殊差别。通过这个网关入口,用户可以采用HTTP 协议,以 RESTful 的方式访问 Ceph 的对象存储。

四、Ceph 存储结构

在使用对象存储之前, 先要了解桶(container容器)概念及其存储结构:

Ceph Swift Api 的调用, 需要先创建相应用户进行认证才能操作, 每个用户下面可以创建多个桶, 桶里面可以存储对象,对象就是各种数据文件, 包括文档, 图片等。传统上传文件的使用, 我们往往会指 定路径信息, 在这里, 桶和对象的关系好比文件夹与文件的概念, 不同之处是桶不能再嵌套桶, 也就是没有层级路径的概念。

Ceph 存储结构 :

五、Ceph Swift Api 服务端的配置

1、确保集群正常安装并启动:

如果rgw没有显示, 检查服务状态:

代码语言:javascript
复制
systemctl list-unit-files|grep enabled|grep ceph

重启RGW服务:

代码语言:javascript
复制
ceph-deploy --overwrite-conf --ceph-conf ceph.conf rgw create CENTOS7-1
systemctl restart ceph-radosgw@*.service

2、验证网关是否正常

访问地址, http://192.168.88.161:7480

出现以下提示代表正常

3、创建Swift用户, 用于接口请求认证 

代码语言:javascript
复制
sudo radosgw-admin user create --subuser="cephtester:subtester" --uid="cephtester" --display-name="cephtester" --key-type=swift --secret="654321" --access=full

uid 为主用户, subuser 为子用户信息, secret 指定密钥, 不指定则随机生成, access 拥有权限设定。

返回结果:

代码语言:javascript
复制
[root@CENTOS7-1 ceph-cluster]# sudo radosgw-admin user create --subuser="cephtester:subtester" --uid="cephtester" --display-name="cephtester" --key-type=swift --secret="654321" --access=full
{
    "user_id": "cephtester",
    "display_name": "cephtester",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [
        {
            "id": "cephtester:subtester",
            "permissions": "full-control"
        }
    ],
    "keys": [],
    "swift_keys": [
        {
            "user": "cephtester:subtester",
            "secret_key": "654321"
        }
    ],
    "caps": [],
    "op_mask": "read, write, delete",
    "default_placement": "",
    "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": []
}

记住swift_keys下面的user和secret_key信息, 代码中需使用。

4、激活管理后台的对象存储模块:

5、创建一个管理用户:

代码语言:javascript
复制
radosgw-admin user create --uid=mgruser --display-name=mgruser --system

返回结果:

代码语言:javascript
复制
[root@CENTOS7-1 ceph-cluster]# radosgw-admin user create --uid=mgruser --display-name=mgruser --system
{
    "user_id": "mgruser",
    "display_name": "mgruser",
    "email": "",
    "suspended": 0,
    "max_buckets": 1000,
    "auid": 0,
    "subusers": [],
    "keys": [
        {
            "user": "mgruser",
            "access_key": "W462B8SE31NDCOQR4E6I",
            "secret_key": "XPZcugMWRhYccFlEPIHKcyFVr73grVuiJgFD4rDR"
        }
    ],
    "swift_keys": [],
    "caps": [],
    "op_mask": "read, write, delete",
    "system": "true",
    "default_placement": "",
    "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": []
}

根据生成的access_key与secret_key, 执行:

代码语言:javascript
复制
ceph dashboard set-rgw-api-access-key W462B8SE31NDCOQR4E6I 
ceph dashboard set-rgw-api-secret-key XPZcugMWRhYccFlEPIHKcyFVr73grVuiJgFD4rDR

打开管理界面,https://192.168.88.161:18843 可以查看到我们刚才创建的两个用户:

六、Ceph Swift Api 调用验证

1、创建ceph-demo工程:

增加SwiftOperator接口:

代码语言:javascript
复制
@Component
public class SwiftOperator {

    /**
     * 用户名信息, 格式: 主用户名:子用户名
     */
    private String username ="cephtester:subtester";

    /**
     * 用户密码
     */
    private String password = "654321";

    /**
     * 接口访问地址
     */
    private String authUrl = "http://192.168.88.161:7480/auth/1.0";

    /**
     * 默认存储的容器名称(bucket)
     */
    private String defaultContainerName = "user_datainfo";

    /**
     * Ceph的账户信息
     */
    private Account account = null;

    /**
     * Ceph的容器信息
     */
    private Container container;

    /**
     * 进行Ceph的初始化配置
     */
    public SwiftOperator() {
        // 1. Ceph的账户信息配置
        AccountConfig config = new AccountConfig();
        config.setUsername(username);
        config.setPassword(password);
        config.setAuthUrl(authUrl);
        config.setAuthenticationMethod(AuthenticationMethod.BASIC);
        account = new AccountFactory(config).createAccount();

        // 2.获取容器信息
        Container newContainer = account.getContainer(defaultContainerName);
        if(!newContainer.exists()) {
            container = newContainer.create();
            System.out.println("container create ==> " + defaultContainerName);
        }else {
            container = newContainer;
        }

    }

    /**
     * 文件上传处理
     * @param remoteName
     * @param filePath
     */
    public void createObject(String remoteName, String filePath) {
        // 1. 从容器当中获取远程存储对象信息
        StoredObject object = container.getObject(remoteName);
        // 2. 执行文件上传处理
        object.uploadObject(new File(filePath));
    }


    /**
     * 文件的下载处理
     * @param objectName
     * @param outPath
     */
    public void retrieveObject(String objectName, String outPath) {
        // 1. 从容器当中获取远程存储对象信息
        StoredObject object = container.getObject(objectName);
        // 2. 执行文件的下载方法
        object.downloadObject(new File(outPath));

    }

    /**
     * 获取用户下面的所有容器信息
     * @return
     */
    public List listContainer() {
        List list = new ArrayList();
        Collection<Container> containers = account.list();
        for(Container container : containers) {
            list.add(container.getName());
            System.out.println("current container name : " + container.getName());
     }
        return list;
    }


}

这里的用户名和密码填写上面我们所生成的信息。注意路径地址后缀为: /auth/1.0

CephDemoApplication启动类,测试验证:

代码语言:javascript
复制
@SpringBootApplication
@ComponentScan(basePackages = {"cn.it"})
public class CephDemoApplication {


    public static void main(String[] args) throws Exception  {

        // Swift Api接口调用验证
        swiftApi();
    }


    /**
     * 通过Swift接口操作ceph集群
     * @throws Exception
     */
    public static void swiftApi() throws Exception  {

        ConfigurableApplicationContext appContext =  SpringApplication.run(CephDemoApplication.class);
        // 1. 先打印出用户的容器信息
        SwiftOperator swiftOperator = appContext.getBean(SwiftOperator.class);
        swiftOperator.listContainer();

        String objName = "test_ceph";
        // 2. 上传指定的文件
        swiftOperator.createObject(objName, "E:\\test\\upload\\test_swift_ceph.txt");
        // 3. 从ceph下载文件到指定的路径下面
        swiftOperator.retrieveObject(objName, "E:\\test\\download\\test_swift_ceph.txt");

        System.out.println("complete");

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ceph Swift Api 配置与使用
    • 一、Ceph Swift Api 说明
      • 二、Ceph Swift Api 特点
        • 三、Ceph RGW 介绍
          • 四、Ceph 存储结构
            • 五、Ceph Swift Api 服务端的配置
              • 1、确保集群正常安装并启动:
              • 2、验证网关是否正常
              • 3、创建Swift用户, 用于接口请求认证 
              • 4、激活管理后台的对象存储模块:
              • 5、创建一个管理用户:
            • 六、Ceph Swift Api 调用验证
              • 1、创建ceph-demo工程:
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档