ceph分布式存储系统

ceph

ceph是一个开源的,用c++语言编写的分布式 的存储系统,存储文件数据。

lvm 逻辑卷 可以扩容

raid 磁盘阵列 高可用 基于物理意义上的存储系统

分布式就是多台物理磁盘组成的一个集群,在这个基础之后实现高可用,扩展

特点:1、远程访问

2、多个服务器组成的虚拟硬盘

3、分布式存储

4、负载均衡

ceph是一个同一的存储系统,同时提供块设备存储,文件系统存储和对象存储的三种存储。

对象存储(RGW):

就是键值存储,通过接口指令,get,put ,del 和其他命令向对象存储上传或者下载数据。

把数据作为对象,按照一定的逻辑和算法,存储到不同的硬盘上(可以是不同机器上的硬盘,依靠网络来进行互相通信)

优点:1、使用的是硬盘组,不受目录系统的影响,读写效率高

2、集群的扩展性很强,支持多副本存储

3、可以直接通过URL访问数据

缺点:1、内容变动比较大的文件,不适合作为对象存储

2、主要是静态图片等等不需要变动的数据

文件系统存储 ceph-fs

ceph 集群的存储看做一个大的分区或者共享文件挂载到客户端的本机。

客户端可以在本地直接进行操作。速度快,可以存储的数据类型也没有限制

内核态和用户态

mount 内核态 速度快 读写也快

ceph-fuse 用户态 速度慢 读写稍慢

优点:成本低,随便的一台服务器都可以做。

公司内部都会使用这种方式。内网云盘

缺点:读写速度和传输速度相对比较慢(本地使用除外)。

块存储RDB

RDB为kvm虚拟化和云服务(OpenStack)提供高性能和无线可扩展的存储后端。

磁盘映射,RAID和lvm提供磁盘空间,多个主机上的raid或者lvm组成逻辑上的RAID和lvm

多快磁盘组成这种逻辑空间,可以并行的执行读写操作。

**缺点:**对网络传输的要求比较高,Windows无法访问linux的RDB操作

ceph的主要特点:

1、统一存储 对象 块 文件系统

2、Crush 算法,算法来实现数据的寻址,数据完整性的校验和一致性,理论上可以支持上千个数据存储节点。

3、可靠性比较强,副本,创建数据的时候可以对数据进行副本操作,副本数量由管理员定义。

副本可以跨主机保存,跨架构,跨机房,跨数据中心保存

4、高性能 因为是多副本,读写的时候可以做到并行化处理。

ceph的组件和作用:

1、OSD ceph 当中的OSD的守护进程,是集群的基础

主要功能:存储数据,保存副本数据,数据恢复,平衡数据分布。

冗余和高可用至少要由3个OSD(三个机器上的三个物理硬盘)

2、Monitors mon Monitors守护进程,监视整个ceph集群的状态。维护整个ceph集群的健康

OSD的状态也属于MON的监控范围。

ceph存储集群必须要有一个Monitors进程,和两个OSD进程。

服务器的数据必须是奇数台。

管理节点 mon osd

3、MDS也是一个守护进程,保存ceph文件系统的元数据。(文件的权限,所有者,所在组,创建/修改时间等等,在ceph集群中的inode号)

4、manages也是作为守护进程运行,跟踪集群的运行时间的指标和ceph集群的状态:存储的利用率,性能指标和系统的负载。

5、RADOS:分布式存储系统,所有的存储功能都是基于RADOS实现的,高可用,高性能也是基于RADOS实现的

RADOS是所有一切的底层,也是ceph集群的核心。

RADOS组成部分:OSD,Monitor

6、LIBRADOS:这是一个动态库,用来允许应用程序和RADOS系统进行交互。

通过端口进行通信。

存储的概念:

存储数据和object的关系:

对象,块,文件系统挂载,都需要object,存储的数据会被分成多个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会映射到三个OSD当中。

三个OSD A B C

PG会同步到 A B C

pg和pgd的关系

8M的数据分为两个4M 分别为1 2

副本数3 pg2

副本数算主的数量

pg2 不算主机的数量

存储池 pool

ceph集群进行逻辑划分,设置ceph存储集群的权限,副本数 pg的数量和算法的规则

pool是由管理员自定义,相当于一个独立的空间,没有pool之间是独立的,数据也是隔离的

