使用python语言调用原生接口(调用librados库来操作rados)
也就是下图中几种方式中的一种,就是图中的红色部分:

首先来说明一下:这个就相当于在客户端上操作ceph集群的底层对象存储rados,我的代码是在mon节点上执行的,也就是暂时把mon当作客户端来使用。
当然我们也可以另外使用一台主机来作为客户端,这个客户端只要能够连通ceph集群就可以,比如我也可以使用另外一台centos7的主机,只需要 yum -y install ceph即可,然后在/etc/ceph/文件夹下把mon节点/etc/ceph/下的ceph.conf文件和ceph.client.admin.keyring文件复制过去即可完成ceph客户端的配置。

下面是简单python代码示例:

#!/usr/bin/python
#encoding=utf-8
import rados, syscluster = rados.Rados(conffile='/etc/ceph/ceph.conf')
#用当前的这个ceph的配置文件去创建一个rados,这里主要是解析ceph.conf中的   集群配置参数。然后将这些参数的值保存在rados中。
cluster.connect()
#这里将会创建一个radosclient的结构,这里会把这个结构主要包含了几个功能模块:    消息管理模块Messager,数据处理模块Objector,finisher线程模块。print "\n\nI/O Context and Object Operations"print "================================="print "\nCreating a context for the 'data' pool"if not cluster.pool_exists('data'):raise RuntimeError('No data pool exists')ioctx = cluster.open_ioctx('data')
#为一个名字叫做data的存储池创建一个ioctx ,ioctx中会指明radosclient与Objector    模块,同时也会记录data的信息,包括pool的参数等。print "\nWriting object 'school' with contents 'hello , I are from chd university!' to pool 'data'."ioctx.write("school", "hello , I are from chd university!")ioctx.set_xattr("school", "lang", "en_US")
print "\nWriting object 'name' with contents 'my name is lxl!' to pool 'data'."ioctx.write("name", "my name is lxl!")print "Writing XATTR 'lang' with value 'fr_FR' to object 'name'"ioctx.set_xattr("name", "lang", "fr_FR")print "\nContents of object 'school'\n------------------------"print ioctx.read("school")print ioctx.get_xattr("name", "lang")
print "\nContents of object 'name'\n------------------------"print ioctx.read("name")print "\nClosing the connection."ioctx.close()

执行结果:

Python 示例代码2:
通过创建rbd块设备来操作rados,也就是下图中的红色部分:

rbd 是个操纵 rados 块设备( RBD )映像的工具, QEMU/KVM 通过 Linux rbd 内核驱动和 rbd 存储驱动来使用。 RBD 映像是简单的块设备,它被条带化成小块对象后存储于 RADOS 对象存储集群。条带化后的对象尺寸必须是 2 的幂。

#!/usr/bin/env python
import sys,rados,rbd
def connectceph():cluster = rados.Rados(conffile = '/etc/ceph/ceph.conf')cluster.connect()ioctx = cluster.open_ioctx('rbd_test')
#使用 rbd 之前,连接到 RADOS,并打开一个 IO context (和特定 pool 相关)
#使用 rbd 之前,连接到 RADOS,并打开一个 IO context (和特定 pool 相关)rbd_inst = rbd.RBD()size = 40*1024**3rbd_inst.create(ioctx,'test_image',size)image = rbd.Image(ioctx,'test_image')data = 'hello'* 300000image.write(data,0)image.close()ioctx.close()cluster.shutdown()if __name__ == "__main__":connectceph()

解析:使用 rbd 之前,连接到 RADOS,并打开一个 IO context (和特定 pool 相关)
cluster = rados.Rados(conffile= ‘/etc/ceph/ceph.conf’)
cluster.connect()
ioctx = cluster.open_ioctx(‘rbd_test’)

#初始化一个 RBD 对象
rbd_inst = rbd.RBD()
size = 4 * 1024**3 # 4 GiB
#创建 image
rbd_inst.create(ioctx, ‘testimage’, size)

