让我们了解 Ceph 分布式存储

让我们了解 Ceph 分布式存储

作者:佚名 2018-01-30 09:07:36

存储

存储软件

分布式 怀着对新事物的向往,果断选择Ceph来实现Ceph块存储对接kubernetes来实现pod的数据持久化。

前言

最近在学习kubernetes过程中,想实现pod数据的持久化。在调研的过程中,发现ceph在最近几年发展火热,也有很多案例落地企业。在选型方面,个人更加倾向于社区火热的项目,GlusterFS、Ceph都在考虑的范围之内,但是由于GlusterFS只提供对象存储和文件系统存储,而Ceph则提供对象存储、块存储以及文件系统存储。怀着对新事物的向往,果断选择Ceph来实现Ceph块存储对接kubernetes来实现pod的数据持久化。

[[218717]]

一、初始Ceph

1.1了解什么是块存储/对象存储/文件系统存储?

直接进入主题,ceph目前提供对象存储(RADOSGW)、块存储RDB以及CephFS文件系统这3种功能。对于这3种功能介绍,分别如下:

1.对象存储,也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL和其他扩展,代表主要有Swift、S3以及Gluster等;

2.块存储,这种接口通常以QEMUDriver或者KernelModule的方式存在,这种接口需要实现Linux的BlockDevice的接口或者QEMU提供的BlockDriver接口,如Sheepdog,AWS的EBS,青云的云硬盘和阿里云的盘古系统,还有Ceph的RBD(RBD是Ceph面向块存储的接口)。在常见的存储中DAS、SAN提供的也是块存储;

3.文件存储,通常意义是支持POSIX接口,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式存储提供了并行化的能力,如Ceph的CephFS(CephFS是Ceph面向文件存储的接口),但是有时候又会把GlusterFS,HDFS这种非POSIX接口的类文件存储接口归入此类。当然NFS、NAS也是属于文件系统存储;

1.2Ceph组件介绍

从下面这张图来简单学习下,Ceph的架构组件。(提示:本人在学习过程中所绘,如果发现问题欢迎留言,不要喷我哟)

Monitor,负责监视整个集群的运行状况,信息由维护集群成员的守护程序来提供,各节点之间的状态、集群配置信息。Cephmonitormap主要包括OSDmap、PGmap、MDSmap和CRUSH等,这些map被统称为集群Map。cephmonitor不存储任何数据。下面分别开始介绍这些map的功能:

  • Monitormap:包括有关monitor节点端到端的信息,其中包括Ceph集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过”cephmondump”查看monitormap。
  • OSDmap:包括一些常用的信息,如集群ID、创建OSDmap的版本信息和最后修改信息,以及pool相关信息,主要包括pool名字、pool的ID、类型,副本数目以及PGP等,还包括数量、状态、权重、最新的清洁间隔和OSD主机信息。通过命令”cephosddump”查看。
  • PGmap:包括当前PG版本、时间戳、最新的OSDMap的版本信息、空间使用比例,以及接近占满比例信息,同事,也包括每个PGID、对象数目、状态、OSD的状态以及深度清理的详细信息。通过命令”cephpgdump”可以查看相关状态。
  • CRUSHmap:CRUSHmap包括集群存储设备信息,故障域层次结构和存储数据时定义失败域规则信息。通过命令”cephosdcrushmap”查看。
  • MDSmap:MDSMap包括存储当前MDSmap的版本信息、创建当前的Map的信息、修改时间、数据和元数据POOLID、集群MDS数目和MDS状态,可通过”cephmdsdump”查看。

OSD,CephOSD是由物理磁盘驱动器、在其之上的Linux文件系统以及CephOSD服务组成。CephOSD将数据以对象的形式存储到集群中的每个节点的物理磁盘上,完成存储数据的工作绝大多数是由OSDdaemon进程实现。在构建CephOSD的时候,建议采用SSD磁盘以及xfs文件系统来格式化分区。BTRFS虽然有较好的性能,但是目前不建议使用到生产中,目前建议还是处于围观状态。

Ceph元数据,MDS。ceph块设备和RDB并不需要MDS,MDS只为CephFS服务。

RADOS,ReliableAutonomicDistributedObjectStore。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致。

librados,librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。

ADOS块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。

RADOSGW,网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3和Swift兼容的RESTfulAPI接口。

CephFS,Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。

简单说下CRUSH,ControlledReplicationUnderScalableHashing,它表示数据存储的分布式选择算法,ceph的高性能/高可用就是采用这种算法实现。CRUSH算法取代了在元数据表中为每个客户端请求进行查找,它通过计算系统中数据应该被写入或读出的位置。CRUSH能够感知基础架构,能够理解基础设施各个部件之间的关系。并且CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH算是使得ceph实现了自我管理和自我修复。

RADOS分布式存储相较于传统分布式存储的优势在于:

1.将文件映射到object后,利用ClusterMap通过CRUSH计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和BlockMAp的管理。

2.RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展。

二、安装Ceph

2.1环境准备

##环境说明

主机IP功能

ceph-node01192.168.58.128deploy、mon*1、osd*3

ceph-node02192.168.58.129mon*1、osd*3

