先搞清楚它的架构吧
1. 依赖和前置条件
2. 系统中有哪些组件
简介
Ceph是一种软件定义存储,可以运行在几乎所有主流的Linux发行版(比如CentOS和Ubuntu)和其它类UNIX操作系统(典型如FreeBSD)。
优点:Ceph是分布式的存储,其分布式基因使其可以轻易管理成百上千个节点、PB级及以上存储容量的大规模集群,同时基于计算的扁平寻址设计使得Ceph客户端可以直接和服务端的任意节点通信,从而避免因为存在访问热点而导致性能瓶颈。
- 提供三个存储服务
- 对象存储(Object Storage)
既可以通过使用Ceph的库,利用C, C++, Java, Python, PHP代码,也可以通过Restful网关以对象的形式访问或存储数据,兼容亚马逊的S3和OpenStack的Swift
由LIBRADOS和RADOSGW提供
- 块存储(Block Storage)
作为块设备像硬盘一样直接挂载
由RBD提供
- 文件系统(File System)
如同网络文件系统一样挂载,兼容POSIX接口
由CEPH FS提供
结构图,最终都以对象形式存储在RADOS中
- OSDs Monitor MDS
集群中的节点有三种角色
- OSD 守护进程
维护节点上的对象,响应客户端请求,与其他OSD节点同步。用于实现对磁盘的管理,实现真正的数据读写,通常一个磁盘对应一个OSD服务。
- Monitor
监控集群的健康状况,向客户端发送最新的CRUSH map(含有当前网络的拓扑结构)。用于维护存储系统的硬件逻辑关系,主要是服务器和硬盘等在线信息。
- MDS
提供文件的Metadata
对于块存储类型只需要Mon服务、OSD服务和客户端的软件即可。
- 集中式存储与分布式存储
- 集中式存储
在集中式存储中通常包含一个机头,这个是存储系统中最为核心的部件。通常在机头中有包含两个控制器,这两个控制器实现互备的作用,避免硬件故障导致整个存储系统的不可用。在该机头中通常包含前端端口和后端端口,前端端口用户为服务器提供存储服务,而后端端口用于扩充存储系统的容量。通过后端端口机头可以连接更多的存储设备,从而形成一个非常大的存储资源池。机头中是整个存储系统的核心部件,整个存储系统的高级功能都在其中实现。控制器中的软件实现对磁盘的管理,将磁盘抽象化为存储资源池,然后划分为LUN提供给服务器使用。这里的LUN其实就是在服务器上看到的磁盘。当然,一些集中式存储本身也是文件服务器,可以为服务器提供共享文件服务。无论如何,从上面我们可以看出集中式存储最大的特点是有一个统一的入口,所有数据都要经过这个入口,这个入口就是存储系统的机头。
- 分布式存储——HDFS
中间控制节点架构。namenode作为中间节点,负责管理管理数据(元数据)。如果客户端需要从某个文件读取数据,首先从namenode获取该文件的位置(具体在哪个datanode),然后从该位置获取具体的数据。
- 分布式存储——Swift一致性哈希
属于完全无中心架构。一致性哈希的方式就是将设备做成一个哈希环,然后根据数据名称计算出的哈希值映射到哈希环的某个位置,从而实现数据的定位。
- 分布式存储——Ceph 计算模式
没有所谓的namenode,客户端是通过一个设备映射关系计算出来其写入数据的位置,这样客户端可以直接与存储节点通信,从而避免中心节点的性能瓶颈。
客户端访问存储的大致流程是,客户端在启动后会首先从Mon服务拉取存储资源布局信息,然后根据该布局信息和写入数据的名称等信息计算出期望数据的位置(包含具体的物理服务器信息和磁盘信息),然后该位置信息直接通信,读取或者写入数据。
工作机制
一切皆对象,一切均被crush。
- 一切皆对象
RADOS为一个对象存储系统,所有进入Ceph中的数据最终都是由RADOS负责存储进OSD中。这一层提供了librados接口,供RBD、RGW、CephFS这些上层的调用,通过socket来达到与RADOS层交互,所有上层对象最终会被封装成一个个RADOS对象。
- crush
将被封装成RADOS对象的文件均匀地发到各个OSD节点上。
pool: Ceph对PG做的逻辑上的划分。每类存储都有其对应的默认存储池。不同的RADOS上层来的数据,最终会落到不同的Pool中,由此来更好的管理数据
PG: 是一些对象逻辑上的合集,也是Pool最基本组成单位,是实现冗余策略,数据迁移、灾难恢复等功能的基础。可以向上接受、处理客户端请求,转化为能被ObjectStore理解的事务,是一个对象落到OSD上的最后逻辑载体。
文件写入到以对象存储会经历以下过程:
其中1、2、4步转换都需要借助哈希算法
组件
RGW: 提供对象存储服务的组件
RBD:提供块存储服务的组件
MDS:提供文件存储服务的组件
OSD: Ceph管理硬盘的组件
MON(Monitor): 管理Ceph集群状态、各个组件的组件
Managers:Ceph Manager守护进程(ceph-mgr
)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载
配置
(经过尝试,在Ubuntu18.04系统上安装未成功,待补充)
1.配置节点
需要大于两个节点,且具有所有节点须有root权限
所有节点创建一个统一的新用户,并配置无密码的sudo权限
(可选)2.安装NTP来同步所有节点的日期和时间
NTP:使计算机时间同步化的一种协议,使计算机对其服务器或时钟源做同步化
sudo apt-get install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock --systohc
systemctl enable ntp
systemctl start ntp
3.编辑所有节点的hosts文件
以下代表几种类型:
ceph-admin
monl
ceph-osdi
ceph-client
ceph in ubuntu https://computingforgeeks.com/how-to-deploy-ceph-storage-cluster-on-ubuntu-18-04-lts/
ceph in ubuntu 5个节点https://linux.cn/article-8182-1.html