Ceph学习笔记

librados/c++/N版

2020-08-10  本文已影响0人  DaemonXiao
  1. 配置yum源
[root@localhost tmp.1xcFlvpxYF]# cat /etc/yum.repos.d/ceph.repo

[norch]

name=norch

baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/noarch/

enabled=1

gpgcheck=0

[x86_64]

name=x86 64

baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/x86_64/

enabled=1

gpgcheck=0

[SRPMS]

name=SRPMS

baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/SRPMS/

enabled=1

gpgcheck=0

[aarch64]

name=aarch64

baseurl=https://mirrors.aliyun.com/ceph/rpm-nautilus/el7/aarch64/

enabled=1

gpgcheck=0
  1. 安装librdos库
yum install libradospp-devel -y
  1. 示例cpp。注意:需要提前创建名为pool-1的pool
#include <rados/librados.hpp>

#include <string>

#include <list>

#include <iostream>

using namespace std;

int main(int argc, const char **argv)

{

 int ret = 0 ;

// Get cluster handle and connect to cluster

 std::cout<<"ceph Cluster connect begin."<<std::endl;

 std::string cluster_name("ceph");

 std::string user_name("client.admin");

 librados::Rados cluster ;

 ret = cluster.init2(user_name.c_str(), cluster_name.c_str(), 0);

 if (ret < 0)

 {

 std::cerr << "Couldn't initialize the cluster handle! error " << ret << std::endl;

 ret = EXIT_FAILURE;

 return 1;

 } else {

 std::cout << "Created a cluster handle." << std::endl;

 }

 ret = cluster.conf_read_file("/etc/ceph/ceph.conf");

 if (ret < 0)

 {

 std::cerr << "Couldn't read the Ceph configuration file! error " << ret << std::endl;

 ret = EXIT_FAILURE;

 return 1;

 } else {

 std::cout << "Read the Ceph configuration file Succeed." << std::endl;

 }

 ret = cluster.connect();

 if (ret < 0) {

 std::cerr << "Couldn't connect to cluster! error " << ret << std::endl;

 ret = EXIT_FAILURE;

 return 1;

 }else{

 std::cout << "Connected to the cluster." << std::endl;

 }

 std::cout<<"ceph Cluster connect end."<<std::endl;

// IO context poolname pool-1

 std::cout<<"ceph Cluster create io context for pool begin."<<std::endl;

 librados::IoCtx io_ctx ;

 std::string pool_name("pool-1");

 ret = cluster.ioctx_create(pool_name.c_str(), io_ctx);

 if (ret < 0)

 {

 std::cerr << "Couldn't set up ioctx! error " << ret << std::endl;

 exit(EXIT_FAILURE);

 } else {

 std::cout << "Created an ioctx for the pool." << std::endl;

 }

 std::cout<<"ceph Cluster create io context for pool end."<<std::endl;

// Write an object synchronously

 std::cout<<"Write an object synchronously begin."<<std::endl;

 librados::bufferlist bl;

 std::string objectId("hw");

 std::string objectContent("Hello World!");

 bl.append(objectContent);

 ret = io_ctx.write_full("hw", bl);

 if (ret < 0) {

 std::cerr << "Couldn't write object! error " << ret << std::endl;

 exit(EXIT_FAILURE);

 } else {

 std::cout << "Wrote new object 'hw' " << std::endl;

 }

 std::cout<<"Write an object synchronously end."<<std::endl;

// Add an xattr to the object.

 librados::bufferlist lang_bl;

 lang_bl.append("en_US");

 io_ctx.setxattr(objectId, "lang", lang_bl);

// Read the object back asynchronously

 librados::bufferlist read_buf;

 int read_len = 4194304;

//Create I/O Completion.

 librados::AioCompletion *read_completion = librados::Rados::aio_create_completion();

//Send read request.

 io_ctx.aio_read(objectId, read_completion, &read_buf, read_len, 0 );

// Wait for the request to complete, and print content

 read_completion->wait_for_complete();

 read_completion->get_return_value();

 std::cout<< "Object name: " << objectId << "\n"

 << "Content: " << read_buf.c_str() << std::endl ;

// Read the xattr.

 librados::bufferlist lang_res;

 io_ctx.getxattr(objectId, "lang", lang_res);

 std::cout<< "Object xattr: " << lang_res.c_str() << std::endl ;

// Print the list of pools

 std::list<std::string> pools ;

 cluster.pool_list(pools );

 std::cout << "List of pools from this cluster handle" << std::endl ;

 for (std::list<std::string>::iterator i = pools.begin(); i != pools.end(); ++i)

 std::cout << *i << std::endl;

// Print the list of objects

//    librados::ObjectIterator oit=io_ctx.objects_begin();

// librados::ObjectIterator oet=io_ctx.objects_end();

// std::cout<< "List of objects from this pool" << std::endl ;

// for(; oit!= oet; oit++ ) {

// std::cout << "\t" << oit->first << std::endl ;

// }

// Remove the xattr

 io_ctx.rmxattr(objectId, "lang");

// Remove the object.

 io_ctx.remove(objectId);

// Cleanup

 io_ctx.close();

 cluster.shutdown();

 return 0 ;

}
  1. 编译运行
g++ -g -c cephclient.cxx -o cephclient.o -std=c++11

g++ -g cephclient.o -lrados -o cephclient

./cephclient
  1. 结果


    image.png
上一篇 下一篇

猜你喜欢

热点阅读