先创建pool存储池,然后划分object(4M一个)之后按照pg组的数量划分object到pg组,之后根据副本数复制到其他的OSD上。

192.168.11.144 admin osd mon mgr

192.168.11.145 osd mds mon mgr

192.168.11.146 osd mds mon mgr

192.168.11.153 client

mount

ceph-fuse

rdb

less 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 
less 复制代码
----------------------------------------所有设备均需要的设置-------------------------------------------
[root@全部]# vim /etc/hosts
192.168.11.144 mysql1
192.168.11.145 mysql2
192.168.11.146 mysql3
192.168.11.153 test1


[root@mysql1 ceph]# 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

yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

192.168.11.144 配置

less 复制代码
ssh-copy-id 192.168.11.144
ssh-copy-id 192.168.11.145
ssh-copy-id 192.168.11.146


[root@mysql1 ceph]# pwd
/etc/ceph
[root@mysql1 ceph]# ceph-deploy  new mysql1 mysql2 mysql3
[root@mysql1 ceph]# vim ceph.conf 
osd_pool_default_size = 2

ceph-deploy mon create-initial
ceph -s
alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - "- - -" > /sys/class/scsi_host/host2/scan'
scan
ceph-deploy disk zap mysql1 /dev/sdb
ceph-deploy disk zap mysql2 /dev/sdb
ceph-deploy disk zap mysql3 /dev/sdb
 1045  ceph -s
 1046  ceph-deploy osd create mysql1 --data /dev/sdb 
 1047  ceph-deploy osd create mysql2 --data /dev/sdb 
 1048  ceph-deploy osd create mysql3 --data /dev/sdb 
 1049  ceph-deploy osd list  mysql1  mysql2   mysql3
 1050  ceph -s
 1051  ceph-deploy mgr create mysql1 mysql2 mysql3
 1052  ceph -s
 1053  ceph-deploy admin  mysql1 mysql2 mysql3
 1054  ls
 1055  chmod +r ceph.client.admin.keyring 
 1056  ceph-deploy mds create mysql2 mysql3
 1057  ceph mds stat
 1058  ceph -s
#创建存储池 pool
文件系统ceph-fs
[root@mysql1 ceph]# ceph osd pool create cephfs_date 128
pool 'cephfs_date' created
#创建存储数据的数据池
[root@mysql1 ceph]# ceph osd pool create ceph_metadata 128
pool 'ceph_metadata' created
#创建保存元数据的数据池
[root@mysql1 ceph]# ceph fs new cephfs ceph_metadata cephfs_date
new fs with metadata pool 2 and data pool 1
#创建文件系统
[root@mysql1 ceph]# ceph fs ls
name: cephfs, metadata pool: ceph_metadata, data pools: [cephfs_date ]
#名称为cephfs  保存元数据的库:ceph_metadata 保存数据的库:cephfs_date
[root@mysql1 ceph]# ceph fs status cephfs
[root@mysql1 ceph]#ceph fs flag set enable_multiple true --yes-i-really-mean-it   
#新增一个文件系统
[root@mysql1 ceph]#ceph fs new ceph-test1 cephfs_test1 ceph_test1_medata

[root@mysql1 ceph]# ceph fs rm cephfs --yes-i-really-mean-it
#删除现有的文件系统

192.168.11.145 配置

less 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
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
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

vim /etc/hosts
ssh-copy-id 192.168.11.144
ssh-copy-id 192.168.11.145
ssh-copy-id 192.168.11.146

alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
scan
cd /etc/ceph/
chmod +r ceph.client.admin.keyring
ls

192.168.11.146 配置

less 复制代码
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
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
yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

vim /etc/hosts
ssh-copy-id 192.168.11.144
ssh-copy-id 192.168.11.145
ssh-copy-id 192.168.11.146

alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
scan
cd /etc/ceph/
chmod +r ceph.client.admin.keyring
ls
less 复制代码
[root@全部]# vim /etc/hosts
192.168.11.144 mysql1
192.168.11.145 mysql2
192.168.11.146 mysql3
192.168.11.153 test1


[root@mysql1 ceph]# 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

yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

mkdir  /data2
mount -t ceph 192.168.11.144:6789:/ /data2 -o name=admin,secret=AQDdBbNmd9NqBxAAGRywPYgSpW3hdTXXBK3gDg==
#输入密码挂载
cd /data2
dd if=/dev/zero of=/data2/lzl bs=10M count=10
主设备(192.168.11.144)ceph fs status cephfs  # 查看使用状态