#初始化 image 对象
image = rbd.Image(ioctx, ‘testimage’)
#准备 约14M字符的数据
data = ‘hello world !!’* 1024**2
#写入数据
image.write(data, 0)

#关闭 image 对象
image.close()
#关闭 IO Context
ioctx.close()
#关闭连接
cluster.shutdown()

可以看看执行结果:

Python示例代码3:
窗体顶端
在给定的集群上发出ceph命令并提供返回的json

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import jsonfrom rados import Rados
from rados import Error as RadosErrorclass CephClusterCommand(dict):"""Issue a ceph command on the given cluster and provide the returned json"""def __init__(self, cluster, **kwargs):dict.__init__(self)ret, buf, err = cluster.mon_command(json.dumps(kwargs), '', timeout=5)if ret != 0:self['err'] = errelse:self.update(json.loads(buf))config={'conffile': '/etc/ceph/ceph.conf', 'conf': {}}
with Rados(**config) as cluster:cluster_status = CephClusterCommand(cluster, prefix='status', format='json')print cluster_status

执行结果:
{u’election_epoch’: 4, u’quorum’: [0], u’monmap’: {u’epoch’: 1, u’mons’: [{u’name’: u’node1’, u’rank’: 0, u’addr’: u’192.168.1.220:6789/0’}], u’modified’: u’2017-11-27 10:57:00.018670’, u’fsid’: u’f2891898-aa3b-4bce-8bf1-668b8cf5b45a’, u’created’: u’2017-11-27 10:57:00.018670’}, u’health’: {u’detail’: [], u’timechecks’: {u’round_status’: u’finished’, u’epoch’: 4, u’round’: 0}, u’health’: {u’health_services’: [{u’mons’: [{u’last_updated’: u’2018-03-02 09:41:42.153833’, u’name’: u’node1’, u’avail_percent’: 89, u’kb_total’: 28797196, u’kb_avail’: 25738680, u’health’: u’HEALTH_OK’, u’kb_used’: 3058516, u’store_stats’: {u’bytes_total’: 15344382, u’bytes_log’: 2031616, u’last_updated’: u’0.000000’, u’bytes_misc’: 2031632, u’bytes_sst’: 11281134}}]}]}, u’overall_status’: u’HEALTH_WARN’, u’summary’: [{u’severity’: u’HEALTH_WARN’, u’summary’: u’too many PGs per OSD (428 > max 300)’}]}, u’fsid’: u’f2891898-aa3b-4bce-8bf1-668b8cf5b45a’, u’quorum_names’: [u’node1’], u’fsmap’: {u’up:standby’: 1, u’by_rank’: [{u’status’: u’up:active’, u’filesystem_id’: 1, u’name’: u’node2’, u’rank’: 0}], u’max’: 1, u’up’: 1, u’epoch’: 6, u’in’: 1, u’id’: 1}, u’osdmap’: {u’osdmap’: {u’full’: False, u’nearfull’: False, u’num_osds’: 2, u’num_up_osds’: 2, u’epoch’: 36, u’num_in_osds’: 2, u’num_remapped_pgs’: 0}}, u’pgmap’: {u’bytes_total’: 58976657408, u’num_pgs’: 428, u’data_bytes’: 143101344, u’bytes_used’: 17297178624, u’version’: 165507, u’pgs_by_state’: [{u’count’: 428, u’state_name’: u’active+clean’}], u’bytes_avail’: 41679478784}}

