ceph概述 基础知识 NAS、SAN、DAS这些是共享文件系统
什么是分布式文件系统(DFS) 如果局域网中有多台服务器,并且共享文件夹也分布在不同的服务器上,这就不利于管理员的管理和用户的访问。而使用分布式文件系统,系统管理员就可以把不同服务器上的共享文件夹组织在一起,构建成一个目录树。这在用户看来,所有共享文件仅存储在一个地点,只需访问一个共享的DFS根目录,就能够访问分布在网络上的文件或文件夹,而不必知道这些文件的实际物理位置。 分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连 分布式文件系统的设计基于客户机/服务器模式
分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。
而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
集群是个物理形态,分布式是个工作方式。 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上
常用分布式文件系统 Lustre Hadoop大数据 FastDFS Ceph(被红帽收购了,单独做成了一个镜像,需要自己买,也可以到网上去找开源的) GlusterFS
什么是ceph ceph是一个分布式文件系统 具有高扩展、高可用、高性能的特点 ceph可以提供对象存储、块存储、文件系统存储 ceph可以提供PB级别的存储空间PB>TB>GB
ceph组件 OSDs 存储设备 Monitors 集群监控组件(监控磁盘剩余的空间等) MDSs 存放文件系统的元数据(元数据:数据信息,就是文件的信息就是用ls -ld查看文件的信息的那些信息。MDS存储文件的信息)对象存储和块存储不需要该组件 Client ceph客户端
什么叫Ceph的元数据服务器(metadata)?
任何文件系统中的数据分为数据和元数据。数据是指普通文件中的实际数据,而元数据指用来描述一个文件的特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息(inode…)等等。在集群文件系统中,分布信息包括文件在磁盘上的位置以及磁盘在集群中的位置。用户需要操作一个文件必须首先得到它的元数据,才能定位到文件的位置并且得到文件的内容或相关属性。
Ceph OSD: 全称Obiect Storage Device,主要存储ceph中的数据,以及处理数据的复制、恢复、回补、平衡数据落盘分布,Ceph集群中OSD进程通过心跳来检测,一个Ceph存储集群中的数据默认是两副本。副本数是可以调整的,这个需要根据项目需求来定。
需要注意:Ceph集群中的OSD进程可以是后端物理存储中一块磁盘或者一个分区
Ceph Monitor :Ceph集群的监控器,主要负责维护监控整个集群的健康状态,包含Monitor map 、OSD map 、PG map 、CRUSH map
Ceph MDS: 即是Ceph Metadata Server,主要保存的是Ceph文件系统的元数据
特别注意:
Ceph的块存储和Ceph对象存储都不需要Ceph MDS
OSD(object storage daemon) 1、osd的意思是 对象存储设备 2、osd的作用 1、负责存储实际用户数据(数据将会以对象的形式存储在osd中) 2、负责响应客户端读操作请求
通常一个osd守护进程仅与ceph集群中的一个磁盘绑定
三、ceph monitor(MON) 1、mon的意识是 监控 2、mon的作用 1、通过一系列map跟踪整个集群的健康状态,监控整个集群的监控状况 2、map是指这几个组件的map:osd/mon/pg/crush,所有的集群节点都向mon节点报告状态,并分享每一个状态变化的信息 3、一个mon为每一个组件维护一个独立的map,mon不存储实际的数据,这是osd的工作
四、librados库 1、作用 1、是一种用来简化访问rados的方法 2、支持php,ruby,python,java,c/c++ 3、librados支持直接访问rados 4、开发者能够创建自己的接口来访问ceph存储集群
部署ceph集群
安装部署软件 ceph-deploy
创建工作目录,用来存放密钥与配置文件 mkdir ceph-cluster cd ceph-cluster
部署存储集群 创建ceph集群 ceph-deploy new node1 node2 node3 (node1 node2 node3 要和你主机名一样,以及之间能相互通信和做了主机映射) 创建完之后会多出相应的文件
给所有节点安装ceph软件包 ceph-deploy install node1 node2 node3
初始化所有节点的mon服务(主机名解析必须对) 也就是创建监控 ceph-deploy mon create-initial 注:这里没有指定主机,是因为第一步创建的配置文件中已经有了,所以要求主机名解析必须对,否则连接不到对就的主机
创建osd存储设备 当我们格式化磁盘后会有一个日志文件和数据文件
创建日志盘(把各个盘的日志文件单独拿出来存放,有几块磁盘就要创建就几块磁盘的日志文件) parted /dev/vdb mklabel gpt parted /dev/vdb mkpart primary 1M 50% parted /dev/vdb mkpart primary 50% 100% 让磁盘的所有者所属组都是ceph chown ceph.ceph /dev/vdb*
初始化存储盘 要在管理目录下操作 ceph-deploy disk zap node3:vdc node3:vdd 创建OSD存储空间 ceph-deploy osd create node3:vdc:/dev/vdb1 node3:vdd:/dev/vdb2将主机node3的磁盘vdc设置为数据文件它的日志磁盘是/dev/vdb1
验证 查看集群状态 ceph -s
可能出现的错误 health:HEALTH_WARN clock skew detected on node,node3 clock skew(时间不同步) 解决:请先将所有主机的时间都使用NTP时间同步
可能出现的错误 osd create 创建osd存储空间,如提示run 'gatherkeys'
systemctl restart ceph\*.service ceph\*.target在所有节点,或仅在失败的节点重启服务
查看日志ceph-deploy-ceph.log
osd日志写入方式 1.第一步,写入数据时,首先写入一个成为日志的独立存储区域,所有的写都是先写到日志 2.第二步,写完日志后,再写到备用存储 3.日志存储区域: 可以是和OSD同一个机械磁盘 也可以是独立的SSD磁盘 更可以是磁盘上的某个分区 甚至可以是文件系统上的一个文件 4.作为存储日志的盘符,影响着性能
ceph块存储
RBD
1、意思 叫做ceph块设备,或者叫rados快设备 2、作用 1、对外提供块存储,可以被映射、格式化、向磁盘一样被挂载到服务器 2、支持精简制备和快照的特性支持企业功能,如快照、cow克隆内在缓存
RADOS(Reliable Autonomic Distributed Object Storage)
1、rados的意思是 可靠、自动、分布式对象存储(可靠的自主分布式对象存储) 2、rados的作用 1、rados是ceph集群的基础,是ceph存储系统的核心,ceph中一切都是以对象的形式存储,而rados就是负责存储这些对象,无需考虑数据是啥类型 2、确保数据的一致性和可靠性 3、负责数执行数据的复制、故障检测和恢复 4、负责数据在集群节点之间的迁移和再平衡 5、ceph所有优秀特性都是rados提供的,如: 分布式对象存储、高可用性、高可靠性、没有单点故障、自我修复、自我管理 6、rados就是cpeh集群中的大脑,负责决策、调度等工作
创建镜像
查看存储池(默认有一个rdb池)
ceph osd lspools
创建存储池
ceph osd pool create test1 100
查看rbd list
创建镜像、查看镜像
rdb create demo-image(镜像名自定义) --image-feature layering(创建镜像的方式以分层) --size 10G 镜像的大小
查看镜你大小rbd info 镜像名
如果要指定存储池的名字就只需要在镜像名前加上存储池的名字
rbd create rbd/imgage --image-feature layering --size 10G
删除镜像
rbd remove demo-image
缩小容量
rbd resize --size 7G image(镜像名) --alow-shrink 缩小到多少
扩容容量
rbd resize --size 15G image(镜像名)扩大到15G而不是扩大15G
将镜像映射为本地磁盘
rbd map 镜像名
接下来格式化mkfs.xfs /dev/磁盘名要
将镜像从本地磁盘删除
rbd unmap 镜像名
做远程主机防问ceph的镜像
客户端想要用ceph的镜像需要做如下步骤
客户端需要安装ceph-common软件包
ls /etc/ceph/ rbdmap 从管理主机上拷贝集群配置文件(否则不知道集群在那) 拷贝集群配置文件在/etc/ceph/ceph.conf将它拷贝到客户端下面的/etc/ceph 从管理主机上拷贝连接密钥(否则无连接权限) scp 192.168.4.51:/etc/ceph/ceph.client.admin.keyring /etc/ceph 那个客户端想使用ceph镜像文件做文件存储就做上面三步
客户如何使用 映射镜像到本地磁盘 rbd map 镜像名 rbd showmapped查看映像状态 格式化、挂载分区 客户端
做数据备份和克隆
创建镜像快照(快照:在当前生成一个快照文件,保存某一刻的状态,恢复数据) 快照使用COW技术,对大数据快照速度会很快 COW写时复制技术(copy online write):只有在对原文件做写操作时,旧数据会被复制到快照文件里,反之就不会写入 写操作包括:rm -r a.txt 添加新内容 删除文件内容
快照
占用内存小,备份速度快,能快捷恢复到某个状态,缺点,不能脱离虚拟系统而存在。
克隆可以将整个系统备份到U盘或者其他地方,后续可以对这个备份进行导入,即可此刻的系统。可以脱离虚拟系统。缺点,占用内存空间比较大。相当于将镜像拷贝一次。 链接克隆: 依赖于原主机
完整克隆:完整复制对象系统
集群时候,推荐使用链接克隆,每个克隆机单独并互不影响
在管理主机上给被挂载的镜像创建快照 rbd snap ls 镜像名 查看镜像有那些快照 rbd snap create image(镜像名) --snap image-snap1(快照名) 创建镜像快照
使用快照恢复误删除的文件 rbd snap rollback imgage --snap(用那个快照名恢复) image-snap1 客户端卸载当前挂载的image镜像后再次挂载image就可以看到恢复的文件
快照克隆 如果想从快照恢复出来一个新的镜像,则可以使用克隆 注意,克隆前,需要对快照进行保护操作 被保护的快照无法删除,取消保持保护(unprotect) 创建保护快照 rbd snap protect(私有的) 镜像名 --snap 快照名 rbd clone image --snap image-snamp1 image-clone(克隆后的快照名) --image-feature layering rbd info image-clone 查看克隆文件的信息若没有会报错
克隆镜像很多数据都来自于快照链 如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份但比较耗时 rbd flatten image-clone rbd info image-clone 注意,父快照信息没了
配置客户端不使用ceph集群的块设备存储数据的步骤: 客户端撤销镜像映射 先卸载挂载的分区然后在执行 rbd showmapped rbd unmap(取消映射) /dev/存储池/存储池名/镜像名
删除快照与镜像 删除快照(确保快照未被保护) 在管理主机上删除创建的镜像(如果镜像有快照的话要先删除快照文件) rbd snap rm image --snap image-snap1删除快照
rbd snap unprotect image --snap image-snap1取消保护
rbd list rbd rm image 删除镜像