LIBRADOS(PYTHON)
该rados
模块是一个很薄的Python包装器librados
。
安装
要为Ceph安装Python库,请参阅为Python获取librados。
入门
您可以使用Python创建自己的Ceph客户端。以下教程将向您展示如何导入Ceph Python模块,连接到Ceph集群,并以client.admin
用户身份执行对象操作。
注意
要使用Ceph Python绑定,您必须有权访问正在运行的Ceph集群。要快速设置,请参阅入门。
- 首先,为您的Ceph客户端创建一个Python源文件。::
-
| linenos: | sudo vim client.py |
导入模块
要使用该rados
模块,请将其导入到源文件中。
|
|
|
配置群集句柄
在连接到Ceph存储群集之前,创建一个群集句柄。默认情况下,集群句柄假定一个名为集群ceph
(即,部署工具的默认集合以及我们的入门指南)以及一个 client.admin
用户名。您可以更改这些默认值以满足您的需求。
要连接Ceph存储集群,您的应用程序需要知道在哪里可以找到Ceph Monitor。通过指定Ceph配置文件的路径,将该信息提供给您的应用程序,该文件包含初始Ceph监视器的位置。
|
|
|
确保conffile
参数提供Ceph配置文件的路径和文件名。您可以使用该sys
模块来避免硬编码Ceph配置路径和文件名。
您的Python客户端还需要客户端密钥环。对于这个例子,我们client.admin
默认使用这个 键。如果您想在创建群集句柄时指定密钥环,则可以使用conf
参数。或者,您可以在Ceph配置文件中指定密钥环路径。例如,你可以添加如下行到你的Ceph配置文件:
有关通过Python修改配置的更多详细信息,请参阅配置。
连接到群集
一旦配置了集群句柄,就可以连接到集群。通过连接到集群,您可以执行返回有关集群信息的方法。
|
|
|
默认情况下,Ceph认证是on
。您的应用程序需要知道钥匙圈的位置。该python-ceph
模块没有默认位置,因此您需要指定密钥环路径。指定密钥环的最简单方法是将其添加到Ceph配置文件中。以下Ceph配置文件示例使用client.admin
您生成的密钥环 ceph-deploy
。
|
|
|
管理池
当连接到群集时,该Rados
API允许您管理池。您可以列出池,检查是否存在池,创建池并删除池。
|
|
|
输入/输出上下文
读取和写入Ceph存储集群需要输入/输出上下文(ioctx)。您可以用创建ioctx open_ioctx()
或 open_ioctx2()
该方法Rados
的类。该ioctx_name
参数是池的名称,pool_id
是您希望使用的池的ID。
|
|
|
要么
|
|
|
一旦拥有I / O上下文,就可以读取/写入对象,扩展属性并执行其他一些操作。完成操作后,请确保关闭连接。例如:
|
|
|
写入,读取和删除对象
一旦创建了I / O上下文,就可以将对象写入群集。如果你写一个不存在的对象,Ceph创建它。如果你写一个存在的对象,Ceph会覆盖它(除非你指定一个范围,然后它只覆盖范围)。您可以从群集读取对象(和对象范围)。您也可以从群集中删除对象。例如:
|
|
|
写作和阅读XATTRS
一旦创建了对象,就可以将扩展属性(XATTR)写入对象并从对象中读取XATTR。例如:
|
|
|
清单对象
如果要检查池中对象的列表,可以检索对象列表并使用对象迭代器对它们进行迭代。例如:
|
|
|
本Object
类提供了一个类似文件的接口的对象,使您可以读取和写入的内容和扩展属性。使用I / O上下文的对象操作提供了额外的功能和异步功能。
集群处理
本Rados
类提供一个接口到Ceph的存储守护进程。
配置
本Rados
类提供用于获取和设置配置值,读取Ceph的配置文件,并解析参数的方法。您无需连接Ceph存储群集即可调用以下方法。有关设置的详情,请参阅存储群集配置。
Rados.``conf_get
(可选)
Rados.``conf_set
(option,*val *)
Rados.``conf_read_file
(*path = None *)
Rados.``conf_parse_argv
(*args *)-
Rados.conf_parse_argv(self,args)
从参数中解析已知的参数并移除; 返回的参数只包含那些未知的ceph
Rados.``version
()-
Rados.version(个体经营)
获取
librados
C库的版本号。
| 返回: | librados版本组件的元组(major, minor, extra)
|
连接管理
一旦配置了集群句柄,就可以连接到集群,检查集群fsid
,检索集群统计信息,并从集群断开连接(关闭)。您也可以断言群集句柄处于特定状态(例如,“配置”,“连接”等)。
Rados.``connect
(*timeout = 0 *)-
Rados.connect(self,timeout = 0)
连接到群集。使用shutdown()释放资源。
Rados.``shutdown
()-
Rados.shutdown(个体经营)
断开与群集的连接。当不再使用Rados.connect()ed对象时,明确地调用它。
Rados.``get_fsid
()-
Rados.get_fsid(个体经营)
以十六进制字符串形式获取群集的fsid。
| 举: |Error
|
| 返回: | str - cluster fsid |
Rados.``get_cluster_stats
()-
Rados.get_cluster_stats(个体经营)
阅读有关群集的使用情况信息
这会告诉您总空间,使用空间,可用空间和对象数量。这些数据写入时不会立即更新,它们最终一致。
| 返回: | 字典 - 包含以下键:-
kb
(int) - 总空间 -
kb_used
(int) - 使用的空间 -
kb_avail
(int) - 可用空间 -
num_objects
(int) - 对象的数量
|
-
- 类
rados.``Rados
-
require_state
(** args *)-
检查Rados对象是否处于特殊状态
| 参数: | 参数 - 可以检查为单独参数的任意数量的状态 |
| 举: |RadosStateError
|
池操作
要使用池操作方法,您必须首先连接到Ceph存储群集。您可以列出可用的池,创建池,检查池是否存在以及删除池。
Rados.``list_pools
()-
Rados.list_pools(个体经营)
获取池名称的列表。
| 返回: | 列表 - 池名称。 |
Rados.``create_pool
(pool_name,auid = None,*crush_rule = None *)
Rados.``pool_exists
()
Rados.``delete_pool
(*pool_name *)
输入/输出上下文
要将数据写入Ceph对象存储并从中读取数据,您必须创建一个输入/输出上下文(ioctx)。所述拉多什类提供open_ioctx() 和open_ioctx2()方法。其余的ioctx
操作涉及调用Ioctx和其他类的方法。
Rados.``open_ioctx
(*ioctx_name *)
Ioctx.``require_ioctx_open
()-
Ioctx.require_ioctx_open(个体经营)
检查rados.Ioctx对象状态是否为'open'
| 举: | IoctxStateError |
Ioctx.``get_stats
()-
Ioctx.get_stats(个体经营)
获取池使用统计信息
| 返回: | 字典 - 包含以下键:num_bytes
(int) - 池的大小(以字节为单位)num_kb
(int) - 以千字节为单位的池大小num_objects
(int) - 池中的对象数num_object_clones
(int) - 对象克隆的数量num_object_copies
(int) - 对象副本的数量-
num_objects_missing_on_primary
(int) - objets的数量- 主要缺失
num_objects_unfound
(int) - 未发现对象的数量num_objects_degraded
(int) - 降级对象的数量num_rd
(int) - 读取字节num_rd_kb
(int) - 千字节读取num_wr
(int) - 写入的字节num_wr_kb
(int) - 千字节写入
|
Ioctx.``change_auid
(*auid *)-
Ioctx.change_auid(self,auid)
尝试更改io上下文关联的智能“所有者”。
要求您对当前和新的交易都有写入权限。
| 举: |Error
|
Ioctx.``get_last_version
()-
Ioctx.get_last_version(个体经营)
返回读取或写入的最后一个对象的版本。
这暴露了通过这个IO上下文读取或写入的最后一个对象的内部版本号
| 返回: | 使用的最后一个对象的版本 |
Ioctx.``close
()-
Ioctx.close(个体经营)
关闭一个rados.Ioctx对象。
这只是告诉librados你不再需要使用io上下文。如果有未处理的异步请求,它可能不会立即释放,但在调用此函数后不应再使用io上下文。
对象操作
Ceph存储集群将数据存储为对象。您可以同步或异步读写对象。您可以读取和写入偏移量。一个对象有一个名字(或关键字)和数据。
Ioctx.``aio_write
(object_name,to_write,offset = 0,oncomplete = None,*onsafe = None *)
Ioctx.``aio_write_full
(object_name,to_write,oncomplete = None,*onsafe = None *)
Ioctx.``aio_append
(object_name,to_append,oncomplete = None,*onsafe = None *)
Ioctx.``write
(键,数据,*偏移量= 0 *)
Ioctx.``write_full
(键,数据)
Ioctx.``aio_flush
()-
Ioctx.aio_flush(个体经营)
阻塞,直到io上下文中的所有挂起写入都是安全的
| 举: |Error
|
Ioctx.``set_locator_key
(*loc_key *)
Ioctx.``aio_read
(object_name,length,offset,*oncomplete *)
Ioctx.``read
(key,length = 8192,*offset = 0 *)
Ioctx.``stat
(重点)
Ioctx.``trunc
(key,*size *)
Ioctx.``remove_object
(重点)
对象扩展属性
您可以在对象上设置扩展属性(XATTR)。您可以检索对象或XATTR的列表并遍历它们。
Ioctx.``set_xattr
(key,xattr_name,*xattr_value *)
Ioctx.``get_xattrs
(*oid *)
XattrIterator.``__next__
()-
获取对象上的下一个xattr
| 举: | 的StopIteration |
| 返回: | 配对 - 下一个Xattr的名称和值 |
Ioctx.``get_xattr
(key,*xattr_name *)
Ioctx.``rm_xattr
(key,*xattr_name *)
对象接口
从I / O上下文中,您可以从池中检索对象列表并遍历它们。提供的对象接口使每个对象看起来像一个文件,并且您可以对这些对象执行同步操作。对于异步操作,您应该使用I / O上下文方法。
Ioctx.``list_objects
()-
Ioctx.list_objects(个体经营)
在rados.Ictctx对象上获取ObjectIterator。
| 返回: | ObjectIterator |
ObjectIterator.``__next__
()-
获取池中的下一个对象名称和位置
| 举: | 的StopIteration |
| 返回: | 下一个rados.Ictctx对象 |
Object.``read
(*长度= 1024 * 1024 *)
Object.``write
(*string_to_write *)
Object.``get_xattrs
()
Object.``get_xattr
(*xattr_name *)
Object.``set_xattr
(xattr_name,*xattr_value *)
Object.``rm_xattr
(*xattr_name *)
Object.``stat
()
Object.``remove
()