python通过librados库通过底层的rados操作ceph的对象存储和块存储相关推荐

  1. 初识 Python 科学计算库之 NumPy(创建多维数组对象)

    文章目录 参考 描述 NumPy 特点 获取 导入 多维数组对象 np.array() np.asarray() 范围 随机 概览 np.random.randn() np.random.normal ...

  2. 【Python之numpy库】5.np.piecewise 操作方程

    转载于https://blog.csdn.net/qq_27825451/article/details/82838402?ops_request_misc=%257B%2522request%255 ...

  3. python语言函数库_Python 的标准库,从0到1学Python

    1.1. 介绍软件测试业务流程的梳理技巧 - 乐搏软件教育 - 软件测试 - Powered By EduSoho​17lebo.com Python 的标准库包括了很多的模块, 从 Python 语 ...

  4. python常用标准库有哪些-Python开发中常用的标准库

    大多数基于 Python 开发的应用程序都会用到本地标准库和三方库,这样不仅能让我们把时间去关注真正的业务开发,也能学习到更多价值含量高的程序设计和开发思想.程序开发中有一句著名的话叫做: Don't ...

  5. python常用标准库有哪些-Python 200个标准库汇总

    文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串 ...

  6. python常用库教程_这几个python常用的库你必须知道!

    随着人工智能时代的到来,python变得更加流行.受欢迎,功能强大.简单易学.容易入门.应用广泛等,掀起了学习热潮,现在越来越多人转行都会学习python语言.为了让大家快速掌握python,今天为大 ...

  7. python语音开发库-各种 Python 库/模块/工具

    1.1 字符串处理 re 正则表达式的标准库. StringIO / cStringIO 以读写文件的方式来操作字符串(有点类似于内存文件). cStringIO 是 C 语言实现的,提供高性能:而 ...

  8. CSDN21天学习挑战赛——Python常用标准库概述

    ​活动地址:CSDN21天学习挑战赛 Python有一套标准库,随着python一起安装在电脑中,是python的一个组成部分. 一.os操作系统库 os模块提供了很多与操作系统相关联的函数. 在导入 ...

  9. 怎么装python的keras库_Keras 教程: Python 深度学习终极入门指南

    在这篇 Keras 教程中, 你将学到如何用 Python 建立一个卷积神经网络! 事实上, 我们将利用著名的 MNIST 数据集, 训练一个准确度超过 99% 的手写数字分类器. 开始之前, 请注意 ...

最新文章

  1. sftp 限制用户登陆指定目录(家目录)
  2. 2019年25大人工智能趋势!一文看到未来
  3. virt-manager管理kvm
  4. msfconsole 无法启动,解决办法
  5. docker mysql输入中文_Docker解决终端无法输入中文的问题
  6. android h5 有广告,那些H5在Android上显示的丧心病狂的坑
  7. 【今日CV 视觉论文速览】 07 Dec 2018
  8. nginx 反向代理之 proxy_redirect
  9. 【zoj2314】Reactor Cooling 有上下界可行流
  10. 2016年中国微信小程序专题研究报告
  11. SVN提示: File or directory '*' is out of date; try updating 解决方案 .
  12. 安装blocksci mac出错_你的Mac与Big Sur兼容吗?
  13. PostgreSQL如何导入SJIS字符集的文件
  14. zigbee协议栈-端点
  15. 计算机专业职业生涯规划书,计算机专业职业生涯规划书2000字.doc
  16. 老式计算机如何设置u盘启动,新旧主板BIOS设置U盘启动详细分析
  17. 计算机无法添加无线网络,Win7电脑无法连接无线网络的原因和处理方法
  18. jquery when Deferred
  19. 完全用Linux工作--你还在用老掉牙的windows吗?
  20. 纯CSS实现回到顶部的功能

热门文章

  1. sql语句中escape的用法
  2. Eftp - Mac 系统下免费开源的 FTP/SFTP 远程文件上传工具
  3. mysql数据库开启ssl_MySQL 5.7.x开启SSL连接
  4. Steve Jobs (1955 - 2011)
  5. 我投稿的论文是如何决定可否发表?期刊编审流程大解密
  6. android天地图画区域,天地图专题五:在天地图上绘制电子区域并保存数据
  7. 关于 Debian 源的一些简单说明
  8. 【数据分析项目实战】Python爬取BOSS直聘岗位和数据分析
  9. powerdesiger
  10. es(elasticsearch)查询数据出现异常Result window is too large, from + size must be less than or equal to