分布式存储ceph——(1)部署ceph

一、Ceph简介:

Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

   官网:https://ceph.com/

   官方文档:http://docs.ceph.com/docs/master/#

二、Ceph特点:

高性能:
a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,
并行度高。
b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架
感知等。
c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性:
a. 副本数可以灵活控制。
b. 支持故障域分隔,数据强一致性。
c. 多种故障场景自动进行修复自愈。
d. 没有单点故障,自动管理。

高可扩展性:
a. 去中心化。
b. 扩展灵活。
c. 随着节点增加而线性增长。

特性丰富:
a. 支持三种存储接口:块存储、文件存储、对象存储。
b. 支持自定义接口,支持多种语言驱动。

三、Ceph应用场景:

Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。

Ceph是一个高性能、可扩容的分布式存储系统,它提供三大功能:
   对象存储(RADOSGW):提供RESTful接口,也提供多种编程语言绑定。兼容S3、Swift;
   块存储(RDB):由RBD提供,可以直接作为磁盘挂载,内置了容灾机制;
   文件系统(CephFS):提供POSIX兼容的网络文件系统CephFS,专注于高性能、大容量存储;

什么是块存储/对象存储/文件系统存储?
1.对象存储:
也就是通常意义的键值存储,其接口就是简单的GET、PUT、DEL 和其他扩展,代表主要有 Swift 、S3 以及 Gluster 等;
2.块存储:
这种接口通常以 QEMU Driver 或者 Kernel Module 的方式存在,这种接口需要实现 Linux 的 Block Device 的接口或者 QEMU 提供的 Block Driver 接口,如 Sheepdog,AWS 的 EBS,青云的云硬盘和阿里云的盘古系统,还有 Ceph 的 RBD(RBD是Ceph面向块存储的接口)。在常见的存储中 DAS、SAN 提供的也是块存储;
3.文件系统存储:
通常意义是支持 POSIX 接口,它跟传统的文件系统如 Ext4 是一个类型的,但区别在于分布式存储提供了并行化的能力,如 Ceph 的 CephFS (CephFS是Ceph面向文件存储的接口),但是有时候又会把 GlusterFS ,HDFS 这种非POSIX接口的类文件存储接口归入此类。当然 NFS、NAS也是属于文件系统存储;

四、Ceph核心组件:

分布式存储ceph——(1)部署ceph_第1张图片
image

(1)Monitors:监视器,维护集群状态的多种映射,同时提供认证和日志记录服务,包括有关monitor 节点端到端的信息,其中包括 Ceph 集群ID,监控主机名和IP以及端口。并且存储当前版本信息以及最新更改信息,通过 "ceph mon dump"查看 monitor map。

(2)MDS(Metadata Server):Ceph 元数据,主要保存的是Ceph文件系统的元数据。注意:ceph的块存储和ceph对象存储都不需要MDS。

(3)OSD:即对象存储守护程序,但是它并非针对对象存储。是物理磁盘驱动器,将数据以对象的形式存储到集群中的每个节点的物理磁盘上。OSD负责存储数据、处理数据复制、恢复、回(Backfilling)、再平衡。完成存储数据的工作绝大多数是由 OSD daemon 进程实现。在构建 Ceph OSD的时候,建议采用SSD 磁盘以及xfs文件系统来格式化分区。此外OSD还对其它OSD进行心跳检测,检测结果汇报给Monitor

(4)RADOS:Reliable Autonomic Distributed Object Store。RADOS是ceph存储集群的基础。在ceph中,所有数据都以对象的形式存储,并且无论什么数据类型,RADOS对象存储都将负责保存这些对象。RADOS层可以确保数据始终保持一致。

(5)librados:librados库,为应用程度提供访问接口。同时也为块存储、对象存储、文件系统提供原生的接口。

(6)RADOSGW:网关接口,提供对象存储服务。它使用librgw和librados来实现允许应用程序与Ceph对象存储建立连接。并且提供S3 和 Swift 兼容的RESTful API接口。

(7)RBD:块设备,它能够自动精简配置并可调整大小,而且将数据分散存储在多个OSD上。

(8)CephFS:Ceph文件系统,与POSIX兼容的文件系统,基于librados封装原生接口。

