ceph 基础概念和集群部署

docker  

Ceph 简介

Ceph是一个可无限伸缩的开源分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性,它基于RADOS实现。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用,RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

Ceph特点

  • 高性能
    • 摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。
    • 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
    • 能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据。
  • 高可用性
    • 副本数可以灵活控制。
    • 支持故障域分隔,数据强一致性。
    • 多种故障场景自动进行修复自愈。
    • 没有单点故障,自动管理。
  • 高可扩展性
    • 去中心化。
    • 扩展灵活。
    • 随着节点增加而性能线性增长。
  • 特性丰富
    • 支持三种存储接口:块存储、文件存储、对象存储。
    • 支持自定义接口,支持多种语言驱动。

基本概念

  • Ceph OSD

    Object Storage Device是ceph的核心组件,用于存储数据,处理数据的复制、恢复、回填、再均衡,并通过检查其他OSD守护进程的心跳来向Ceph Monitors提供一些监控信息。ceph集群每台机器上的每块盘需要运行一个OSD进程。
    每个OSD有自己日志,生产环境一般要求OSD的journal日志单独放在ssd上,数据对象放在机械硬盘,以提升性能。而OSD使用日志的原因有二:速度和一致性。
    1,速度: 日志使得OSD可以快速地提交小块数据的写入,Ceph把小片、随机IO依次写入日志,这样,后端文件系统就有可能归并写入动作,并最终提升并发承载力。因此,使用OSD日志能展现出优秀的突发写性能,实际上数据还没有写入OSD,因为文件系统把它们捕捉到了日志。
    2,一致性: Ceph的OSD守护进程需要一个能保证原子操作的文件系统接口。OSD把一个操作的描述写入日志,然后把操作应用到文件系统,这需要原子更新一个对象(例如归置组元数据)。每隔一段 filestore max sync interval 和 filestore min sync interval之间的时间,OSD停止写入、把日志同步到文件系统,这样允许 OSD 修整日志里的操作并重用空间。若失败, OSD 从上个同步点开始重放日志。

  • Monitor

    Ceph Monitor维护着展示集群状态的各种图表,包括监视器图、 OSD图、归置组( PG )图、和 CRUSH 图。 Ceph 保存着发生在Monitors、OSD和PG上的每一次状态变更的历史信息(称为epoch )。Monitor支持高可用部署,可以运行多个Monitor组成一个集群,一个监视器集群确保了当某个监视器失效时的高可用性。存储集群客户端向Ceph监视器索取集群运行图的最新副本,而集群通过Paxos算法就集群当前状态保持一致。

  • MDS

    Ceph Metadata Server为Ceph文件系统存储元数据(也就是说,Ceph 块设备和 Ceph 对象存储不使用MDS )。Metadata Server使得 POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。

  • CRUSH

    CRUSH 是 Ceph 使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。Ceph 客户端和 OSD 守护进程都用 CRUSH 算法来计算对象的位置信息,而不是依赖于一个中心化的查询表。与以往方法相比, CRUSH 的数据管理机制更好,它很干脆地把工作分配给集群内的所有客户端和 OSD 来处理,因此具有极大的伸缩性。 CRUSH 用智能数据复制确保弹性,更能适应超大规模存储。

  • Object

    Ceph 最底层的存储单元是 Object 对象,每个 Object 包含元数据和原始数据。

  • PG

    PG 全称 Placement Grouops,是一个逻辑的概念,一个 PG 包含多个Object。引入PG这一层其实是为了更好的分配数据和定位数据。

  • 存储pool

    Ceph 存储系统支持“池”概念,它是存储对象的逻辑分区,集群部署起来之后会有一个rdb的默认存储池。一个存储池可以设置PG的数量,CRUSH规则集,访问控制等。

  • RADOS

    RADOS 全称 Reliable Autonomic Distributed Object Store,是 Ceph 集群的核心,用户实现数据分配、Failover 等集群操作。

  • Libradio

    Librados 是 RADOS 的接口库,因为 RADOS 是协议很难直接访问,因此上层的 RBD、RGW 和 CephFS 都是通过 librados 访问的。Ceph的客户端通过一套名为librados的接口进行集群的访问,这里的访问包括对集群的整体访问和对象的访问两类接口。这套接口(API)包括C、C++和Python常见语言的实现,接口通过网络实现对Ceph集群的访问。在用户层面,可以在自己的程序中调用该接口,从而集成Ceph集群的存储功能,或者在监控程序中实现对Ceph集群状态的监控。

  • RBD

    RBD 全称 RADOS block device,是 Ceph 对外提供的块设备服务。Ceph块设备是精简配置的、大小可调且将数据条带化存储到集群内的多个 OSD 。 Ceph 块设备利用 RADOS 的多种能力,如快照、复制和一致性。 Ceph 的 RADOS 块设备( RBD )使用内核模块或 librbd 库与 OSD 交互。

  • RGW

    RGW 全称 RADOS gateway,是 Ceph 对外提供的对象存储服务,接口与 S3 和 Swift 兼容。

  • CephFS

    CephFS 全称 Ceph File System,是Ceph对外提供的文件系统服务。

