ceph

ceph:

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

/dev/sdb

fdisk /dev/sdb

gdisk /dev/sdb

lvm 逻辑卷

可以扩容

raid 磁盘阵容

高可用

基于物理意义上的单机的存储系统。

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

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

对象存储RGW oss:

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

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

优点:

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

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

3、可以直接通过URL访问文件。简单,也好管理

缺点:
1、内容变动比较大的文件不适合作为对象存储,每一次变动都要重新上传。
2、静态图片等等不需要变动的数据

文件系统存储 ceph-fs

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

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

内核态和用户态:

mount 内核态 速度快,读写也快

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

优点:

1、成本低,随便的一台服务器都可以做。

2、公司内部都会使用这种方式,内网云盘就是这种方式

缺点:

读写速度和传输速度相对比较慢(本地使用不再此列)

块存储RDB:

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

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

多块磁盘组成这种逻辑空间。可以并行的执行读写操作,IO效率比较高

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

ceph的主要特点:

统一存储 对象 块 文件系统

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

高扩展性 扩容方便

可靠性比较强 副本,创建数据的时候可以对数据进行副本操作,副本数由管理员定义的,副本可以跨主机保存,快架构,跨机房,跨数据中心进行保存。

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

ceph的组件和作用:

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

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

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

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

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

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

服务器的数量必须是奇数台。3-5

管理节点 mon osd

osd

osd

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

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

5、RADOS:分布式存储系统,所有的存储功能都是基于RADOS实现的。高可用,高性能也是基于RADOS实现的,他是所有一切的底层,也是整个ceph集群的核心。

RADOS由两部分组成:OSD,monitor

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

存储的概念:

存储数据和object的关系:

对象,块,文件系统挂载,都需要object,存储的数据会被分成多个object,分成之后每一个数据都有一个object id。

每个数据的object的大小是可以调整的,默认是4M

ceph的最小存储单位

object和pg的关系:

在一个集群当中,object的数量太多,遍历和寻址速度都很慢。

PG,就是归置组,placcment group 管理object。

object通过CRUSH算法映射到PG当中,一个pg里面可以包含多个object。

pg与osd之间的关系:

pg也是通过CRUSH算法映射到osd当中去存储。如果有副本,每个pg会映射到3个OSD当中,

三个OSD A B C

PG---------A

PG---------B

PG---------C

PG和PGD的关系:

PGD是存放PG的排列组合。

存储池: pool

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

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

ceph 60

4台

192.168.60.91 admin osd mon mgr

192.168.60.92 osd mds mon mgr

192.168.60.93 osd mds mon mgr

192.168.60.90 client

安装步骤:

#关闭所有机器的防火墙
[root@mysql1 ~]# systemctl stop firewalld
[root@mysql1 ~]# setenforce 0
#所有机器添加主机映射
[root@mysql1 ~]# vim /etc/hosts
192.168.60.91 mysql1
192.168.60.92 mysql2
192.168.60.93 mysql3
192.168.60.90 test
#在主节点上设置密钥对:
[root@mysql1 ~]# ssh-keygen         #一路回车即可
#将密钥从主节点发送到每个从节点
[root@mysql1 ~]# ssh-copy-id 192.168.60.90
[root@mysql1 ~]# ssh-copy-id 192.168.60.92
[root@mysql1 ~]# ssh-copy-id 192.168.60.93
#所有节点安装源
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
​
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
​
yum clean all && yum makecache
​
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
#192.168.60.91 配置  
[root@mysql1 ~]# cd /etc/ceph/
[root@mysql1 ceph]# ceph-deploy new mysql1 mysql2 mysql3
[root@mysql1 ceph]# vim ceph.conf
  osd_pool_default_size = 2