五、Ceph存储系统的逻辑层次结构:

分布式存储ceph——(1)部署ceph_第2张图片
image

六、RADOS的系统逻辑结构:

分布式存储ceph——(1)部署ceph_第3张图片
image

七、Ceph 数据存储过程:

分布式存储ceph——(1)部署ceph_第4张图片
image

无论使用哪种存储方式(对象、块、文件系统),存储的数据都会被切分成Objects。Objects size大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono生成,虽然这些名词看上去很复杂,其实相当简单。

ino:即是文件的File ID,用于在全局唯一标识每一个文件
ono:则是分片的编号

比如:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与A1。
  File —— 此处的file就是用户需要存储或者访问的文件。对于一个基于Ceph开发的对象存储应用而言,这个file也就对应于应用中的“对象”,也就是用户直接操作的“对象”。
  Ojbect —— 此处的object是RADOS所看到的“对象”。Object与上面提到的file的区别是,object的最大size由RADOS限定(通常为2MB或4MB),以便实现底层存储的组织管理。因此,当上层应用向RADOS存入size很大的file时,需要将file切分成统一大小的一系列object(最后一个的大小可以不同)进行存储。为避免混淆,在本文中将尽量避免使用中文的“对象”这一名词,而直接使用file或object进行说明。
  PG(Placement Group)—— 顾名思义,PG的用途是对object的存储进行组织和位置映射。具体而言,一个PG负责组织若干个object(可以为数千个甚至更多),但一个object只能被映射到一个PG中,即,PG和object之间是“一对多”映射关系。同时,一个PG会被映射到n个OSD上,而每个OSD上都会承载大量的PG,即,PG和OSD之间是“多对多”映射关系。在实践当中,n至少为2,如果用于生产环境,则至少为3。一个OSD上的PG则可达到数百个。事实上,PG数量的设置牵扯到数据分布的均匀性问题。关于这一点,下文还将有所展开。
  OSD —— 即object storage device,前文已经详细介绍,此处不再展开。唯一需要说明的是,OSD的数量事实上也关系到系统的数据分布均匀性,因此其数量不应太少。在实践当中,至少也应该是数十上百个的量级才有助于Ceph系统的设计发挥其应有的优势。

基于上述定义,便可以对寻址流程进行解释了。具体而言, Ceph中的寻址至少要经历以下三次映射:
(1)File -> object映射
(2)Object -> PG映射,hash(oid) & mask -> pgid
(3)PG -> OSD映射,CRUSH算法
  CRUSH,Controlled Replication Under Scalable Hashing,它表示数据存储的分布式选择算法, ceph 的高性能/高可用就是采用这种算法实现。CRUSH 算法取代了在元数据表中为每个客户端请求进行查找,它通过计算系统中数据应该被写入或读出的位置。CRUSH能够感知基础架构,能够理解基础设施各个部件之间的关系。并CRUSH保存数据的多个副本,这样即使一个故障域的几个组件都出现故障,数据依然可用。CRUSH 算是使得 ceph 实现了自我管理和自我修复。

RADOS 分布式存储相较于传统分布式存储的优势在于:
  1. 将文件映射到object后,利用Cluster Map 通过CRUSH 计算而不是查找表方式定位文件数据存储到存储设备的具体位置。优化了传统文件到块的映射和Block MAp的管理。
  2. RADOS充分利用OSD的智能特点,将部分任务授权给OSD,最大程度地实现可扩展

八、Ceph IO流程及数据分布:

分布式存储ceph——(1)部署ceph_第5张图片
image

(1)正常IO流程图:

分布式存储ceph——(1)部署ceph_第6张图片
image

步骤:
   1. client 创建cluster handler。
   2. client 读取配置文件。
   3. client 连接上monitor,获取集群map信息。
   4. client 读写io 根据crshmap 算法请求对应的主osd数据节点。
   5. 主osd数据节点同时写入另外两个副本节点数据。
   6. 等待主节点以及另外两个副本节点写完数据状态。
   7. 主节点及副本节点写入状态都成功后,返回给client,io写入完成。

(2)新主IO流程图:

分布式存储ceph——(1)部署ceph_第7张图片
image

