ceph
ceph是一个开源的,用c++语言编写的分布式的存储系统。存储文件数据。
分布式由多台物理磁盘组成一个集群,在这个基础之上实现高可用,扩展。
ceph是一个统一的存储系统,同时提供块设备存储,文件系统存储和对象存储三种存储方式
对象存储:
对象存储也就是键值存储,通过接口指令,get put del 和其他的命令向对象存储上传或者下载数据
把数据作为对象,按照一定的逻辑和算法,存储到不同的硬盘上(可以是不同机器上的硬盘,倚靠网络来进行互相通信)
优点:使用的是硬盘组,不受目录系统的影响,读写效率高。集群的扩展性很强,支持多副本存储。可以直接通过url访问文件。简单,也好管理
缺点:内容变动比较大的文件不社会作为对象存储。每一次变动要重新上传。静态图片等等不需要变动的数据
文件系统存储 ceph-fs
ceph集群的存储看做是一个大的分区或者共享文件挂载到客户端的本地
客户端可以在本地直接进行操作。速度快,可以存储的数据类型也没有限制
内核态和用户态:
内核态:mount 速度快,读写也快
用户态:ceph-fuse 速度慢,读写稍慢
优点:成本低,随便的一台服务器都可以做。公司内部都会使用这种方式。内网云盘就是这种方式
缺点:读写速度和传输速度相对比较慢(本地使用好一些)
块存储RBD:
rdb为kvm虚拟化和云服务(OpenStack)提供高性能和无线可扩展的存储手段
磁盘映射,raid和lvm提供磁盘空间,多个主机上的raid或者lvm组成一个逻辑上raid和lvm
多块磁盘组成这种逻辑空间,可以并行的执行读写操作,IO效率比较高
缺点:对网络传说的要求比较高,Windows无妨访问linux的rdb操作
ceph的主要特点:
统一存储:对象、块、文件系统
crush算法:算法来实现数据的寻址,数据完整性的校验和一致性。理论上可以支持上千个数据存储节点
高扩展性 扩容方便
可靠性比较强 副本,创建数据的时候可以对数据进行副本操作,副本数由管理定义的
副本可以跨主机保存,跨架构,跨数据中心进行保存
高性能 因为是多副本,读写的时候可以做到并行化处理
ceph的组件和作用
1、OSD ceph当中的OSD的守护进程,是集群的基础
主要功能:存储谁,保存副本数据,数据恢复,平衡数据分布
冗余和高可用至少要有3个OSD(三个机器上的三个物理硬盘)
2、MONitors mon pontior-s,见识ceph集群的状态,维护ceph的集群的健康
ceph存储集群必须亚要有一个Monitors进程,和两个OSD进程。
服务器的数量必须是奇数台。
管理节点 mon
osd
osd
3、MDS也是一个守护进程,保存ceph文件系统的元数据(文件的权限,所有者,所在组,修改时间等,在ceph集群当中的inode号)
4、managers也是作为守护进程运行,跟踪集群的运行时间的指标和ceph集群的状态:存储的利用率,性能指标和系统的负载
5、RADOS:分布式存储系统,所有的存储功能都是基于RADOS实现的,高可用,高性能也是基于rados实现的,他是所有一切的底层,也是整个ceph集群的核心
RADOS由两部分组成:OSD,Monitor
6、LIBRADOS:这是一个动态库,用来允许应用程序和RADOS系统进行交互
通过端口进行通信
存储的概念:
存储数据和object的关系:
对象,块,文件系统挂载,都需要odject,存储的数据会被分成多个object,分成之后每一个数据都有一个object id。
每个数据object的大小是可以调整的,默认是4M
ceph的最小存储单位
object和pg的关系:
object数量太多了,在一个集群当中,object的数量太多,遍历和寻址速度都很慢
PG,就是归置组,placcment group 管理object
object通过CRUSH算法映射到PG当中,一个pg里面可以包含多个object
Pg与osd之间的关系:
pg也是通过CRUSH算法映射到osd当中去存储。如果3个副本,每个pg会映射到三个QSD当中。
三个gSd A B C
pg--------A
PG-------B
PG---------C
PG和PGD的关系
pgd是存放pg的排列组合。
存储池: pool
ceph的集群进行逻辑划分,设置ceph存储集群的权限,副本数 pg的数量和算法的规则。
pool是由管理员自定义,相当--个独立的空间。每个pool之间是独立的,数据也是隔离的
先划分object(4M一个)然后按照划分pg组,之后根据副本数复制到其他的OSD上
192.168.39.31 admin+osd+monitor+mgr+主
192.168.39.32 osd+monitor+mgr+mds+从
192.168.39.33 osd+monitor+mgr+mds+从
192.168.39.34 客户机
三台
vim /etc/hosts
192.168.233.10 mysql1
192.168.233.20 mysql2
192.168.233.30 mysql3
192.168.39.31
ssh-keygen
#一路回车即可
ssh-copy-id 192.168.39.31
ssh-copy-id 192.168.39.32
ssh-copy-id 192.168.39.33
ssh-copy-id 192.168.39.34
四台同步
cat> /etc/yum.repos.d/ceph.repo <<eof
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
eof
yum clean all && yum makecache
#如果安装不了,挂梯子或者删除本地local源
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
#主和从添加硬盘
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
执行scan
# 管理节点,多个mon模式
cd /etc/ceph/
ceph-deploy new mysql1 mysql2 mysql3
cd /etc/ceph
vim ceph.conf
#最后一行添加 osd_pool_default_size = 2
ceph-deploy mon create-initial
ceph -s
#一定要是health ok状态
#添加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节点的状态
ceph-deploy osd list mysql1 mysql2 mysql3
#添加mgr服务
ceph-deploy mgr create mysql1 mysql2 mysql3
# 管理节点
ceph-deploy admin mysql1 mysql2 mysql3
# 集群每一个节点授权 做三台
chmod +r /etc/ceph/ceph.client.admin.keyring
#添加mds服务
ceph-deploy mds create mysql2 mysql3
#查看mds服务状态
ceph mds stat, 2 up:standby
# 查看集群状态
ceph -s
第一个存储数据的pool
第二个存储元数据的pool
ceph osd pool create cephfs date pg_num
少于5个osd的情况下,pg的数量等于128
5-10个osd 512
10-50个osd 4096个
pg总数:750个,不能超过750个
128 * 3=384个
750-384= 366
存储元数据也要pg
128 * 2=256
存储数据:
osd * pg值
元数据
2 * pg值
osd * pg值+2 * pg值<750
pg_num=(osd*100)/副本数
设定pg值的目的,通过管理较少的pg,ceph获取数据,分配,管理数据的效率越高。
pg值越多,数据分布的越多,管理就越发复杂。
192.168.39.31 admin+osd+monitor+mgr+主
192.168.39.32 osd+monitor+mgr+mds+从
192.168.39.33 osd+monitor+mgr+mds+从
192.168.39.34 客户机
主
ceph osd pool create cephfs_date 128
#创建数据池
ceph osd pool create cephfs_metadate 128
#创建保存元数据
ceph fs flag set enable_multiple true --yes-i-really-mean-it
#允许创建多个文件系统
ceph fs new cephfs cephfs_metadate cephfs_date
#创建文件系统
ceph fs ls
#查看文件系统
客户机
yum -y install ceph-fuse.x86_64
mkdir /data
mount -t ceph 192.168.39.31:6789:/ /data -o name=admin,secret=AQBcCLNm1nXtDhAAniXvNrK1eZMAgNe2ri/Pfg==
secret=为主下面的 /etc/ceph/ceph.client.admin.keyring
练习:
将原有的文件系统再次建立一个新的文件系统ceph-test1
在原有的基础上
主
ceph fs flag set enable_multiple true --yes-i-really-mean-it
#ceph某个版本之后默认只能有一个文件系统,这个就是允许添加新的文件系统
ceph osd pool create cephfs_test1 30
ceph osd pool create ceph_test1_metadate 30
ceph fs new ceph-test1 cephfs_test1 ceph_test1_metadate
客户机
mkdir /data2
mount -t ceph 192.168.39.31:6789:/ /data -o name=admin,secret=AQBcCLNm1nXtDhAAniXvNrK1eZMAgNe2ri/Pfg==,mds_namespace=cephfs2