rados以及s3api测试和使用ceph

本文介绍了如何使用Java的rados库进行Ceph存储操作,包括创建集群句柄、写入数据,并展示了通过Python的rados和S3 API进行类似操作的方法。涵盖了从配置到实际操作的详细步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用Java-rados库往进存数据

1.1 准备工作

如果使用RGW下层的librados操作ceph,Java代码必须要用到rados.jar这个库,并且要安装jna,sudo yum install jna -y。
在Linux里,复制该JAR文件到公共目录 (例如 /usr/share/java) ,设置这两个 JAR 链接 JVM Class path,连接操作如下:

#安装rados-java,或者直接把编译好的rados.jar拷贝过来
sudo yum install jna
git clone --recursive https://github.com/ceph/rados-java.git
cd rados-java-master
mvn install -Dmaven.test.skip=true
#复制该JAR文件到公共目录 (例如 /usr/share/java) ,并且确认该文件和JNA JAR在你的JVM’s classpath目录中.
sudo cp target/rados-0.6.0.jar /usr/share/java/rados-0.6.0.jar
sudo ln -s /usr/share/java/jna.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64/jre/lib/ext/jna.jar
sudo ln -s /usr/share/java/rados-0.6.0.jar  /usr/lib/jvm/default-java/jre/lib/ext/rados-0.6.0.jar
  • rados.jar不太好下载,我从GitHub上下载了源码,用maven编译出了jar,直接用就行

  • csdn rados-0.7.0.jar下载地址

  • maven依赖如下,jna的依赖要和通过yum安装的版本(3.5.2)一致,否则会报错

		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna</artifactId>
			<version>3.5.2</version>
		</dependency>
		
		<dependency>
			<groupId>com.ceph</groupId>
			<artifactId>rados</artifactId>
			<version>0.7.0</version>
		</dependency>

1.2 测试代码

代码功能是显示创建集群句柄,读取配置文件,连接集群,打印之前存进去的对象名。
运行:java -jar java-rados.jar cug.CephClient
新存的对象之一是kyle-say:Hello World!,输入命令限制kyle-say的value结果如图,可见存储成功。
查看刚才存进去的对象kyle-say的内容:sudo rados -p data get kyle-say -

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!";
            io.write(oidone, contentone);
            //存一个字符串对象
            String oidtwo = "my-object";
            String contenttwo = "This is my object.";
            io.write(oidtwo, contenttwo);
            //打印之前存进去的对象名字
            String[] objects = io.listObjects();
            for (String object: objects)
                System.out.println("Put " + object);

          /* io.remove(oidone);
             io.remove(oidtwo); */

            cluster.ioCtxDestroy(io);

        } catch (RadosException e) {
            System.out.println(e.getMessage() + ": " + e.getReturnValue());
        }
    }
}

2.使用python-rados库往进存数据和操作ceph

2.1 把当前目录下的test.mp4存到data pool

import sys,rados,rbd
cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
cluster.connect()
ioctx = cluster.open_ioctx('data')
path = {flie-name}
file_name = path
f = open(path, "r")
file_content = f.read()
f.close()
ioctx.write_full(file_name, file_content)
object_iterator = ioctx.list_objects()
while True :
    try :
        rados_object = object_iterator.next()
        print ("Object contents = " + rados_object.key)
    except StopIteration :

        break
ioctx.close()
cluster.shutdown()

2.2 列举当前pool,创建data2 pool

import rados

cluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
cluster.connect()
pools = cluster.list_pools()
for pool in pools:
    print pool
    
cluster.create_pool('data2')
print '=============='

pools = cluster.list_pools()
for pool in pools:
    print pool

3. 使用python S3API存数据

在这里插入图片描述
代码里的access_key,secret_key是你创建rgw子用户时候生成的,

import boto
import boto.s3.connection
from boto.s3.key import Key

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 = conn.get_bucket('lt1_bucket')
k = Key(bucket)
k.key = 'test_file'
filename = '004.jpg'
k.set_contents_from_filename(filename)                                 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值