[root@mysql1 ceph]# ceph-deploy mon create-initial
[root@mysql1 ceph]# ceph -s
​
#下面这个命令在mysql1、mysql2、mysql3上都要做
[root@mysql1 ceph]# alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
[root@mysql1 ceph]# scan
[root@mysql1 ceph]# lsblk
[root@mysql1 ceph]# ceph-deploy disk zap mysql1 /dev/sdb
[root@mysql1 ceph]# ceph-deploy disk zap mysql2 /dev/sdb
[root@mysql1 ceph]# ceph-deploy disk zap mysql3 /dev/sdb
[root@mysql1 ceph]# ceph-deploy osd create mysql1 --data /dev/sdb
[root@mysql1 ceph]# ceph-deploy osd create mysql2 --data /dev/sdb
[root@mysql1 ceph]# ceph-deploy osd create mysql3 --data /dev/sdb
[root@mysql1 ceph]# ceph-deploy osd list mysql1 mysql2 mysql3
[root@mysql1 ceph]# ceph -s
[root@mysql1 ceph]# ceph-deploy mgr  create mysql1 mysql2 mysql3
[root@mysql1 ceph]# ceph -s
[root@mysql1 ceph]# ceph-deploy admin mysql1 mysql2 mysql3      #将配置文件传给mysql1、mysql2、mysql3
[root@mysql1 ceph]# chmod +r ceph.client.admin.keyring  #给配置文件赋一个读的权限
[root@mysql1 ceph]# ceph-deploy mds create mysql2 mysql3
#192.168.60.92 配置
[root@mysql2 ~]# systemctl stop firewalld
[root@mysql2 ~]# setenforce 0
[root@mysql2 ~]# vim /etc/hosts
[root@mysql2 ~]# 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
[root@mysql2 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@mysql2 ~]# yum clean all && yum makecache
[root@mysql2 ~]# yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
[root@mysql2 ~]# alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
[root@mysql2 ~]# cd /etc/ceph/
[root@mysql2 ceph]# chmod +r ceph.client.admin.keyring
#192.168.60.93 配置
[root@mysql3 ~]# systemctl stop firewalld
[root@mysql3 ~]# setenforce 0
[root@mysql3 ~]# vim /etc/hosts
[root@mysql3 ~]# 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
[root@mysql3 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@mysql3 ~]# yum clean all && yum makecache
[root@mysql3 ~]# yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs
[root@mysql3 ~]# alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'
[root@mysql3 ~]# cd /etc/ceph/
[root@mysql3 ceph]# chmod +r ceph.client.admin.keyring

创建存储池操作步骤:

[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 ceph-test1 ceph_metadata cephfs_date
new fs with metadata pool 2 and data pool 1
[root@mysql1 ceph]# ceph fs ls
name: ceph-test1, metadata pool: ceph_metadata, data pools: [cephfs_date ]
​
[root@mysql1 ceph]# ceph fs status ceph-test1
ceph-test1 - 0 clients
==========
+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   10  |   12  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 2246  | 26.9G |
|  cephfs_date  |   data   |    0  | 26.9G |
+---------------+----------+-------+-------+
​
+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)
​
[root@mysql1 ceph]# cat ceph.client.admin.keyring 
[client.admin]
    key = AQDKGbNmj/bTAxAAFhU1vR0l8DA/h+KAwqckFQ==
​
#用内核挂载
[root@test9 ~]# mkdir /date
[root@test9 ~]# mount -t ceph 192.168.60.91:6789:/ /date -o name=admin,secret=AQDKGbNmj/bTAxAAFhU1vR0l8DA/h+KAwqckFQ==
​
[root@test9 date]# dd if=/dev/zero of=/date/test1.txt bs=10M count=10       #往date目录里写一个100M的文件
​
[root@mysql1 ceph]# ceph fs status ceph-test1
ceph-test1 - 1 clients
==========
+------+--------+--------+---------------+-------+-------+
| Rank | State  |  MDS   |    Activity   |  dns  |  inos |
+------+--------+--------+---------------+-------+-------+
|  0   | active | mysql3 | Reqs:    0 /s |   11  |   13  |
+------+--------+--------+---------------+-------+-------+
+---------------+----------+-------+-------+
|      Pool     |   type   |  used | avail |
+---------------+----------+-------+-------+
| ceph_metadata | metadata | 16.7k | 26.8G |
|  cephfs_date  |   data   |  100M | 26.8G |
+---------------+----------+-------+-------+
​
+-------------+
| Standby MDS |
+-------------+
|    mysql2   |
+-------------+
​
#用户态挂载
[root@test9 date]# yum -y install ceph-fuse     #先安装一个依赖环境
[root@test9 ceph]# scp root@192.168.60.91:/etc/ceph/ceph.client.admin.keyring /etc/ceph/
[root@test9 ceph]# scp root@192.168.60.91:/etc/ceph/ceph.conf /etc/ceph/
[root@test9 ceph]# mkdir /date1
[root@test9 ceph]# ceph-fuse -m 192.168.60.91:6789 /date1
[root@test9 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G  5.1G   32G   14% /
devtmpfs                 1.9G     0  1.9G    0% /dev
tmpfs                    1.9G     0  1.9G    0% /dev/shm
tmpfs                    1.9G   13M  1.9G    1% /run
tmpfs                    1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sr0                 4.3G  4.3G     0  100% /mnt
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   19G   37M   19G    1% /home
tmpfs                    378M  4.0K  378M    1% /run/user/42
tmpfs                    378M   32K  378M    1% /run/user/0
192.168.60.91:6789:/      27G  100M   27G    1% /date
ceph-fuse                 27G  100M   27G    1% /date1

文件系统 ceph-fs

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

存储元数据也要pg

128*2=256

存储数据:

osd * pg值

元数据:

2 * pg值

osd * pg值+2 * pg值 <750

pg_num = (osd * 100) / 副本数

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

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

调整副本数:

vim ceph.conf
ceph osd pool set cephfs_date size  3
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值