一、概述 Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。目前也是OpenStack的主流后端存储。 特点:高性能摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。能够支持上千个存储节点的规模,支持TB到PB级的数据。高可用性副本数可以灵活控制。支持故障域分隔,数据强一致性。多种故障场景自动进行修复自愈。没有单点故障,自动管理。高可扩展性去中心化。扩展灵活。随着节点增加而线性增长。特性丰富支持三种存储接口:块存储、文件存储、对象存储。支持自定义接口,支持多种语言驱动。 GitHub地址:https:github。comcephceph 官方文档:https:docs。ceph。comenlateststartintro二、Ceph架构 支持三种接口:Object:有原生的API,而且也兼容Swift和S3的API。Block:支持精简配置、快照、克隆。File:Posix接口,支持快照。 RADOS全称ReliableAutonomicDistributedObjectStore,即可靠的、自动化的、分布式对象存储系统。RADOS是Ceph集群的精华,用户实现数据分配、Failover等集群操作。LibradosRados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C支持。MDS存储Ceph文件系统的元数据。三、Ceph核心组件介绍 OSDOSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等。 OSD是Ceph集群中存储实际用户数据的惟一组件,通常,一个OSD守护进程绑定到集群中的一个物理磁盘。因此,通常来说,Ceph集群中物理磁盘的总数与在每个物理磁盘上存储用户数据的OSD守护进程的总数相同。PGceph中引入了PG(placementgroup)的概念,PG是一个虚拟的概念而已,并不对应什么实体。ceph先将object映射成PG,然后从PG映射成OSD。 PoolPool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略,支持两种类型:副本(replicated)和纠删码(ErasureCode)。 Pool、PG和OSD的关系:一个Pool里有很多PG;一个PG里包含一堆对象,一个对象只能属于一个PG;PG有主从之分,一个PG分布在不同的OSD上(针对三副本类型);Monitor监控一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。负责监控整个Ceph集群运行的Map视图(如OSDMap、MonitorMap、PGMap和CRUSHMap),维护集群的健康状态,维护展示集群状态的各种图表,管理集群客户端认证与授权。MDSMDS全称CephMetadataServer,是CephFS服务依赖的元数据服务。负责保存文件系统的元数据,管理目录结构。对象存储和块设备存储不需要元数据服务;如果不使用CephFS可以不安装。Mgrceph官方开发了cephmgr,主要目标实现ceph集群的管理,为外界提供统一的入口。例如cephmetrics、zabbix、calamari、prometheus。 Cephmanager守护进程(Cephmgr)是在Kraken版本中引入的,它与monitor守护进程一起运行,为外部监视和管理系统提供额外的监视和接口。RGWRGW全称RADOSgateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。CephFSceph文件系统提供了一个符合posix标准的文件系统,它使用Ceph存储集群在文件系统上存储用户数据。与RBD(块存储)和RGW(对象存储)一样,CephFS服务也作为librados的本机接口实现。四、Ceph三种存储类型1)块存储服务(RBD) 块是一个字节序列(通常为512)。基于块的存储接口是一种成熟且常见的数据存储方式介质包括硬盘、固态硬盘、CD、软盘,甚至磁带。块设备接口的无处不在非常适合交互具有包括Ceph在内的海量数据存储。Ceph数据块设备可精简配置、可调整大小,并按条带方式存储数据在多个OSD。 优点:通过Raid与LVM等手段,对数据提供了保护;多块廉价的硬盘组合起来,提高容量;多块磁盘组合出来的逻辑盘,提升读写效率; 缺点:采用SAN架构组网时,光纤交换机,造价成本高;主机之间无法共享数据; 使用场景:docker容器、虚拟机磁盘存储分配;日志存储;文件存储; 总结:一个Linux内核级的块设备,允许用户像任何其他Linux块设备一样访问Ceph。2)文件系统存储服务(CephFS) Ceph文件系统(CephFS),是建立在Ceph分布式对象存储的顶部,CephFS提供了最先进的、多用途、高度可用且高性能的文件存储在各种场景应用,包括共享home目录、FTP和NFS共享存储等等。 Ceph有了块存储,为什么还需要文件系统接口呢? 主要是因为应用场景的不同,Ceph的块设备具有优异的读写性能,但不能多处挂载同时读写,目前主要用在OpenStack上作为虚拟磁盘,而Ceph的文件系统接口读写性能较块设备接口差,但具有优异的共享性。 优点:造价低,随便一台机器就可以了。方便文件共享。 缺点:读写速率低。传输速率慢。 使用场景:日志存储。有目录结构的文件存储。3)对象存储服务(RGW) Ceph对象网关是构建在librados。它在应用程序和Ceph之间提供了一个RESTful网关。存储集群。Ceph对象存储支持两种接口:S3兼容:通过接口提供对象存储功能与AmazonS3RESTfulAPI的大部分子集兼容。快速兼容:通过接口提供对象存储功能与OpenStackSwiftAPI的一大块子集兼容。 优点:具备块存储的读写高速。具备文件存储的共享等特性。 使用场景:图片存储。视频存储。五、Ceph版本发行生命周期 Ceph从Nautilus版本(14。2。0)开始,每年都会有一个新的稳定版发行,预计是每年的3月份发布,每年的新版本都会起一个新的名称(例如,Mimic)和一个主版本号(例如,13代表Mimic,因为M是字母表的第13个字母)。 版本号的格式为x。y。z,x表示发布周期(例如,13代表Mimic,17代表Quincy),y表示发布版本类型,即x。0。zy等于0,表示开发版本x。1。zy等于1,表示发布候选版本(用于测试集群)x。2。zy等于2,表示稳定错误修复版本(针对用户) 在Octopus版本后使用cephadm来部署ceph集群,如果使用cephadm部署,在后期新的版本升级时,可以做到完全自动化,并可以通过cephWcephadm查看升级进度,升级完成后,无法降级,升级时请不要跨版本升级,例如:当前使用Octopus升级到Quincy,要先把Octopus升级到Pacific,然后在升级至Quincy,这是最稳妥的方式。 稳定版本的生命周期在第一个发布月份后,大约2年时间将停止该版本的更新维护,具体版本发布时间见下表。 六、Ceph集群部署 Ceph的部署工具:cephdeploy:官方的部署工具,不再积极维护cephdeploy。它不支持RHEL8,CentOS8或更新的操作系统。cephansible:红帽的部署工具cephchef:利用chef进行自动部署Ceph的工具puppetceph:puppet的ceph模块cephadmcephadm仅支援Octopus及更新版本(推荐)。1)集群部署规划 IP hostname 角色 磁盘 操作系统 192。168。182。130 local168182130 monitor,mgr,rgw,mds,osd 220G centos7 192。168。182。131 local168182131 monitor,mgr,rgw,mds,osd 220G centos7 192。168。182。132 local168182132 monitor,mgr,rgw,mds,osd 220G centos7monitor:Ceph监视管理节点,承担Ceph集群重要的管理任务,一般需要3或5个节点。mgr:Ceph集群管理节点(manager),为外界提供统一的入口。rgw:Ceph对象网关,是一种服务,使客户端能够利用标准对象存储API来访问Ceph集群。mds:Ceph元数据服务器,MetaDataServer,主要保存的文件系统服务的元数据,使用文件存储时才需要该组件。osd:Ceph存储节点ObjectStorageDaemon,实际负责数据存储的节点。2)前期准备1、关闭filewalld服务systemctlstopfirewalld。servicesystemctldisablefirewalld。service2、关闭并禁用SELinuxsedisSELINUXenforcingSELINUXdisabledetcselinuxconfigsetenforce03、配置hosts192。168。182。130local168182130192。168。182。131local168182131192。168。182。132local1681821324、ssh免密配置sshkeygen。。。一路Entersshcopyidrootlocal168182130会有一次密码输入sshcopyidrootlocal168182131sshcopyidrootlocal1681821324、配置时间同步yuminstallychronysystemctlenablenowchronyd3)添加磁盘 如果添加完磁盘,看不到,可以执行以下命令:重新扫描SCSI总线添加设备echosysclassscsihosthost0scanechosysclassscsihosthost1scanechosysclassscsihosthost2scan 4)安装docker:(所有节点操作,包括新增)centos7wgetOetcyum。repos。dCentOSBase。repohttp:mirrors。aliyun。comrepoCentos7。repo安装yumconfigmanager配置工具yumyinstallyumutils设置yum源yumconfigmanageraddrepohttp:mirrors。aliyun。comdockercelinuxcentosdockerce。repo安装dockerce版本yuminstallydockerce启动docker服务并开机自启systemctlenablenowdocker查看版本号dockerversion查看版本具体信息dockerversionDocker镜像源设置修改文件etcdockerdaemon。json,没有这个文件就创建添加以下内容后,重启docker服务:catetcdockerdaemon。jsonEOF{registrymirrors:〔http:hubmirror。c。163。com〕}EOFsystemctlrestartdocker5)安装cephadm 下载cephadm脚本:(只在主节点操作)mkdirpoptcephmycluster;cdoptcephmyclustercurlsilentremotenamelocationhttps:github。comcephcephrawoctopussrccephadmcephadmocephadmchmodxcephadm或者:curlhttps:raw。githubusercontent。comcephcephv15。2。1srccephadmcephadmocephadmchmodxcephadm下载出错:配置etchosts文件199。232。28。133raw。githubusercontent。com安装python3:(所有节点执行)yuminstallpython3y配置ceph存储库:(或指定版本)。cephadmaddreporeleaseoctopus或。cephadmaddrepoversion15。2。1开始安装cephcommon,ceph工具。cephadminstallcephcommonceph安装cephadm工具。cephadminstallwhichcephadmwhichceph6)初始化ceph集群 当前节点安装mon、mgr角色,部署prometheus、grafana、alertmanager、nodeexporter等服务。先安装一个节点,其它节点通过后面的命令添加到集群中即可您需要知道用于集群的第一个监视器守护程序的IP地址。如果有多个网络和接口,要确保选择任何可供访问Ceph群集的主机访问的网络和接口。cephadmbootstrapmonip192。168。182。130命令特点:在本地主机上为新集群创建监视和管理器守护程序。为Ceph集群生成一个新的SSH密钥,并将其添加到root用户的root。sshauthorizedkeys文件中。将与新集群进行通信所需的最小配置文件编写为etccephceph。conf。将client。admin管理密钥的副本写入etccephceph。client。admin。keyring。将公用密钥的副本写入etccephceph。pub。查看部署的服务dockerps输出信息CephDashboardisnowavailableat:URL:https:local168182130:8443User:adminPassword:0ard2l57jiYoucanaccesstheCephCLIwith:sudousrsbincephadmshellfsidd1e9b98689b811edbec2000c29ca76a9cetccephceph。confketccephceph。client。admin。keyringPleaseconsiderenablingtelemetrytohelpimproveCeph:cephtelemetryonFormoreinformationsee:https:docs。ceph。comdocsmastermgrtelemetry 根据提示可知,有个web地址:https:ip:8443,这里的截图是部署完之后的截图。 通过ceph命令查看集群状态cephs 7)添加新节点 在新主机的根用户authorizedkeys文件中安装群集的公共SSH密钥:sshcopyidfietccephceph。pubrootlocal168182131sshcopyidfietccephceph。pubrootlocal168182132 配置新节点cephorchhostaddlocal168182131cephorchhostaddlocal168182132第一次部署新节点时直接用上边的命令即可:但是之后的节点新增有可能上述命令出错:cephorchhostaddlocal168182131192。168。182。133后边跟上对应的IP查看节点cephorchhostls 8)部署监视器(monitor)cephorchapplymonnumberofmonitors确保在此列表中包括第一台(引导)主机。cephorchapplymonlocal168182130,local168182131,local1681821329)部署osd 存储设备清单可以显示为:cephorchdevicels 可用存储设备的条件:设备必须没有分区。设备不得具有任何LVM状态。不得安装设备。该设备不得包含文件系统。该设备不得包含CephBlueStoreOSD。设备必须大于5GB。 创建osd的方式:【第一种方式】告诉Ceph使用任何可用和未使用的存储设备:cephorchapplyosdallavailabledevices【第二种方式】或者使用下面命令指定使用的磁盘(推荐使用这种方式吧)1。cephorchdaemonaddosdhost:devicepath例如:从特定主机上的特定设备创建OSD:cephorchdaemonaddosdlocal168182130:devsdbcephorchdaemonaddosdlocal168182130:devsdccephorchdaemonaddosdlocal168182131:devsdbcephorchdaemonaddosdlocal168182131:devsdccephorchdaemonaddosdlocal168182132:devsdbcephorchdaemonaddosdlocal168182132:devsdc 删除OSD节点:(安全)1。停止osd进程cephosdstopx(x可以通过cephosdls查看)停止osd的进程,这个是通知集群这个osd进程不在了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移2。将节点状态标记为outcephosdoutosd。x停止到osd的进程,这个是通知集群这个osd不再映射数据了,不提供服务了,因为本身没权重,就不会影响到整体的分布,也就没有迁移3。从crush中移除节点cephosdcrushremoveosd。x这个是从crush中删除,4。删除节点cephosdrmosd。x这个是从集群里面删除这个节点的记录ls5。删除节点认证(不删除编号会占住)cephauthdelosd。x这个是从认证当中去删除这个节点的信息10)部署mds(cephFS元数据守护程序)cephorchapplymdsfsnameplacementnumdaemons〔host1。。。〕cephorchapplymdsmyfsplacement3local168182130local168182131local16818213211)部署RGW为特定领域和区域部署一组radosgw守护程序:cephorchapplyrgwrealmnamezonenameplacementnumdaemons〔host1。。。〕cephorchapplyrgwmyorguseast1placement3local168182130local168182131local168182132说明:myorg:领域名(realmname)useast1:区域名(zonename)myrgwCephadm将等待运行正常的群集,并在部署rgw守护程序之前自动创建所提供的领域和区域(realmname和zonename不存在的情况) 查看集群状态cephs 12)添加专用的cephmgr节点cephmgr节点默认会挑选一主一备添加新节点cephorchhostaddlocal168182131192。168。182。133部署cephmgrcephorchapplymgrlocal168182130,local168182131,local168182132cephorchapplymgrlocal168182130,local168182131,local168182132,local168182133 分布式存储系统Ceph介绍与环境部署就先到这了,怎么使用,会放到下篇文章详细介绍,小伙伴有任何疑问欢迎给我留言,后续会持续更新【云原生大数据】相关的文章,也可以关注我的公众号【大数据与云原生技术分享】