用户态挂载
[root@test1 data2]# yum -y install  ceph-fuse   # 依赖环境
免密挂载
[root@test1 data2]# cd /etc/ceph/
[root@test1 ceph]# scp root@192.168.11.144:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
[root@test1 ceph]# scp root@192.168.11.144:/etc/ceph/ceph.conf /etc/ceph/
[root@test1 ceph]# mkdir /data4
[root@test1 ceph]# ceph-fuse -m 192.168.11.144:6789 /data4
[root@test1 ceph]# df -h
ceph-fuse                 27G  300M   27G    2% /data4

[root@test1 data4]#mount -t ceph 192.168.11.144:6789:/ /data4 -o name=admin,secret=AQDdBbNmd9NqBxAAGRywPYgSpW3hdTXXBK3gDg==,mds_namespace=cephfs_test11
# guazi
查看主(192.168.11.144)连接的访客数量
[root@mysql1 ceph]# ceph fs status cephfs
cephfs - 2 clients  (两个访客数量)
======

第一个存储数据的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个

1283= 384个
750-384=366
存储元数据也要pg
128 * 2= 256
存储数据:
osd * pg 值
元数据
2
pg值

osd * pg值 + 2 * pg 值 < 750

pg_num =(osd*100)/副本数(计算pg的值)

设定pg值的目的,通过管理较少的pg,ceph获取数据,分配,管理数据的效率越高。

pg值越多,数据分布的的越多,管理的就越复杂

less 复制代码
[root@mysql1 ceph]# ceph osd pool create cephfs_date 128
pool 'cephfs_date' created
#创建存储数据的数据池
ceph osd pool create cephfs_test1 64
创建保存元数据的数据池

[root@mysql1 ceph]# ceph osd pool create cephfs_test11  3
pool 'cephfs_date' created
#创建存储数据的数据池
[root@mysql1 ceph]# ceph osd pool create ceph_metatest11 4
pool 'ceph_metadata' created
#创建保存元数据的数据池
[root@mysql1 ceph]# ceph fs new cephfs_test11 ceph_metatest11 cephfs_test11
new fs with metadata pool 2 and data pool 1
#创建文件系统

[root@mysql1 ceph]# ceph osd pool create cephfs_test11 3

pool 'cephfs_date' created

#创建存储数据的数据池

[root@mysql1 ceph]# ceph osd pool create ceph_metatest11 4

pool 'ceph_metadata' created

#创建保存元数据的数据池

[root@mysql1 ceph]# ceph fs new cephfs_test11 ceph_metatest11 cephfs_test11

new fs with metadata pool 2 and data pool 1

#创建文件系统

挂载:mount -t ceph 192.168.118.61:6789:/ /data2 -o name=admin,secret=AQBa/LJmAn2OMxAA7EEZTaurchJ+K4uPyQNhfQ==,mds_namespace=cephfs_test11

相关推荐
神秘打工猴16 分钟前
Spark任务的执⾏流程
大数据·分布式·spark
白露与泡影27 分钟前
Redisson分布式锁的源码解读
分布式·wpf
RodrickOMG2 小时前
【大数据】Hadoop三节点集群搭建
大数据·hadoop·分布式
活跃的煤矿打工人2 小时前
【星海随笔】删除ceph
linux·服务器·ceph
乄北城以北乀2 小时前
第1章 R语言中的并行处理入门
开发语言·分布式·r语言
天乐敲代码7 小时前
Etcd静态分布式集群搭建
数据库·分布式·etcd
光纤传感技术研究8 小时前
分布式光纤传感|分布式光纤测温|线型光纤感温火灾探测器DTS|DTS|DAS|BOTDA的行业16年的总结【2024年】
分布式·dts·光纤传感器·botda·光纤传感技术
dbcat官方9 小时前
1.微服务灰度发布(方案设计)
java·数据库·分布式·微服务·中间件·架构
明达技术10 小时前
分布式 IO 模块助力冲压机械臂产线实现智能控制
分布式
溟洵11 小时前
【C++】异步(并发)实现 线程池 ---附源码+实现步骤(future、async、promise、package_task、任务池原理和框架)
服务器·网络·c++·分布式·后端