一:ceph是什么:是一个开源的,用c++语言编写的分布式的存储系统,存储文件数据;分布式就是由多台物理磁盘组成一个集群,在这个基础之上实现高可用及扩展。
二、ceph是一个统一的存储系统,可以同时提供三种存储方式,分别是块设备存储、文件系统、对象存储。
1.对象存储:也就是键值存储,通过接口指令,get、put、del和其它的一些命令向对象存储上传或者下载数据;也就是把数据作为对象按照一定的逻辑或算法存储到不同的硬盘,这个硬盘可以是不同机器上的硬盘,依靠网络来进行互相通信。一般存储的是静态图片等等不需要变动的数据。
优点:使用的是硬盘组,不受目录系统的影响,读写效率高;集群的扩展性很强,支持多副本存储,可以直接通过URL访问文件,简单而且也好管理。
缺点:需要大量的硬盘,内容变动太大的文件不适合做对象存储,因为每一次变动都要重新上传。
2.文件系统存储(ceph-fs):ceph集群的存储看做是一个大的分区或者共享文件挂载到客户端的本地,客户端可以在本地直接进行操作,速度快,存储的数据类型也没有限制。
挂载分为两种:内核态:mount 速度快,读写也快
用户态:ceph-fuse 速度慢,读写稍慢
优点:成本低,随便的一台服务器都可以做文件系统存储,公司内部会使用这种方式
缺点:读写速度和传输速度相对比较慢;但是本地使用不受影响
3.块存储(RDB):基于虚拟化基础来的,为kvm虚拟化和云服务可以提供高性能和无线可扩展的存储后端;使用的扩展是用磁盘映射,通过RAID和LVM提供磁盘空间,多个主机上的raid或者lvm组成一个逻辑上的RAID和LVM;多块磁盘组成这种逻辑空间,可以并行的执行读写操作,IO效率比较高。
缺点:对网络传输的要求比较高,windows无法访问linux的RDB操作。
三、ceph的主要特点:
1.统一存储:文件系统、块存储、对象存储
2.crush算法,通过算法实现数据的寻址及完整性的校验和一致性,理论上可以支持上千个数据存储节点。
3.可靠性比较强,创建数据的时候可以对数据进行副本操作,副本数由管理定义的,副本可以跨主机、跨架构、跨机房、跨数据中心进行保存
4.高性能,因为是多副本,读写的时候可以做到并行化处理
四、ceph的组件和作用
1.OSD:是ceph当中的守护进程,是集群的基础
主要的功能:存储数据、保存副本数据、数据恢复、平衡数据分布
实现冗余和高可用至少要有3个OSD(三个机器上的三个物理硬盘)
2.Monitors:也是ceph的守护进程,监视ceph的集群状态,维护ceph集群的健康状态,其中包括OSD的健康状态也属于MON的监控范围。ceph存储集群至少要有一个MON进程和两个OSD进程。服务器的数量必须是奇数台(一般是3-5台)。
3.MDS也是ceph的守护进程:是保存ceph文件系统的元数据(文件的权限,所有者,所在组,修改时间,在ceph集群中的inode号)
4.managers也是做为ceph的守护进程,跟踪集群的运行时间的指标和ceph集群的状态(状态指的是存储的利用率、性能指标和系统的负载)
5.RADOS:分布式存储系统,ceph所有的存储功能都是基于rados实现的,高性能也是基于rados实现的,它是所有一切的底层,也是整个ceph集群的核心。
RADOS:由两部分组成:OSD和MONTIOR
6.LIBRADOS:是一个动态库,用来允许应用程序和RADOS系统进行交互,也就是通过端口进行通信。
五、ceph存储的概念以及和object的关系:
1.对象、块、文件系统都需要object,存储的数据就会被分成多个object,分成之后每个数据都是一个object id,每个object的大小是可以调整的,默认是4M,ceph的最小存储单位。
2.object和pg的关系:object数量太多,在一个集群当中,object的数量太多,遍历(就是一个一个去找)和寻址速度都很慢,于是有了归置组(PG),它是来管理object,object通过CRUSH算法映射到PG当中;一个PG里面可以包含多个object。
3.pg与osd之间的关系:
pg也是通过CRUSH算法映射保存到OSD当中,如果有3个副本,每个pg会映射到3个OSD当中,
4.pg与PGD关系
pgd是存放pg的排列组合
六、ceph的存储池pool
对ceph的集群进行逻辑划分,在此设置ceph存储集群的权限,副本数,pg的数量和算法的规则。
pool是由管理员自定义的,相当于一个独立空间,每一个pool之间都是独立的,数据也是隔离的。
pool分为存储数据和存储元数据两个池
七、创建存储池pg值该如何定义
1.pg数在存储池是有要求的,一般来说少于5个osd的情况下,pg的数量等于128个;如果是5-10个osd,pg设置512个;如果是10-50个osd,pg设置4096个。
2.pg总数:存储数据+存储元数据;默认是750个,不能超过750个。
存储数据pg值=128*3=384个,因为现在集群有3个osd,就是说现在pg数应该是128*3=384个 剩余750-384=336个pg
存储元数据pg值:这里的pg数根据设定数*副本数 128*2=256个pg
3.pg_num=(osd*100)/副本数
4.设置pg的目的就是通过管理较少的pg,ceph获取数据、分配、管理数据的效率越高;因为pg值越多,数据分布的就越多管理就越复杂。
七、实验:4台主机
主节点:192.168.127.80 admin osd mon mgr
从1节点:192.168.127.90 osd mon mgr mds
从2节点:192.168.127.99 osd mon mgr mds
客户端:192.168.127.50 client
四台主机关闭防火墙同步时间及做主机映射
主节点向其它主机进行免密通信
所有主机清除缓存建立元数据
4台节点安装服务
回到主节点配置集群
主节点修改副本数,默认是3也可以不修改
在主节点初始化安装mon:ceph-deploy mon create-initial
查看节点状态
3台节点添加硬盘,客户端不需要添加硬盘
查看三台节点的磁盘情况,以下命令免重启直接刷新添加的磁盘
添加 OSD服务
首先通过osd分别在三台主从节点进行磁盘分区
ceph-deploy disk zap mysql1 /dev/sdb
ceph-deploy disk zap mysql2 /dev/sdb
ceph-deploy disk zap mysql3 /dev/sdb
将分好的区添加到osd节点当中去,以下三个步骤都在主节点完成,不需要到从节点操作
ceph-deploy osd create mysql1 --data /dev/sdb
ceph-deploy osd create mysql2 --data /dev/sdb
ceph-deploy osd create mysql3 --data /dev/sdb
查看osd节点的状态
部署mgr :监控osd的使用状况
统一集群配置
在主节点用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点,
这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。
在三个主从节点分别给这个密钥文件一个读的权限
添加集群的性能监控,在主节点只需要安装两个从的即可
ceph集群运用
在主节点首先创建存储池pool
在主节点创建文件系统
在客户端使用内核态进行挂载,先创建目录,再进行挂载
回到主节点查看存储池的状态
在客户端实现用户态进行挂载,首先得装用户态的依赖环境,再将主节点的配置文件和密钥文件复制到客户端的/etc/ceph目录下这样就可以免密挂载
创建目录,进行免密挂载
回到主节点进行查看系统状态
九、neph-test1存储池
十、面试
1.调整副本数的两种方法
2.ceph的两种挂载方式:
用户态:ceph-fuse 慢
内核态:mount 快