linux的ceph

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
相关推荐
雯宝11 分钟前
mnt_init 函数
linux
律宏阔6 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔6 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴6 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千7 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei377 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei377 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei377 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
judezh7 小时前
api 容器一直 unhealthy?我把一个 Agent 运行时的健康检查逐条拆了,查出四个问题
运维·docker
GeW7 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux