ceph调研报告

基础概念

  • File:用户需要存储或者访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。
  • OSD:全称Object Storage Device,也就是负责响应客户端请求读写具体数据的进程。一个Ceph集群一般都有很多个OSD,OSD一般和磁盘绑定。
  • PG:全称Placement Grouops,是一个逻辑的概念。PG的用途是对object的存储进行组织和位置映射。一个PG负责组织若干个object(可以为数千个甚至更多),但一个 object只能被映射到一个PG中。
  • RADOS:全称Reliable Autonomic Distributed Object Store,是Ceph集群的精华,用户实现数据分配、Failover等集群操作。
  • CRUSH:CRUSH是Ceph使用的动态数据分布算法,类似一致性哈希,将PGs均匀映射到OSDs上
  • Monitor:维护着展示集群状态的各种图表,包括监视器图、 OSD 图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors 、 OSD 和 PG上的每一次状态变更的历史信息

Ceph寻址流程

ceph调研报告_第1张图片
ceph.jpeg
  • File -> Objects
    file为用户需要访问或者或获取的文件,当file文件超过RADOS限定的最大size时(一般为2M或4M),file会被均等的分割为等大的object对象(最后一块object大小可以不等)。对file进行分割有两个好处:一,让大小不限的file变成最大size一致、可以被RADOS高效管理的 object;二,单一处理的file转化为并行处理的objects
  • Objects -> PGs
    当File被分割成若干Objects时,需要将Objects随机映射到PGs上,计算公式:
#oid为object的唯一id
#ino为file未被分割前的唯一id
#ono为file被分割后该object的序号
#mask为pg总数减一
#hash哈希算法
oid = ino + ono 
pgid = hash(oid) & mask

哈希值计算和按位与操作的整体结果事实上是从所有m个PG中近似均匀地随机选择一个。基于这一机制,当有大量object和大量PG 时,RADOS能够保证object和PG之间的近似均匀映射。又因为object是由file切分而来,大部分object的size相同,因而,这一映射最终保证了,各个PG中存储的object的总数据量近似均匀。只有当object和PG的数量较多时,这种伪随机关系的近似均匀性才能成立,Ceph的数据存储均匀性才有保证。为保证“大量”的成立,一方面,object的最大size应该被合理配置,以使得同样大小的file能够被切分成更多的object;另一方面,Ceph也推荐PG总数应该为OSD总数的数百倍,以保证有足够数量的PG可供映射。
Objects和PGs之间的映射关系是多对一的关系

  • PGs -> OSDs
    RADOS采用CRUSH算法,将pgid作为参数,会得到一个包含多个OSD的组。该组里的OSD共同负责存储,维护一个PG里的Objects。
    有关CRUSH:CRUSH是一个动态算法,其结果会受当前系统状态存储策略配置的影响。所以当有设备损坏或者增添时,大部分PG与OSD之间的映射关系不会发生 改变,只有少部分PG的映射关系会发生变化并引发数据迁移。这种可配置性和稳定性都不是普通哈希算法所能提供的。因此,CRUSH算法的设计也是Ceph 的核心内容之一
    有关三次映射和二次映射:如果除去PG层的话,从Files到OSDs只有两次映射,Objects采用静态算法直接映射到OSDs上,当OSDs数量发生变化的时候,整个存储系统将无法做到动态拓展。如果Objects仍然采用CRUSH算法映射到OSDs上,则OSDs之间进行信息交互的时间开销将会暴增。

Ceph数据流程

ceph调研报告_第2张图片
ceph数据存储流程.png
  • 步骤1:client向Ceph集群写入一个flie时,通过上述的寻址流程得到三个OSDs,client和Primary OSD(主OSD)发起写请求通信。
  • 步骤2,3:Primary OSD获取到client的写请求之后向另外两个OSD发起写请求
  • 步骤4,5:另外两个OSD写入数据后向主OSD发送确认信息
  • 步骤6:主OSD在获取两个OSD的确认信息后,完成数据写入,并向client发送写入完成确认信息

由于需要等待所有的OSD确认完才能最终返回写入确认,所以整体时延会较长,一般OSD会像client发送两次确认信息,第一次是所有OSD写入内存时,第二次是所有OSD写入磁盘时。


ceph性能优势

  • 高性能
    1, 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
    2, 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
    3, 能够支持上千个存储节点的规模,支持TB到PB级的数据。
  • 高可用
    1, 副本数可以灵活控制。
    2, 支持故障域分隔,数据强一致性。
    3, 多种故障场景自动进行修复自愈。
    4, 没有单点故障,自动管理。
  • 高拓展性
    1, 去中心化
    2, 拓展灵活

ceph安装

monitor:192.168.4.4
osd1:192.168.4.1
osd2:192.168.4.2
ceph-admin:192.168.0.192

主机名              IP 地址
ceph-admin           192.168.0.192
mon1                 192.168.4.4
osd1                 192.168.4.1
osd2                 192.168.4.2

1, 在上述主机上创建ceph用户

useradd -m -s /bin/bash cephuser
passwd cephuser

2, 获取sudo权限,因为在ceph的安装中不支持sudo命令输入

echo "cephuser ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephuser
chmod 0440 /etc/sudoers.d/cephuser
sed -i s'/Defaults requiretty/#Defaults requiretty'/g /etc/sudoers

3, 安装和配置 NTP

sudo apt-get install -y ntp ntpdate ntp-doc
ntpdate 0.us.pool.ntp.org
hwclock --systohc
systemctl enable ntp
systemctl start ntp

4, 编辑/etc/hosts文件

ceph-admin           192.168.0.192
mon1                 192.168.4.4
osd1                 192.168.4.1
osd2                 192.168.4.2

5,配置admin节点到其他节点的免密ssh登录

ssh root@ceph-admin
su - cephuser
ssh-keygen
vim ~/.ssh/config
#输入以下内容:
Host ceph-admin
        Hostname ceph-admin
        User cephuser
Host mon1
        Hostname mon1
        User cephuser
Host ceph-osd1
        Hostname ceph-osd1
        User cephuser
Host ceph-osd2
        Hostname ceph-osd2
        User cephuser
#####
chmod 644 ~/.ssh/config
ssh-keyscan ceph-osd1 ceph-osd2 mon1 >> ~/.ssh/known_hosts
ssh-copy-id ceph-admin
ssh-copy-id ceph-osd1
ssh-copy-id ceph-osd2
ssh-copy-id mon1

6, osd节点硬盘划分和挂载

dd if=/dev/zero of=ceph-volumes.img bs=1M count=8192 oflag=direct
sgdisk -g --clear ceph-volumes.img
sudo vgcreate ceph-volumes $(sudo losetup --show -f ceph-volumes.img)
sudo lvcreate -L2G -nceph0 ceph-volumes
sudo mkfs.xfs -f /dev/ceph-volumes/ceph0
sudo mount /dev/ceph-volumes/ceph0 /srv/ceph/osd0

7, ceph-admin创建集群

mkdir cluster
cd cluster/
ceph-deploy new mon1
echo "osd pool default size = 2" >> ceph.conf

8, 从ceph-admin安装ceph到所有节点

ceph-deploy install ceph-admin ceph-osd1 ceph-osd2 mon1
ceph-deploy mon create-initial
ceph-deploy gatherkeys mon1

9, 增加osd到集群

ceph-deploy osd prepare ceph-osd1:/srv/ceph/osd1 ceph-osd2:/srv/ceph/osd2
ceph-deploy osd activate ceph-osd1:/srv/ceph/osd1 ceph-osd2:/srv/ceph/osd2

10, 安装结果验证:

sudo ceph -s
ceph调研报告_第3张图片
安装结果.png

osd盘读写性能测试

osd1读写速度:


osd1读速度.png

osd1写速度.png

osd2读写速度:


osd2读速度.png
osd2写速度.png

集群读写性能

  • 集群随机读速度


    ceph调研报告_第4张图片
    集群随机读速度.png
  • 集群顺序读速度


    ceph调研报告_第5张图片
    集群顺序读速度.png
  • 集群写速度


    ceph调研报告_第6张图片
    集群写.png

ceph块设备安装

1, 块是一个字节序列(例如,一个 512 字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、 CD 、软盘、甚至传统的 9 磁道磁带。无处不在的块设备接口使虚拟块设备成为与 Ceph 这样的海量存储系统交互的理想之选。
2, Ceph 块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。 Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互。
3, 安装ceph设备必须要先完成ceph的集群部署

  • 在管理节点上,安装一个ceph-client,ssh的免密设置参考集群部署
#从管理节点安装ceph-client,client地址为172
ceph-deploy install ceph-client
#从管理节点拷贝配置文件到ceph-client
ceph-deploy admin ceph-client
#修改文件权限
sudo chmod +r /etc/ceph/ceph.client.admin.keyring
  • 在client节点创建块
#新建设备
rbd create foo --size 4096 -m 192.168.4.1 -k ceph.client.admin.keyring 
#映射
sudo rbd map foo --name client.admin -m 192.168.4.1 -k ceph.client.admin.keyring 
#创建文件系统
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo
#挂载
sudo mkdir /mnt/ceph-block-device
sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
cd /mnt/ceph-block-device

映射步骤可能会报错“rbd feature disable”,原因是不同内核对ceph默认的rbd服务支持不同,可以使用dmesg | tail命令查找错误码,关闭掉不支持的默认项。具体参考映射问题


ceph文件系统安装

  • 创建文件系统
ceph osd pool create cephfs_data 
ceph osd pool create cephfs_metadata 
ceph fs new  cephfs_metadata cephfs_data
  • 创建文件挂载
sudo mkdir /mnt/mycephfs
#admin.secret是cat ceph.client.admin.keyring密钥
sudo mount -t ceph 192.168.4.1:6789,192.168.4.2:6789,192.168.4.4:6789:/ /mnt/mycephfs -o name=admin,secretfile=admin.secret
ceph调研报告_第7张图片
文件系统挂载.png

你可能感兴趣的:(ceph调研报告)