ceph常用的接口有librados和s3api,s3api与ceph对象网关RGW连接,往ceph集群存储数据,librados是对象网关RGW的下层,运行效率更高,性能更好。

1. librados

使用librados可以操作ceph集群,它提供了存储,读取,删除,列出所有对象等功能。

  • 在存储前,需要连接集群:
     Rados cluster = new Rados("admin");File f = new File("/etc/ceph/ceph.conf");cluster.confReadFile(f);cluster.connect();
  • 创建IO上下文,使用cluster.ioCtxCreate()方法,参数是要使用的存储池pool
 IoCTX io = cluster.ioCtxCreate("{yourpool}");
  • 最重要的存储方法是 io.write(),参数分别是:对象名,对象内容
      io.write(objectname, objectcontent);//如果要存储文件,需要把文件变成输入流传进去。如File ff = new File(path);  length = (int) ff.length();  byte[] data = new byte[length];   new FileInputStream(ff).read(data); io.write(oid,data,offset);
  • Java-rados demo:
import com.ceph.rados.IoCTX;
import com.ceph.rados.Rados;
import com.ceph.rados.exceptions.RadosException;
import java.io.File;public class CephClient {public static void main (String args[]){try {//创建集群句柄Rados cluster = new Rados("admin");System.out.println("Created cluster handle.");//读取配置文件File f = new File("/etc/ceph/ceph.conf");cluster.confReadFile(f);System.out.println("Read the configuration file.");//连接集群cluster.connect();System.out.println("Connected to the cluster.");//创建上下文IoCTX io = cluster.ioCtxCreate("data");//存一个字符串对象String oidone = "kyle-say";String contentone = "Hello World!";//存储使用write方法,参数为对象名和对象内容io.write(oidone, contentone);//打印之前存进去的对象名字String[] objects = io.listObjects();for (String object: objects){System.out.println("Put " + object);}//删除数据用的remove方法,参数为对象名io.remove(oidone);//存文件int length;File ff = new File("{file path}");length = (int) ff.length();byte[] data = new byte[length];new FileInputStream(ff).read(data);ioCTX.write("{文件名}",data);//关闭上下文cluster.ioCtxDestroy(io);} catch (RadosException e) {System.out.println(e.getMessage() + ": " + e.getReturnValue());}}
}
  • 官方文档: http://docs.ceph.org.cn/rados/api/librados-intro/

2. S3API

Ceph 支持 REST 风格的 API ,它与亚马逊 S3 API 的基本数据访问模型兼容。S3 API的pythondemo如下:

import boto
import boto.s3.connection
from boto.s3.key import Key#使用s3cfg文件里的access_key,secret_key,hostname确定连接那个机器
access_key = 'S2WEB1BIYXW35EX1YANG'
secret_key = 'bgp5OvRJ640LJ46x5m6UANoEMQ5WSyImou8AFJPv'#建立连接
conn = boto.connect_s3(aws_access_key_id = access_key,aws_secret_access_key = secret_key,host = 'ceph', port = 7480,is_secure=False, calling_format = boto.s3.connection.OrdinaryCallingFormat(),)#列出你的 bucket 的列表,也会打印出每个bucket的 bucket 名和创建时间
for bucket in conn.get_all_buckets():print "{name}\t{created}".format(name = bucket.name,created = bucket.creation_date,)#下面的代码会输出 bucket 内的所有对象列表。 这也会打印出每一个对象的名字、文件尺寸和最近修改时间
for key in bucket.list():print "{name}\t{size}\t{modified}".format(name = key.name,size = key.size,modified = key.last_modified,)
#删除bucket
conn.delete_bucket(bucket.name)#下面的代码会新建一个内容是字符串“Hello World!” 的文件 hello.txt。
key = bucket.new_key('hello.txt')
key.set_contents_from_string('Hello World!') #下面的代码会下载对象 perl_poetry.pdf 并将它存到指定路径,如/home/larry/documents/perl_poetry.pdf
key = bucket.get_key('perl_poetry.pdf')
key.get_contents_to_filename('/home/larry/documents/perl_poetry.pdf')#下面的代码会删除对象 goodbye.txt
bucket.delete_key('goodbye.txt')'''下面的代码会为 hello.txt 生成一个无签名为下载URL。
这个操作是生效是因为前面我们已经设置 hello.txt 的 ACL 为公开可读。
下面的代码同时会为 secret_plans.txt 生成一个有效时间是一个小时的带签名的下载 URL。
带签名的下载 URL 在这个时间内是可用的,即使对象的权限是私有(当时间到期后 URL 将不可用)。'''hello_key = bucket.get_key('hello.txt')
hello_url = hello_key.generate_url(0, query_auth=False, force_http=True)
print hello_urlplans_key = bucket.get_key('secret_plans.txt')
plans_url = plans_key.generate_url(3600, query_auth=True, force_http=True)
print plans_url
  • 官方文档:
    http://docs.ceph.org.cn/radosgw/s3/python/
    http://docs.ceph.org.cn/radosgw/s3/

ceph存储接口-S3API和rados相关推荐

  1. ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储

    // 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...

  2. Ceph 存储集群5-数据归置

    一.数据归置概览 Ceph 通过 RADOS 集群动态地存储.复制和重新均衡数据对象.很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的 OSD 之上,所以 Ceph 的运营需要些 ...

  3. Ceph -存储部署 ;

    一 . Ceph存储系统概述 Ceph是呼声很高的开源分布式的SDS产品存储系统. 同时提供对象存储.块存储和文件系统存储 三种功能,满足不同应用需求. Ceph使用C++语言开发,遵循LGPL协议开 ...

  4. 通过Charmed Ceph 在 H3C UniServer R4950 G5 服务器上 部署独立的Ubuntu Ceph 存储集群

    摘要 本文档提供了一个独立Ceph集群的构架参考,部署及各种访问方法.本测试在4台H3C UniServer R4950 G5服务器上构建了一个独立的可扩展.可靠和容错的Ceph存储集群.可以同时对外 ...

  5. Kubernetes 集群基于 Rook 的 Ceph 存储之块设备、文件系统、对象存储

    文章目录 1.Rook & Ceph 介绍 2.环境.软件准备 3.Block 块存储 3.1.创建 CephBlockPool.StorageClass 3.2.验证并测试 4.File S ...

  6. ceph(2)--Ceph RBD 接口和工具

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  7. 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  8. 初试 Ceph 存储之块设备、文件系统、对象存储

    目录 Ceph 存储介绍 环境.软件准备 Ceph 块设备 Ceph 文件系统 Ceph 对象存储 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠 ...

  9. ceph(存储之块设备、文件系统、对象存储)

    1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠性高.管理方便.伸缩性强,能够轻松应对PB.EB级别数据.Ceph 存储体系中,核心为 RADOS, ...

最新文章

  1. 数据中心防雷SPD技术漫谈
  2. php中一个经典的!==的用法
  3. redis入门(数据类型)
  4. 【C 语言】字符串模型 ( 键值对模型 )
  5. FreeRTOS临界区应用与总结
  6. Python之一行代码
  7. 文科生的数据分析:亲测有效,真香!!!
  8. 想靠大数据创业 你需要了解什么
  9. java string逆序_java经典入门算法题,java初学者必备
  10. 面向对象——类设计(二)
  11. 高并发下的HashMap
  12. 金融现金贷用户数据分析和用户画像
  13. c语言编程电影院票务系统,C++课程设计----电影院售票系统
  14. JSP的九大内置对象
  15. 微信小程序分享功能的实现
  16. python画图星空_编程从绘画开始:用Python画一幅《月夜星空》图
  17. WKWebView 如何支持window.open方法
  18. 24个最新创意进度条设计,分分钟让你灵感爆表!!!
  19. 小程序任务栏「最近使用」变两行,张小龙说得对,这里确实不是「入口」
  20. 无法从服务器中获取信息吗,无法从服务器获取信息

热门文章

  1. 关于WEB安全的知识
  2. 阿里云Centos服务器搭建mysql8.0.25
  3. 《Head First 设计模式》读书笔记六--克隆模式
  4. 智能优化算法 — 蜣螂优化算法(Dung beetle optimizer,DBO)
  5. C#枚举enum定义使用
  6. 内网学习——0x05 BloodHound 的使用
  7. Mycat 安装以及应用
  8. 深度学习:注意力机制与外部记忆
  9. C语言数据结构-第四章 串-电大同步进度
  10. 其实男人需要这样的女人,全天下男人的真心告白!