ceph-node03192.168.58.130mon*1、osd*3

##准备yum源

  1. cd /etc/yum.repos.d/ && sudo mkdir bak 
  2. sudo mv *.repo bak/ 
  3. sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
  4. sudo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo 
  5. sudo sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo 
  6. sudo sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo 
  7. sudo sed -i 's/$releasever/7/g' /etc/yum.repos.d/CentOS-Base.repo 

##添加Ceph源

  1. sudo cat <<EOF > /etc/yum.repos.d/ceph.repo 
  2. [Ceph] 
  3. name=Ceph packages for x86_64 
  4. baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/ 
  5. enabled=1 
  6. gpgcheck=1 
  7. type=rpm-md 
  8. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
  9.   
  10. [Ceph-noarch] 
  11. name=Ceph noarch packages 
  12. baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/ 
  13. enabled=1 
  14. gpgcheck=1 
  15. type=rpm-md 
  16. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
  17.   
  18. [ceph-source] 
  19. name=Ceph source packages 
  20. baseurl=https://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/ 
  21. enabled=1 
  22. gpgcheck=1 
  23. type=rpm-md 
  24. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc 
  25. EOF 

##配置免密钥(略)

提示:如果使用普通用户进行安装,请授予用户相关权限,如下:

a.将yangsheng用户加入到sudo权限(yangshengALL=(ALL)NOPASSWD:ALL)

b.将/etc/sudoers中的“Defaultsrequiretty”注释

2.2开始安装

##安装部署工具(在192.168.58.128执行如下操作)

  1. yum makecache 
  2. yum -y install ceph-deploy 
  3.   
  4. ceph-deploy --version 
  5. 1.5.39 

##初始化monitor

  1. mkdir ceph-cluster && cd ceph-cluster 
  2. ceph-deploy new ceph-node01 ceph-node02 ceph-node03 

根据自己的IP配置向ceph.conf中添加public_network,并稍微增大mon之间时差允许范围(默认为0.05s,现改为2s):

  1. # change default replica 3 to 2 
  2. osd pool default size = 2 
  3.   
  4. public network = 192.168.58.0/24 
  5. cluster network = 192.168.58.0/24 

##安装ceph

  1. ceph-deployinstallceph-node01ceph-node02ceph-node03 

##开始部署monitor

  1. ceph-deploy  mon create-initial 
  2.   
  3. [root@ceph-node01 ceph]# ls 
  4. ceph.bootstrap-mds.keyring  ceph.bootstrap-osd.keyring  ceph.client.admin.keyring  ceph-deploy-ceph.log  rbdmap 
  5. ceph.bootstrap-mgr.keyring  ceph.bootstrap-rgw.keyring  ceph.conf                  ceph.mon.keyring 

查看集群状态

  1. [root@ceph-node01 ceph]# ceph -s 
  2.     cluster b5108a6c-7e3d-4295-88fa-88dc825be3ba 
  3.      health HEALTH_ERR 
  4.             no osds 
  5.      monmap e1: 3 mons at {ceph-node01=192.168.58.128:6789/0,ceph-node02=192.168.58.129:6789/0,ceph-node03=192.168.58.130:6789/0} 
  6.             election epoch 6, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03 
  7.      osdmap e1: 0 osds: 0 up, 0 in 
  8.             flags sortbitwise,require_jewel_osds 
  9.       pgmap v2: 64 pgs, 1 pools, 0 bytes data, 0 objects 
  10.             0 kB used, 0 kB / 0 kB avail 
  11.                   64 creating   

提示:Monitor创建成功后,检查集群的状态,此时集群状态并不处于健康状态。

##开始部署OSD

  1. ### 列出节点所有磁盘信息 
  2. ceph-deploy disk list ceph-node01 ceph-node02 ceph-node03 
  3.   
  4. ### 清除磁盘分区和内容 
  5. ceph-deploy disk zap ceph-node01:sdb ceph-node02:sdb ceph-node03:sdb 
  6.   
  7. ### 分区格式化并激活 
  8. ceph-deploy osd create ceph-node01:sdb ceph-node02:sdb ceph-node03:sdb 
  9. ceph-deploy osd activate ceph-node01:sdb ceph-node02:sdb ceph-node03:sdb   

此时,再次查看集群状态

  1. [root@ceph-node01 ceph-cluster]# ceph -s 
  2.     cluster 86fb7c8b-9ad1-4eaf-a24c-0d2d9f36ab29 
  3.      health HEALTH_OK 
  4.      monmap e2: 3 mons at {ceph-node01=192.168.58.128:6789/0,ceph-node02=192.168.58.129:6789/0,ceph-node03=192.168.58.130:6789/0} 
  5.             election epoch 6, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03 
  6.      osdmap e15: 3 osds: 3 up, 3 in 
  7.             flags sortbitwise,require_jewel_osds 
  8.       pgmap v32: 64 pgs, 1 pools, 0 bytes data, 0 objects 
  9.             100 MB used, 45946 MB / 46046 MB avail 
  10.                   64 active+clean 

2.3清理环境

