如何集成Ceph对象存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何集成Ceph对象存储相关的知识,希望对你有一定的参考价值。

参考技术A Glance集成Glance是OpenStack中的映像服务。默认情况下,映像存储在本地控制器,然后在被请求时复制到计算主机。计算主机缓存镜像,但每次更新镜像时,都需要再次复制。Ceph为Glance提供了后端,允许镜像存储在Ceph中,而不是本地存储在控制器和计算节点上。这大大减少了抓取镜像的网络流量,提高了性能,因为Ceph可以克隆镜像而不是复制镜像。此外,它使得在OpenStack部署或诸如多站点OpenStack之类的概念的迁移变得更简单。安装Glance使用的Ceph客户端。创建Ceph用户并将主目录设置为/etc/ceph。将Ceph用户添加到sudoers。在Ceph管理节点。为Glance镜像创建CephRBD池。创建将允许Glance访问池的密钥环。将密钥环复制到OpenStack控制器上的/etc/ceph。设置权限,让Glance可以访问Ceph密钥环。将密钥环文件添加到Ceph配置。创建原始Glance配置的备份。更新Glance配置。重新启动Glance。下载Cirros镜像并将其添加到Glance。将QCOW2转换为RAW。建议Ceph始终使用RAW格式。将镜像添加到Glance。检查Ceph中是否存在Glance图像。Cinder集成Cinder是OpenStack中的块存储服务。Cinder提供了关于块存储的抽象,并允许供应商通过提供驱动程序进行集成。在Ceph中,每个存储池可以映射到不同的Cinder后端。这允许创建诸如金、银或铜的存储服务。你可以决定例如金应该是复制三次的快速SSD磁盘,银应该是复制两次,铜应该是使用较慢的擦除编码的磁盘。为Cinder卷创建一个Ceph池。创建一个密钥环以授予Cinder访问权限。将密钥环复制到OpenStack控制器。创建一个只包含OpenStack控制器上的身份验证密钥的文件。设置密钥环文件的权限,以便Cinder可以访问。将密钥环添加到OpenStack控制器上的Ceph配置文件中。使KVMHypervisor访问Ceph。在virsh中创建一个密钥,因此KVM可以访问Ceph池的Cinder卷。为Cinder添加一个Ceph后端。在所有控制器上重新启动Cinder服务。创建Cinder卷。在Ceph中列出Cinder卷。将Ceph与Nova计算集成Nova是OpenStack中的计算服务。Nova存储与默认的运行虚拟机相关联的虚拟磁盘镜像,在/var/lib/nova/instances下的Hypervisor上。在虚拟磁盘映像的计算节点上使用本地存储有一些缺点:·镜像存储在根文件系统下。大镜像可能导致文件系统被填满,从而导致计算节点崩溃。·计算节点上的磁盘崩溃可能导致虚拟磁盘丢失,因此无法进行虚拟机恢复。Ceph是可以直接与Nova集成的存储后端之一。在本节中,我们将看到如何配置。为Nova创建验证密钥环。将密钥环复制到OpenStack控制器。在OpenStack控制器上创建密钥文件。设置密钥环文件的权限,以便Nova服务可以访问。确保安装所需的rpm软件包。更新Ceph配置。让KVM可以访问Ceph。在virsh中创建一个密钥,这样KVM可以访问Cinder卷的Ceph池。备份Nova配置。更新Nova配置以使用Ceph后端。重新启动Nova服务。列表Neutron网络。启动使用在Glance步骤中添加的Cirros镜像的临时VM实例。等待直到VM处于活动状态。在Ceph虚拟机池中列出镜像。我们现在应该看到镜像存储在Ceph中。

CEPH 对象存储的系统池介绍

RGW抽象来看就是基于rados集群之上的一个rados-client实例。 

Object和pool简述

Rados集群网上介绍的文章很多,这里就不一一叙述,主要要说明的是object和pool。在rados集群中任意一个对象都会映射为一个(pool,object)。其中pool是存储池,object为对象名。如果你只是做rados集群上层应用的开发(类似开发rgw)。只需要设计如何将数据存储到rados集群中哪个pool及哪个对象即可。

RGW中pool和object应用

RGW中存在的pool比较多,不同的pool管理不同的object数据。这里要关注2个数据结构:


struct RGWZoneParams {
rgw_bucket domain_root;
rgw_bucket control_pool;
rgw_bucket gc_pool;
rgw_bucket log_pool;
rgw_bucket intent_log_pool;
rgw_bucket usage_log_pool;

rgw_bucket user_keys_pool;
rgw_bucket user_email_pool;
rgw_bucket user_swift_pool;
rgw_bucket user_uid_pool;
};
struct RGWZonePlacementInfo {
string index_pool;
string data_pool;
string data_extra_pool;
}


RGW应用到rados中的对象分为2类,一类是普通对象,相当于普通文件的存储。还一类是omap对象,用于存储K-V对象。下面介绍RGW主要pool的用途:

domain_root pool:每个bucket都对应一个普通对象,用于存储bucket元数据。

control pool:该pool上创建若干个普通对象用于watch-notify(librados提供的一种watch和notify机制)。目前RGW用这种机制来实现分布式缓存(后续会详细介绍)。

gc pool:rgw中大文件数据一般在后台删除,该pool用于记录那些待删除的文件对象。

log pool:用于存储3种类型log,oplog,meta_log,data_log。其中oplog主要用于记录用户操作记录。

Meta_log和data_log都是远程复制功能中需要用到的,后续会详细介绍。

Intent log pool:这个pool目前没有用到。

usage log pool:存储计量数据统计,比如上传文件多少次,下载多少次,遍历bucket多少次之类。

user keys pool:用于存储用户AK和uid的对应关系,方便通过用户restful请求的ak找到用户id。

user email pool:用于存储用户email和uid的对应关系。

user swift pool:用于存储swift key和uid的对应关系

user uid pool:用于存储用户信息,每个用户都有一个唯一的uid作为对象名。同时每个用户还会有一个用于索引该用户下桶的对象也存在该pool下面。

index pool:存储bucket的文件索引对象。每个bucket对应在该pool下有一个索引对象,用来索引该bucket下所有的文件。同时远程复制中用到的bilog也存储在该pool的bucket索引对象上。

data pool:顾名思义,所有的文件数据都存在该pool下。

data extra pool:Multipart upload过程中一些中间态的数据,会存在该pool上。这些数据可以帮助用户进行断点续传及垃圾数据回收。

另外还有2个pool也比较重要

zone root pool:用于存放zone的元数据信息,其实就是存放RGWZoneParams数据结构

region root pool:用于存放region的元数据信息。

以上是关于如何集成Ceph对象存储的主要内容,如果未能解决你的问题,请参考以下文章

Ceph部署集群搭建

【ceph】对象存储 - bucket命名规范

Ceph对象存储介绍与安装

Ceph对象存储反向代理

Ceph 对象存储及客户端配置

CEPH 对象存储的系统池介绍