ceph存储接口-S3API和rados
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相关推荐
- ceph存储原理_赠书 | Linux 开源存储全栈详解——从Ceph到容器存储
// 留言点赞赠书我有书,你有故事么?留言说出你的存储故事留言点赞前两名,免费送此书截止日期12.27号12.30号公布名单 // 内容简介 本书致力于帮助读者形成有关Linux开源存储世界的细致的拓 ...
- Ceph 存储集群5-数据归置
一.数据归置概览 Ceph 通过 RADOS 集群动态地存储.复制和重新均衡数据对象.很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的 OSD 之上,所以 Ceph 的运营需要些 ...
- Ceph -存储部署 ;
一 . Ceph存储系统概述 Ceph是呼声很高的开源分布式的SDS产品存储系统. 同时提供对象存储.块存储和文件系统存储 三种功能,满足不同应用需求. Ceph使用C++语言开发,遵循LGPL协议开 ...
- 通过Charmed Ceph 在 H3C UniServer R4950 G5 服务器上 部署独立的Ubuntu Ceph 存储集群
摘要 本文档提供了一个独立Ceph集群的构架参考,部署及各种访问方法.本测试在4台H3C UniServer R4950 G5服务器上构建了一个独立的可扩展.可靠和容错的Ceph存储集群.可以同时对外 ...
- Kubernetes 集群基于 Rook 的 Ceph 存储之块设备、文件系统、对象存储
文章目录 1.Rook & Ceph 介绍 2.环境.软件准备 3.Block 块存储 3.1.创建 CephBlockPool.StorageClass 3.2.验证并测试 4.File S ...
- ceph(2)--Ceph RBD 接口和工具
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- 理解 OpenStack + Ceph (3):Ceph RBD 接口和工具 [Ceph RBD API and Tools]
本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...
- 初试 Ceph 存储之块设备、文件系统、对象存储
目录 Ceph 存储介绍 环境.软件准备 Ceph 块设备 Ceph 文件系统 Ceph 对象存储 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠 ...
- ceph(存储之块设备、文件系统、对象存储)
1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件系统.它可靠性高.管理方便.伸缩性强,能够轻松应对PB.EB级别数据.Ceph 存储体系中,核心为 RADOS, ...
最新文章
- 数据中心防雷SPD技术漫谈
- php中一个经典的!==的用法
- redis入门(数据类型)
- 【C 语言】字符串模型 ( 键值对模型 )
- FreeRTOS临界区应用与总结
- Python之一行代码
- 文科生的数据分析:亲测有效,真香!!!
- 想靠大数据创业 你需要了解什么
- java string逆序_java经典入门算法题,java初学者必备
- 面向对象——类设计(二)
- 高并发下的HashMap
- 金融现金贷用户数据分析和用户画像
- c语言编程电影院票务系统,C++课程设计----电影院售票系统
- JSP的九大内置对象
- 微信小程序分享功能的实现
- python画图星空_编程从绘画开始:用Python画一幅《月夜星空》图
- WKWebView 如何支持window.open方法
- 24个最新创意进度条设计,分分钟让你灵感爆表!!!
- 小程序任务栏「最近使用」变两行,张小龙说得对,这里确实不是「入口」
- 无法从服务器中获取信息吗,无法从服务器获取信息