说明:如果新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 由于 OSD1 上未创建 PG , 不存在数据,那么 PG 上的 I/O 无法进行,怎样工作的呢?
  新主IO流程步骤:
   1. client连接monitor获取集群map信息。
   2. 同时新主osd1由于没有pg数据会主动上报monitor告知让osd2临时接替为主。
   3. 临时主osd2会把数据全量同步给新主osd1。
   4. client IO读写直接连接临时主osd2进行读写。
   5. osd2收到读写io,同时写入另外两副本节点。
   6. 等待osd2以及另外两副本写入成功。
   7. osd2三份数据都写入成功返回给client, 此时client io读写完毕。
   8. 如果osd1数据同步完毕,临时主osd2会交出主角色。
   9. osd1成为主节点,osd2变成副本。

九、Ceph Pool和PG分布情况:

pool:是ceph存储数据时的逻辑分区,它起到namespace的作用。每个pool包含一定数量(可配置) 的PG。PG里的对象被映射到不同的Object上。pool是分布到整个集群的。 pool可以做故障隔离域,根据不同的用户场景不统一进行隔离。

分布式存储ceph——(1)部署ceph_第8张图片
image

分布式存储ceph——(1)部署ceph

准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用:
1台部署节点(配一块硬盘,运行ceph-depoly)
3台ceph节点(配两块硬盘,第一块为系统盘并运行mon,第二块作为osd数据盘)
1台客户端(可以使用ceph提供的文件系统,块存储,对象存储)

(1)所有ceph集群节点(包括客户端)设置静态域名解析;

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.254.163 dlp
172.16.254.64 node1
172.16.254.65 node2
172.16.254.66 node3
172.16.254.63 controller

(2)所有集群节点(包括客户端)创建cent用户,并设置密码,后执行如下命令:

useradd cent && echo "123" | passwd --stdin cent
echo -e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL' | tee /etc/sudoers.d/ceph
chmod 440 /etc/sudoers.d/ceph

(3)在部署节点切换为cent用户,设置无密钥登陆各节点包括客户端节点

ceph@dlp15:17:01~#ssh-keygen
ceph@dlp15:17:01~#ssh-copy-id con1
ceph@dlp15:17:01~#ssh-copy-id con2
ceph@dlp15:17:01~#ssh-copy-id con3
ceph@dlp15:17:01~#ssh-copy-id controller

(4)在部署节点切换为cent用户,在cent用户家目录,设置如下文件:vi~/.ssh/config# create new ( define all nodes and users )

Host dlp
      Hostname dlp
      User cent
Host node1
      Hostname node1
      User cent
Host node2
      Hostname node2
      User cent
Host node3
      Hostname node3
      User cent
chmod 600 ~/.ssh/config

二、所有节点配置国内ceph源:

(1)all-node(包括客户端)在/etc/yum.repos.d/创建 ceph-yunwei.repo

[ceph-yunwei]
name=ceph-yunwei-install
baseurl=https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/
enable=1
gpgcheck=0

或者也可以将如上内容添加到现有的 CentOS-Base.repo 中。
(2)到国内ceph源中https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/下载如下所需rpm包。注意:红色框中为ceph-deploy的rpm,只需要在部署节点安装,下载需要到https://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/中找到最新对应的ceph-deploy-xxxxx.noarch.rpm 下载

