CEPH STORAGE CLUSTER
ceph的python_api文档: http://docs.ceph.com/docs/master/rados/api/python/
-
连接ceph集群
import rados # '/etc/ceph/ceph.conf'的配置文件 cluster = rados.Rados(conffile='/etc/ceph/ceph.conf') cluster.connect() # 或者通过设置mon_host和keyring参数 cluster = rados.Rados() cluster.conf_set('mon_host','192.168.20.191,192.168.20.192') cluster.conf_set('keyring','/etc/ceph/ceph.client.admin.keyring') cluster.connect()
-
配置参数及空间查看
# 版本查看 # <rados.Version object at 0x7f0221936048> version = cluster.version() # host查看 # '192.168.20.191,192.168.20.192' host = cluster.conf_get('mon host') # 集群ID # 'd03ad2f2-3b2b-45d9-ac4a-9b1a9d27d672' fsid = cluster.get_fsid() # 集群统计数据 # {'kb': 209698816, 'kb_used': 5955200, 'kb_avail': 203743616, 'num_objects': 1} cluster_stats = cluster.get_cluster_stats()
-
创建与删除池
# 列出可用的池 pools = cluster.list_pools() for pool in pools: print pool # 创建池test cluster.create_pool('k') # 删除池 cluster.delete_pool('k') # 判断是否存在一个池 cluster.pool_exists('k')
-
上线文
# pool_name:池名称 ioctx = cluster.open_ioctx(pool_name) # 或者 # pool_id:池id ioctx = cluster.open_ioctx2(pool_id) # 断开 ioctx.close()
-
列出池中所有的文件名
ioctx = cluster.open_ioctx(pool_name) # 列出test池中的所有文件名 object_iterator = ioctx.list_objects() while True : try : rados_object = object_iterator.__next__() print "Object contents = " + rados_object.key except StopIteration : break ioctx.close()
-
上传文件
ioctx = cluster.open_ioctx(pool_name) # file_name:文件名; file_content:内容(bytes类型) ioctx.write_full(file_name, file_content) # eg1 ioctx.write_full("test.py", b"Hello World!") # eg2 with open("~/aa.tx", "r") as f: content = f.read() ioctx.write_full(file_name, file_content.encode()) ioctx.close()
-
读取/下载文件
ioctx = cluster.open_ioctx(pool_name) # file_name:文件名 content = ioctx.read(file_name) # bytes类型 ioctx.close() with open("~/bb.tx", "w") as f: f.write(content.decode())
-
移除文件
ioctx = cluster.open_ioctx(pool_name) # file_name:文件名 ioctx.remove_object(file_name) ioctx.close()
-
断开ceph集群连接
cluster.shutdown()