如果之前部署失败了,不必删除ceph客户端,或者重新搭建虚拟机,只需要在每个节点上执行如下指令即可将环境清理至刚安装完ceph客户端时的状态!强烈建议在旧集群上搭建之前清理干净环境,否则会发生各种异常情况。

  1. sudo ps aux|grep ceph | grep -v "grep"| awk '{print $2}'|xargs kill -9 
  2. sudo ps -ef|grep ceph 
  3.   
  4. sudo umount /var/lib/ceph/osd/* 
  5. sudo rm -rf /var/lib/ceph/osd/* 
  6. sudo rm -rf /var/lib/ceph/mon/* 
  7. sudo rm -rf /var/lib/ceph/mds/* 
  8. sudo rm -rf /var/lib/ceph/bootstrap-mds/* 
  9. sudo rm -rf /var/lib/ceph/bootstrap-osd/* 
  10. sudo rm -rf /var/lib/ceph/bootstrap-rgw/* 
  11. sudo rm -rf /var/lib/ceph/tmp/* 
  12. sudo rm -rf /etc/ceph/* 
  13. sudo rm -rf /var/run/ceph/*   

三、配置客户端

3.1安装客户端 

  1. ssh-copy-id 192.168.58.131 
  2. ceph-deploy install 192.168.58.131 

将Ceph配置文件复制到192.168.58.131。

  1. ceph-deploy config push 192.168.58.131 

3.2新建用户密钥

客户机需要ceph秘钥去访问ceph集群。ceph创建了一个默认的用户client.admin,它有足够的权限去访问ceph集群。但是不建议把client.admin共享到所有其他的客户端节点。这里我用分开的秘钥新建一个用户(client.rdb)去访问特定的存储池。

  1. cephauthget-or-createclient.rbdmon'allowr'osd'allowclass-readobject_prefixrbd_children,allowrwxpool=rbd' 

为192.168.58.131上的client.rbd用户添加秘钥

  1. cephauthget-or-createclient.rbd|ssh192.168.58.131tee/etc/ceph/ceph.client.rbd.keyring 

到客户端(192.168.58.131)检查集群健康状态

  1. [root@localhost ~]# cat /etc/ceph/ceph.client.rbd.keyring >> /etc/ceph/keyring 
  2. [root@localhost ~]# ceph -s --name client.rbd 
  3.     cluster 86fb7c8b-9ad1-4eaf-a24c-0d2d9f36ab29 
  4.      health HEALTH_OK 
  5.      monmap e2: 3 mons at {ceph-node01=192.168.58.128:6789/0,ceph-node02=192.168.58.129:6789/0,ceph-node03=192.168.58.130:6789/0} 
  6.             election epoch 6, quorum 0,1,2 ceph-node01,ceph-node02,ceph-node03 
  7.      osdmap e15: 3 osds: 3 up, 3 in 
  8.             flags sortbitwise,require_jewel_osds 
  9.       pgmap v32: 64 pgs, 1 pools, 0 bytes data, 0 objects 
  10.             100 MB used, 45946 MB / 46046 MB avail 
  11.                   64 active+clean 

3.3创建块设备

  1. rbd create foo --size 4096 --name client.rbd               # 创建一个 4096MB 大小的RADOS块设备 
  2. rbd create rbd01 --size 10240 --name client.rbd            # 创建一个 10240MB 大小的RADOS块设备 

映射块设备

  1. [root@localhost ceph]# rbd create rbd02 --size 10240 --image-feature layering --name client.rbd 
  2. [root@localhost ceph]# rbd map --image rbd02 --name client.rbd /dev/rdb02 
  3. /dev/rbd0   

提示:在映射块设备的时候,发生了如下错误。

  1. [root@localhost ceph]# rbd map --image rbd01 --name client.rbd /dev/rdb01 
  2. rbd: sysfs write failed 
  3. RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable"
  4. In some cases useful info is found in syslog - try "dmesg | tail" or so. 
  5. rbd: map failed: (6) No such device or address   

解决该办法有多种方式,分别如下所示:

1.在创建的过程中加入如下参数”–image-featurelayering”也解决该问题。

2.手动disable掉相关参数,如下所示:

  1. rbdfeaturedisablefooexclusive-lock,object-map,fast-diff,deep-flatten 

3.在每个ceph节点的配置文件中,加入该配置项”rbd_default_features=1″。

3.4检查被映射的块设备

  1. [root@localhost ceph]# rbd showmapped --name client.rbd 
  2. id pool image snap device    
  3. 0  rbd  rbd02 -    /dev/rbd0 

创建并挂载该设备

  1. fdisk -l /dev/rbd0 
  2. mkfs.xfs /dev/rbd0 
  3. mkdir /mnt/ceph-disk1 
  4. mount /dev/rbd1 /mnt/ceph-disk1   

验证

  1. [root@localhost ceph]# df -h /mnt/ceph-disk1/ 
  2. 文件系统        容量  已用  可用 已用% 挂载点 
  3. /dev/rbd0        10G   33M   10G    1% /mnt/ceph-disk1 

一个ceph块设备就创建完成。

 

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/294548.html<

(0)
运维的头像运维
上一篇2025-05-21 03:23
下一篇 2025-05-21 03:24

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注