环境配置

  • 创建ceph目录,如果有数据盘单独挂载
mkdir -p  /osd0  
  • 修改hosts和主机名,关闭selinux
cat >> /etc/hosts <<EOF  
10.3.100.86 ceph-node-001  
10.3.100.87 ceph-node-002  
10.3.100.89 ceph-node-003  
EOF  
  • 每台机器创建阿里的ceph源
cat > /etc/yum.repos.d/ceph.repo <<EOF  
[ceph]
name=ceph  
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/  
gpgcheck=0  
priority =1  
[ceph-noarch]
name=cephnoarch  
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/  
gpgcheck=0  
priority =1  
[ceph-source]
name=Ceph source packages  
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS  
gpgcheck=0  
priority=1  
EOF  
  • 组件部署架构
主机 部署组件
ceph1 admin,mon,osd
ceph2 mon,osd
ceph3 mon,osd
  • 打通三台机器的名密登陆

安装配置ceph块存储

  • 在ceph-node-001执行初始化
# yum -y install ceph-deploy
# mkdir /etc/ceph && cd /etc/ceph
# ceph-deploy new ceph-node-001
# ceph-deploy install ceph-node-001 ceph-node-002 ceph-node-003
  • 每个节点中修改目录权限/osd0
chown  ceph.ceph /osd0  
  • ceph-node-001执行,把ceph-node-001做为第一个monitor节点,收集密钥并初始化
ceph-deploy mon create-initial

#因为ceph建议前端mon和后端OSD集群监听网卡分离,和客户端交换的前端单独使用一个网卡,后端OSD集群之间配置一个网卡,提升集群性能
cat << EOF >> /etc/ceph/ceph.conf  
public_network = 10.3.100.0/24      #三台节点的网络号,不添加会报错  
EOF  
  • 在ceph-node-001执行,把ceph-node-002和ceph-node-003加入monitor集群
ceph-deploy mon add ceph-node-002  
ceph-deploy mon add ceph-node-003  
  • 在ceph-node-001上执行,初始化和启动OSD。如果正式环境的话,要求每个OSD的journal日志单独存放在一块ssd上,能明显提升性能。测试环境为了简单可以把数据和journal放在一起:
ceph-deploy osd prepare ceph-node-001:/osd0 ceph-node-002:/osd0 ceph-node-003:/osd0  
ceph-deploy osd activate ceph-node-001:/osd0 ceph-node-002:/osd0 ceph-node-003:/osd0  
  • 使用ceph-deploy命令将配置文件和 admin key复制到管理节点和Ceph节点,以便每次执行ceph CLI命令无需指定monitor地址和 ceph.client.admin.keyring。:
ceph-deploy admin ceph-node-001 ceph-node-002 ceph-node-003  
  • 查看ceph集群状态
[root@ceph-node-001 ceph]#  ceph -s
    cluster 5a95e527-6aa2-48ef-9f9c-a9b82b462066
     health HEALTH_OK
     monmap e3: 3 mons at {ceph-node-001=10.3.100.86:6789/0,ceph-node-002=10.3.100.87:6789/0,ceph-node-003=10.3.100.89:6789/0}
            election epoch 6, quorum 0,1,2 ceph-node-001,ceph-node-002,ceph-node-003
     osdmap e14: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v226: 64 pgs, 1 pools, 0 bytes data, 0 objects
            42435 MB used, 187 GB / 228 GB avail
                  64 active+clean
  • 发现有如上的的WARN信息,这个可能是三台机器之间的时间不同步,用ntpdata或者ntp同步下三台机器的时间,然后重启ceph-mon:
# /usr/sbin/ntpdate -u ntp.ubuntu.com cn.pool.ntp.org;clock -w
# crontab -e
*/30 * * * * /usr/sbin/ntpdate -u ntp.ubuntu.com cn.pool.ntp.org;clock -w
  • 清除安装包、配置数据,认证密钥等信息,可以执行如下命令:
# ceph-deploy purge ceph-node-001 ceph-node-002 ceph-node-003
# ceph-deploy purgedata ceph-node-001 ceph-node-002 ceph-node-003
# ceph-deploy forgetkeys

创建manager

Ceph Manager守护程序以 active/standby模式运行。部署其他manager daemons可确保如果一个守护程序或主机发生故障,另一守护程序或主机可以接管而不会中断服务。

  • 执行以下命令添加要部署的Manager守护程序,mgr扩容只需继续执行以下命令即可
ceph-deploy mgr create ceph-node-001 ceph-node-002 ceph-node-003  

更新详细的文档介绍

ceph安装·看云