ceph-10.2.11-0.el7.x86_64.rpm
ceph-base-10.2.11-0.el7.x86_64.rpm
ceph-common-10.2.11-0.el7.x86_64.rpm
ceph-deploy-1.5.39-0.noarch.rpm
ceph-devel-compat-10.2.11-0.el7.x86_64.rpm
cephfs-java-10.2.11-0.el7.x86_64.rpm
ceph-fuse-10.2.11-0.el7.x86_64.rpm
ceph-libs-compat-10.2.11-0.el7.x86_64.rpm
ceph-mds-10.2.11-0.el7.x86_64.rpm
ceph-mon-10.2.11-0.el7.x86_64.rpm
ceph-osd-10.2.11-0.el7.x86_64.rpm
ceph-radosgw-10.2.11-0.el7.x86_64.rpm
ceph-resource-agents-10.2.11-0.el7.x86_64.rpm
ceph-selinux-10.2.11-0.el7.x86_64.rpm
ceph-test-10.2.11-0.el7.x86_64.rpm
libcephfs1-10.2.11-0.el7.x86_64.rpm
libcephfs1-devel-10.2.11-0.el7.x86_64.rpm
libcephfs_jni1-10.2.11-0.el7.x86_64.rpm
libcephfs_jni1-devel-10.2.11-0.el7.x86_64.rpm
librados2-10.2.11-0.el7.x86_64.rpm
librados2-devel-10.2.11-0.el7.x86_64.rpm
libradosstriper1-10.2.11-0.el7.x86_64.rpm
libradosstriper1-devel-10.2.11-0.el7.x86_64.rpm
librbd1-10.2.11-0.el7.x86_64.rpm
librbd1-devel-10.2.11-0.el7.x86_64.rpm
librgw2-10.2.11-0.el7.x86_64.rpm
librgw2-devel-10.2.11-0.el7.x86_64.rpm
python-ceph-compat-10.2.11-0.el7.x86_64.rpm
python-cephfs-10.2.11-0.el7.x86_64.rpm
python-rados-10.2.11-0.el7.x86_64.rpm
python-rbd-10.2.11-0.el7.x86_64.rpm
rbd-fuse-10.2.11-0.el7.x86_64.rpm
rbd-mirror-10.2.11-0.el7.x86_64.rpm
rbd-nbd-10.2.11-0.el7.x86_64.rpm

(3)将下载好的rpm拷贝到所有节点,并安装。注意ceph-deploy-xxxxx.noarch.rpm 只有部署节点用到,其他节点不需要,部署节点也需要安装其余的rpm

(4)在部署节点(cent用户下执行):安装 ceph-deploy,在root用户下,进入下载好的rpm包目录,执行:

yum localinstall -y ./*

(或者sudo yum install ceph-deploy)

创建ceph工作目录

mkdir ceph &&  cd ceph

注意:如遇到如下报错:

分布式存储ceph——(1)部署ceph_第9张图片
image

处理办法1:

可能不能安装成功,报如下问题:将python-distribute remove 再进行安装(或者 yum remove python-setuptools -y)

image

注意:如果不是安装上述方法添加的rpm,用的是网络源,每个节点必须yum install ceph ceph-radosgw -y

处理办法2:

安装依赖包:python-distribute

root@bushu12:16:46~/cephjrpm# yum install python-distribute -y
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
软件包 python-setuptools 已经被 python2-setuptools 取代,改为尝试安装 python2-setuptools-22.0.5-1.el7.noarch
正在解决依赖关系
--> 正在检查事务
---> 软件包 python2-setuptools.noarch.0.22.0.5-1.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=============================================================================================================================
 Package                           架构                  版本                           源                              大小
=============================================================================================================================
正在安装:
 python2-setuptools                noarch                22.0.5-1.el7                   openstack-ocata                485 k

事务概要
=============================================================================================================================
安装  1 软件包

总下载量:485 k
安装大小:1.8 M
Downloading packages:
python2-setuptools-22.0.5-1.el7.noarch.rpm                                                            | 485 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : python2-setuptools-22.0.5-1.el7.noarch                                                                   1/1 
  验证中      : python2-setuptools-22.0.5-1.el7.noarch                                                                   1/1 

已安装:
  python2-setuptools.noarch 0:22.0.5-1.el7                                                                                   

完毕!

再次安装 :ceph-deploy-1.5.39-0.noarch.rpm -y

root@bushu12:22:12~/cephjrpm# yum localinstall ceph-deploy-1.5.39-0.noarch.rpm -y
已加载插件:fastestmirror, langpacks
正在检查 ceph-deploy-1.5.39-0.noarch.rpm: ceph-deploy-1.5.39-0.noarch
ceph-deploy-1.5.39-0.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 ceph-deploy.noarch.0.1.5.39-0 将被 安装
--> 正在处理依赖关系 python-distribute,它被软件包 ceph-deploy-1.5.39-0.noarch 需要
Loading mirror speeds from cached hostfile
软件包 python-setuptools-0.9.8-7.el7.noarch 被已安装的 python2-setuptools-22.0.5-1.el7.noarch 取代
--> 解决依赖关系完成
错误:软件包:ceph-deploy-1.5.39-0.noarch (/ceph-deploy-1.5.39-0.noarch)
          需要:python-distribute
          可用: python-setuptools-0.9.8-7.el7.noarch (base)
              python-distribute = 0.9.8-7.el7
 您可以尝试添加 --skip-broken 选项来解决该问题
 您可以尝试执行:rpm -Va --nofiles --nodigest

删除:python2-setuptools-22.0.5-1.el7.noarch

root@bushu12:25:30~/cephjrpm# yum remove python2-setuptools-22.0.5-1.el7.noarch -y
已加载插件:fastestmirror, langpacks
正在解决依赖关系
--> 正在检查事务
---> 软件包 python2-setuptools.noarch.0.22.0.5-1.el7 将被 删除
--> 解决依赖关系完成

依赖关系解决

=============================================================================================================================
 Package                           架构                  版本                          源                               大小
=============================================================================================================================
正在删除:
 python2-setuptools                noarch                22.0.5-1.el7                  @openstack-ocata                1.8 M

事务概要
=============================================================================================================================
移除  1 软件包

安装大小:1.8 M
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在删除    : python2-setuptools-22.0.5-1.el7.noarch                                                                   1/1 
  验证中      : python2-setuptools-22.0.5-1.el7.noarch                                                                   1/1 

删除:
  python2-setuptools.noarch 0:22.0.5-1.el7                                                                                   

完毕!

因为目前的源用的是上面黄色标记openstack-ocata源,安装版本就成了python2-setuptools-22.0.5-1.el7.noarch,所以修改yum源后,只要保证安装 python-setuptools 版本是 0.9.8-7.el7 就可以通过了,如下把openstack-ocata 源移走或者删除:

root@dlp10:30:02/etc/yum.repos.d# mv rdo-release-yunwei.repo old/
root@dlp10:30:11/etc/yum.repos.d# ls
Centos7-Base-yunwei.repo  ceph-yunwei.repo  epel-testing.repo  old
ceph.repo                 epel.repo         epel-yunwei.repo
root@dlp10:30:11/etc/yum.repos.d#
root@dlp10:30:12/etc/yum.repos.d#
root@dlp10:30:12/etc/yum.repos.d# yum clean all
root@dlp10:30:12/etc/yum.repos.d# yum makecache
root@bushu12:25:30~/cephjrpm# yum localinstall ceph-deploy-1.5.39-0.noarch.rpm -y
已加载插件:fastestmirror, langpacks
正在检查 ceph-deploy-1.5.39-0.noarch.rpm: ceph-deploy-1.5.39-0.noarch
ceph-deploy-1.5.39-0.noarch.rpm 将被安装
正在解决依赖关系
--> 正在检查事务
---> 软件包 ceph-deploy.noarch.0.1.5.39-0 将被 安装
--> 正在处理依赖关系 python-distribute,它被软件包 ceph-deploy-1.5.39-0.noarch 需要
Loading mirror speeds from cached hostfile
--> 正在检查事务
---> 软件包 python-setuptools.noarch.0.0.9.8-7.el7 将被 安装
--> 解决依赖关系完成

依赖关系解决

=============================================================================================================================
 Package                        架构                版本                     源                                         大小
=============================================================================================================================
正在安装:
 ceph-deploy                    noarch              1.5.39-0                 /ceph-deploy-1.5.39-0.noarch              1.3 M
为依赖而安装:
 python-setuptools              noarch              0.9.8-7.el7              base                                      397 k

事务概要
=============================================================================================================================
安装  1 软件包 (+1 依赖软件包)

总计:1.6 M
总下载量:397 k
安装大小:3.2 M
Downloading packages:
python-setuptools-0.9.8-7.el7.noarch.rpm                                                              | 397 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  正在安装    : python-setuptools-0.9.8-7.el7.noarch                                                                     1/2 
  正在安装    : ceph-deploy-1.5.39-0.noarch                                                                              2/2 
  验证中      : ceph-deploy-1.5.39-0.noarch                                                                              1/2 
  验证中      : python-setuptools-0.9.8-7.el7.noarch                                                                     2/2 

已安装:
  ceph-deploy.noarch 0:1.5.39-0                                                                                              

作为依赖被安装:
  python-setuptools.noarch 0:0.9.8-7.el7                                                                                     

完毕!

查看版本:

root@bushu12:55:58~/cephjrpm#ceph -v
ceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)

(5)在部署节点(cent用户下执行):配置新集群

ceph-deploy new node1 node2 node3
vim ./ceph.conf
添加:
osd_pool_default_size = 1
osd_pool_default_min_size = 1
mon_clock_drift_allowed = 2
mon_clock_drift_warn_backoff = 3

可选参数如下:

public_network = 192.168.254.0/24
cluster_network = 172.16.254.0/24
osd_pool_default_size = 3
osd_pool_default_min_size = 1
osd_pool_default_pg_num = 8
osd_pool_default_pgp_num = 8
osd_crush_chooseleaf_type = 1
  
[mon]
mon_clock_drift_allowed = 0.5
  
[osd]
osd_mkfs_type = xfs
osd_mkfs_options_xfs = -f
filestore_max_sync_interval = 5
filestore_min_sync_interval = 0.1
filestore_fd_cache_size = 655350
filestore_omap_header_cache_size = 655350
filestore_fd_cache_random = true
osd op threads = 8
osd disk threads = 4
filestore op threads = 8
max_open_files = 655350

(6)在部署节点执行(cent用户下执行):所有节点安装ceph软件
所有节点有如下软件包:

root@rab116:13:59~/cephjrpm#ls
ceph-10.2.11-0.el7.x86_64.rpm               ceph-resource-agents-10.2.11-0.el7.x86_64.rpm    librbd1-10.2.11-0.el7.x86_64.rpm
ceph-base-10.2.11-0.el7.x86_64.rpm          ceph-selinux-10.2.11-0.el7.x86_64.rpm            librbd1-devel-10.2.11-0.el7.x86_64.rpm
ceph-common-10.2.11-0.el7.x86_64.rpm        ceph-test-10.2.11-0.el7.x86_64.rpm               librgw2-10.2.11-0.el7.x86_64.rpm
ceph-devel-compat-10.2.11-0.el7.x86_64.rpm  libcephfs1-10.2.11-0.el7.x86_64.rpm              librgw2-devel-10.2.11-0.el7.x86_64.rpm
cephfs-java-10.2.11-0.el7.x86_64.rpm        libcephfs1-devel-10.2.11-0.el7.x86_64.rpm        python-ceph-compat-10.2.11-0.el7.x86_64.rpm
ceph-fuse-10.2.11-0.el7.x86_64.rpm          libcephfs_jni1-10.2.11-0.el7.x86_64.rpm          python-cephfs-10.2.11-0.el7.x86_64.rpm
ceph-libs-compat-10.2.11-0.el7.x86_64.rpm   libcephfs_jni1-devel-10.2.11-0.el7.x86_64.rpm    python-rados-10.2.11-0.el7.x86_64.rpm
ceph-mds-10.2.11-0.el7.x86_64.rpm           librados2-10.2.11-0.el7.x86_64.rpm               python-rbd-10.2.11-0.el7.x86_64.rpm
ceph-mon-10.2.11-0.el7.x86_64.rpm           librados2-devel-10.2.11-0.el7.x86_64.rpm         rbd-fuse-10.2.11-0.el7.x86_64.rpm
ceph-osd-10.2.11-0.el7.x86_64.rpm           libradosstriper1-10.2.11-0.el7.x86_64.rpm        rbd-mirror-10.2.11-0.el7.x86_64.rpm
ceph-radosgw-10.2.11-0.el7.x86_64.rpm       libradosstriper1-devel-10.2.11-0.el7.x86_64.rpm  rbd-nbd-10.2.11-0.el7.x86_64.rpm

所有节点安装上述软件包(包括客户端):

yum localinstall ./* -y

(7)在部署节点执行,所有节点安装ceph软件

ceph-deploy install dlp node1 node2 node3

(8)在部署节点初始化集群(cent用户下执行):

ceph-deploy mon create-initial

(9)在osd节点prepare Object Storage Daemon :

mkdir /data && chown ceph.ceph /data
image.png

(10)每个节点将第二块硬盘做分区,并格式化为xfs文件系统挂载到/data:

root@con116:45:22/#fdisk /dev/vdb
  
root@con116:45:22/#lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda         252:0    0   40G  0 disk
├─vda1      252:1    0  512M  0 part /boot
└─vda2      252:2    0 39.5G  0 part
 ├─cl-root 253:0    0 35.5G  0 lvm  /
 └─cl-swap 253:1    0    4G  0 lvm  [SWAP]
vdb         252:16   0   10G  0 disk
└─vdb1      252:17   0   10G  0 part
  
root@rab116:54:35/#mkfs -t xfs /dev/vdb1
  
root@rab116:54:50/#mount /dev/vdb1 /data/
  
root@rab116:56:39/#lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda         252:0    0   40G  0 disk
├─vda1      252:1    0  512M  0 part /boot
└─vda2      252:2    0 39.5G  0 part
 ├─cl-root 253:0    0 35.5G  0 lvm  /
 └─cl-swap 253:1    0    4G  0 lvm  [SWAP]
vdb         252:16   0   10G  0 disk
└─vdb1      252:17   0   10G  0 part /data

(11)在/data/下面创建osd挂载目录:

mkdir /data/osd
chown -R ceph.ceph /data/
chmod 750 /data/osd/
ln -s /data/osd /var/lib/ceph

意:准备前先将硬盘做文件系统 xfs,挂载到/var/lib/ceph/osd,并且注意属主和属主为ceph:
列出节点磁盘:ceph-deploy disk list node1
擦净节点磁盘:ceph-deploy disk zap node1:/dev/vdb1

(12)准备Object Storage Daemon:

ceph-deploy osd prepare node1:/var/lib/ceph/osd node2:/var/lib/ceph/osd node3:/var/lib/ceph/osd

(13)激活Object Storage Daemon:

ceph-deploy osd activate node1:/var/lib/ceph/osd node2:/var/lib/ceph/osd node3:/var/lib/ceph/osd

(14)在部署节点transfer config files

ceph-deploy admin dlp node1 node2 node3
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

(15)在ceph集群中任意节点检测:

ceph -s
分布式存储ceph——(1)部署ceph_第10张图片
image.png

三、客户端设置:

(1)客户端也要有cent用户:

useradd cent && echo "123" | passwd --stdin cent
echo-e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL' | tee /etc/sudoers.d/ceph
chmod440 /etc/sudoers.d/ceph

在部署节点执行,安装ceph客户端及设置:

ceph-deploy install controller
ceph-deploy admin controller

(2)客户端执行

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

(3)客户端执行,块设备rdb配置:

创建rbd:rbd create disk01 --size 10G --image-feature layering    删除:rbd rm disk01
列示rbd:rbd ls -l
映射rbd的image map:sudo rbd map disk01      取消映射:sudo rbd unmap disk01
显示map:rbd showmapped
格式化disk01文件系统xfs:sudo mkfs.xfs /dev/rbd0
挂载硬盘:sudo mount /dev/rbd0 /mnt
验证是否挂着成功:df -hT

(4)File System配置:
在部署节点执行,选择一个node来创建MDS:

ceph-deploy mds create node1

以下操作在node1上执行:

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

在MDS节点node1上创建 cephfs_data 和 cephfs_metadata 的 pool

ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 128

开启pool:

ceph fs new cephfs cephfs_metadata cephfs_data

显示ceph fs:

ceph fs ls
ceph mds stat

以下操作在客户端执行,安装ceph-fuse:

yum -y install ceph-fuse

获取admin key:

sshcent@node1"sudo ceph-authtool -p /etc/ceph/ceph.client.admin.keyring" > admin.key
chmod600 admin.key

挂载ceph-fs:

mount-t ceph node1:6789:/ /mnt -o name=admin,secretfile=admin.key
df-hT

停止ceph-mds服务:

systemctl stop ceph-mds@node1
ceph mds fail 0
ceph fs rm cephfs --yes-i-really-mean-it
  
ceph osd lspools
显示结果:0 rbd,1 cephfs_data,2 cephfs_metadata,
  
ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it
 

四、删除环境:

ceph-deploy purge dlp node1 node2 node3 controller
ceph-deploy purgedata dlp node1 node2 node3 controller
ceph-deploy forgetkeys
rm -rf ceph*

你可能感兴趣的:(分布式存储ceph——(1)部署ceph)