Ceph分布式存储集群原理及其部署

一、为什么要用Ceph

  • ⾼高扩展性
  • ⾼高性能
  • ⽆无单点的分布式⽂文件存储系统
  • 可⽤用于对象存储,块设备存储和⽂文件系统存储
  • 读写速度快利利于共享

ceph FS 可以作为Hadoop后端数据存储池,可代替HDFS的存储方案。
Ceph与KVM虚拟化结合,ceph块存储RBD可作为KVM虚拟化的后端存储。
ceph块存储RBD可作为openstack的后端存储。
Ceph的RGW与OwnCloud搭配,搭建本地网盘。

Ceph支持三种调用接口:对象存储,块存储,文件系统挂载

二、Ceph存储介绍

1、Ceph基本结构

在这里插入图片描述
自上而下可将Ceph系统分为4层:
1、基础存储系统RADOS(Reliable, Autonomic, Distributed Object Store,即可靠的、自动化的、分布式的对象存储)
RADOS本身也是分布式存储系统,CEPH所有的存储功能都是基于RADOS实现,RADOS由大量的存储设备节点组成,每个节点拥有自己的硬件资源(CPU、内存、硬盘、网络),并运行着操作系统和文件系统。
2、基础库LIBRADOS
LIBRADOS对下层的RADOS提供的功能进行封装,向上层提供给API,以便直接使用RADOS,而不是整个Ceph进行调用。
3、高层应用接口
该层包括RADOS GW(RADOS Gateway),RBD(Reliable Block Device)以及CEPH FS(Ceph File System)三部分组成。
其中,RADOS GW是一个提供与Amazon S3和Swift兼容的RESTful API的gateway,以供相应的对象存储应用开发使用。RADOS GW提供的API抽象层次更高,但功能则不如librados强大。因此,开发者应针对自己的需求选择使用。
RBD则提供了一个标准的块设备接口,常用于在虚拟化的场景下为虚拟机创建volume。目前,Red Hat已经将RBD驱动集成在KVM/QEMU中,以提高虚拟机访问性能。
Ceph FS是一个POSIX兼容的分布式文件系统。由于还处在开发状态,因而Ceph官网并不推荐将其用于生产环境中
4、应用层
这一层就是不同场景下对于Ceph各个应用接口的各种应用方式,例如基于librados直接开发的对象存储应用,基于RADOS GW开发的对象存储应用,基于RBD实现的云硬盘等等。

2、核心组件

  • OSD:Object storage cluster,对象存储集群(将数据和元数据作为对象存储,执⾏其他关键职能)
  • Monitor:Cluster monitors,集群监视器(执⾏监视功能)
  • MDS:Metadata server cluster,元数据服务器(缓存和同步分布式元数据)
  • Mgr:ceph 集群的管理,为外界提供统⼀的⼊口
  • Rgw:对象存储⽹关系统

3、Pool、PG、OSD

  • Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略,⽀支持两种类型:副本(replicated)和 纠删码( Erasure Code);
  • PG( placement group)是一个放置策略组,它是对象的集合,该集合⾥的所有对象都具有相同的放置策略,简单点说就是相同PG内的对象都会放到相同的硬盘上;
  • OSD是负责物理存储的进程,一般配置成和磁盘⼀⼀对应,一块磁盘启动一个OSD进程;
    在这里插入图片描述
    三者关系:
    一个Pool里有很多PG;
    一个PG里包含一堆对象,一个对象只能属于一个PG;
    PG有主从之分,一个PG分布在不同的OSD上(针对三副本类型);

4、什么是对象

  • 最底层的存储单元
  • 包含元数据和原始数据

三、Ceph存储集群部署

1、安装环境

三台Centos7虚拟机
cephnode01 172.25.5.10
cephnode02 172.25.5.11
cephnode03 172.25.5.12
硬件配置:2C4G,另外每台机器器最少挂载三块硬盘

2、环境准备

(1)关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
(2)关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
(3)关闭NetworkManager
systemctl disable NetworkManager && systemctl stop NetworkManager
(4)添加主机名与IP对应关系:
vim /etc/hosts
172.25.5.10 cephnode01
172.25.5.11 cephnode02
172.25.5.12 cephnode03
(5)设置主机名:
hostnamectl set-hostname cephnode01
hostnamectl set-hostname cephnode02
hostnamectl set-hostname cephnode03
(6)同步网络时间和修改时区
echo "server 172.25.5.250 iburst" >> /etc/chrony.conf
systemctl restart chronyd.service && systemctl enable chronyd.service
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
(7)设置文件描述符
echo "ulimit -SHn 102400" >> /etc/rc.local
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
EOF
(8)内核参数优化
cat >> /etc/sysctl.conf << EOF
kernel.pid_max = 4194303
EOF
sysctl -p
(9)在cephnode01上配置免密登录到cephnode02、cephnode03
ssh-copy-id root@cephnode02
ssh-copy-id root@cephnode03

3、Ceph部署工具Ceph-depoly

(1)安装EPEL源
# yum install -y https://dl.fedoraproject.org/pub/epel/epel-releaselatest-
7.noarch.rpm
(2)编辑ceph yum源
# cat << EOM > /etc/yum.repos.d/ceph.repo
[ceph-noarch]
name=Ceph noarch packages
baseurl=https://download.ceph.com/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOM
(3)安装ceph-deploy
# yum install ceph-deploy

4、 部署rados集群(mon、mgr、mds、rados)

(1)安装软件包管理器
# yum install yum-plugin-priorities
(2)创建一个my-cluster目录,所有命令在此目录下进行(文件位置和名字可以随意)
mkdir /my-cluster
cd /my-cluster
(3)创建一个ceph集群
# ceph-deploy new cephnode01 cephnode02 cephnode03
(4)安装ceph软件
ceph-deploy install cephnode01 cephnode02 cephnode03
(5)修改ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/$basearch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
enabled=1
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
priority=2
gpgcheck=1
gpgkey=https://download.ceph.com/keys/release.asc
(6)登陆每台机器执行
# yum install -y ceph
(7)生成monitor检测集群所使用的的秘钥
# ceph-deploy mon create-initial
(8)安装ceph CLI,方便执行一些管理命令
# ceph-deploy admin cephnode01 cephnode02 cephnode03
(9)配置mgr,用于管理集群
# ceph-deploy mgr create cephnode01 cephnode02 cephnode03
(10)安装mds
# ceph-deploy mds create cephnode01
(11)部署rgw
# yum install -y ceph-radosgw

5、添加OSD

ceph-deploy osd create --data /dev/sdb cephnode01
ceph-deploy osd create --data /dev/sdc cephnode02
ceph-deploy osd create --data /dev/sdd cephnode03

6、配置RGW

ceph-deploy rgw create cephnode01 cephnode02 cephnode03

7、上传下载测试

生成一个文件
# echo {Test-data} > testfile.txt
创建一个测试pool
# ceph osd pool create mytest
上传一个文件到测试pool
# rados put test-object-1 testfile.txt --pool=mytest
查看测试pool里的文件
# rados -p mytest ls
删除pool中的文件
# rados rm test-object-1 --pool=mytest
删除测试的pool
#ceph osd pool rm mytest

文章内容部分借鉴来自:
ceph总结
分布式文件系统ceph知识整理

发布了114 篇原创文章 · 获赞 30 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_41476978/article/details/103381087