1.ceph的组件和功能
RADOS: 是一个完整的对象存储系统,所有存储在Ceph系统中的用户数据最终都是由这一层来存储的,主要由OSD、Monitor组成。
OSD:由数目可变的大规模OSD(Object Storage Devices)组成的集群,负责存储所有的Objects数据。( 默认有3个副本,但可以调整副本数)
Monitor:由少量Monitors组成的强耦合、小规模集群,负责管理Cluster Map。其中,Cluster Map是整个RADOS系统的关键数据结构,管理集群中的所有成员、关系和属性等信息以及数据的分发。
LIBRADOS:层的功能是对RADOS进行抽象和封装,并向上层提供API。
RADOSGW:功能特性基于LIBRADOS之上,提供当前流行的RESTful协议的网关,API抽象层次更高,并且兼容S3和Swift接口,作为对象存储
RBD(Rados Block Device):功能特性也是基于LIBRADOS之上,通过LIBRBD创建一个块设备,通过QEMU/KVM附加到VM上,作为传统的块设备来用。目前OpenStack、CloudStack等都是采用这种方式来为VM提供块设备,同时也支持快照、COW(Copy On Write)等功能。
Ceph FS(Ceph File System):功能特性是基于RADOS来实现分布式的文件系统,引入了MDS(Metadata Server),主要为兼容POSIX文件系统提供元数据。一般都是当做文件系统来挂载。(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )
MGR (ceph-mgr) :该组件的主要作用是分担和扩展monitor的部分功能,减轻monitor的负担,让更好地管理ceph存储系统
2.ceph的数据读写流程
当某个客户端需要向Ceph集群写入一个File时,首先需要在本地完成前面所述的寻址流程,将File变为一个Object,然后找出存储该Object的一组共3个OSD,这3个OSD具有各自不同的序号,序号最靠前的那个OSD就是这一组中的Primary OSD,而后两个则依次Secondary OSD和Tertiary OSD。
找出3个OSD后,客户端将直接和Primary OSD进行通信,发起写入操作(步骤1)。 Primary OSD收到请求后,分别向Secondary OSD和Tertiary OSD发起写人操作(步骤2和步骤3)。当Secondary OSD和Tertiary OSD各自完成写入操作后,将分别向Primary OSD发送确认信息(步骤4和步骤5)。当Primary OSD确认其他两个OSD的写入完成后,则自己也完成数据写入,并向客户端确认Object写入操作完成(步骤6)。
之所以采用这样的写入流程,本质上是为了保证写入过程中的可靠性,尽可能避免出现数据丢失的情况。同时,由于客户端只需要向Primary OSD发送数据,因此在互联网使用场景下的外网带宽和整体访问延迟又得到了一定程度的优化。
当然,这种可靠性机制必然导致较长的延迟,特别是,如果等到所有的OSD都将数据写入磁盘后再向客户端发送确认信号,则整体延迟可能难以忍受。因此, Ceph可以分两次向客户端进行确认。当各个OSD都将数据写入内存缓冲区后,就先向客户端发送一次确认,此时客户端即可以向下执行。待各个OSD都将数据写入磁盘后,会向客户端发送一个最终确认信号,此时客户端可以根据需要删除本地数据。
分析上述流程可以看出,在正常情况下,客户端可以独立完成OSD寻址操作,而不必依赖于其他系统模块。因此,大量的客户端可以同时和大量的OSD进行并行操作。同时,如果一个File被切分成多个Object,这多个Object也可被并行发送至多个OSD上。
从OSD的角度来看,由于同一个OSD在不同的PG中的角色不同,因此,其工作压力也可以被尽可能均匀地分担,从而避免单个OSD变成性能瓶颈。
读取数据
如果需要读取数据,客户端只需完成同样的寻址过程,并直接和Primary OSD联系。在目前的Ceph设计中,被读取的数据默认由Primary OSD提供,但也可以设置允许从其他OSD中获取,以分散读取压力从而提高性能。
原文链接:https://blog.csdn.net/lhc121386/article/details/113488420
3.使用ceph-deploy安装一个最少三个节点的ceph集群 推荐3个或以上的磁盘作为专用osd
1.基础配置
配置时间同步
修改配置文件
重启设置开机自启并检查时间同步
在node1上配置本地yum源
ceph下创建目录x86_64和noarch,将下载好的x86_64和noarch下面内容分别拷贝到创建的对应目录
单独下载ceph部署工具ceph-deploy至/ceph/ceph-noarch/
使用createrepo创建仓库档案
目录文件制作ISO文件
node1配置为yum仓库服务器,其他节点使用ftp方式使用ceph仓库
2.部署ceph集群
步骤一:安装ceph-deploy
步骤二:创建ceph集群,在/ceph-cluster目录下生成配置文件。
添加监控节点
初始化所有节点的mon服务,也就是启动mon服务。
[root@node1 ceph-cluster]# ceph-deploy mon create-initial
创建ceph管理节点(mgr)
步骤三:准备日志磁盘分区
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i chown ceph.ceph /dev/sdb1 /dev/sdb2
done
[root@node1 ceph-cluster]# vim /etc/udev/rules.d/70-sdb.rules
ENV{DEVNAME}==“/dev/sdb1”,OWNER=“ceph”,GROUP=“ceph”
ENV{DEVNAME}==“/dev/sdb2”,OWNER=“ceph”,GROUP=“ceph”
步骤四:创建OSD存储空间
1、初始化清空磁盘数据(仅在node1操作)
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i parted /dev/sdc mklabel gpt
ssh $i parted /dev/sdd mklabel gpt
done
清理磁盘
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i ceph-volume lvm zap /dev/sdc
ssh $i ceph-volume lvm zap /dev/sdd
done
2、创建OSD存储空间
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node1
// 创建osd存储设备,sdc提供存储空间,sdb1提供缓存
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node2
[root@node1 ceph-cluster]# ceph-deploy osd create --data /dev/sdc --journal /dev/sdb1 --data /dev/sdd --journal /dev/sdb2 node3
步骤五:查看ceph状态,验证
[root@node1 ceph-cluster]# ceph-deploy admin node1 node2 node3
步骤六:启用dashboard
[root@node1 ceph-cluster]# for i in node{1…3}
do
ssh $i yum install -y ceph-mgr-dashboard
done