简介

概念

分布式存储系统,是通过网络将数据分散存储在多台独立的设备上。

特性

可扩展分布式存储系统可以扩展到几百台甚至几千台的集群规模,而且随着集群规模的增长,系统整体性能表现为线性增长。分布式存储的水平扩展有以下几个特性:

  1. 节点扩展后,旧数据会自动迁移到新节点,实现负载均衡,避免单点过热的情况出现;
  2. 水平扩展只需要将新节点和原有集群连接到同一网络,整个过程不会对业务造成影响;
  3. 当节点被添加到集群,集群系统的整体容量:和性能也随之线性扩展,此后新节点的资源就会被管理平台接管,被用于分配或者回收。

低成本
分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机之上。另外,线性扩展能力也使得增加、减少机器非常方便,可以实现自动运维。

高性能
无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能。

易用
分布式存储系统需要能够提供易用的对外接口,另外,也要求具备完善的监控、运维工具,并能够与其他系统集成。

易管理
可通过一个简单的WEB界面就可以对整个系统进行配置管理,运维简便,极低的管理成本。

存储分类

本地存储

本地的文件系统,不能在网络上用。
ext3 ext4 xfs ntfs

网络存储

网络文件系统,共享的都是文件系统。
nfs 网络文件系统
hdfs 分布式网络文件系统
glusterfs 分布式网络文件系统

共享的裸设备
cinder 块存储
ceph(块存储对象存储 网络文件系统-分布式)
SAN(存储区域网)

分布式
集群
image.png

分布式存储分类

Hadoop HDFS(大数据分布式文件系统)

HDFS (Hadoop Distributed File System)是一个分布式文件系统,是hadoop生态系统的一个重要组成部分,是
hadoop中的的存储组件.HDFS是一个高度容错性的系统,HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。

HDFS的优点:
1.高容错性
数据自动保存多个副本
副本丢失后,自动恢复
2.良好的数据访问机制
次写入、多次读取,保证数据一致性I
3.适合大数据文件的存储
TB、甚至PB级数据
扩展能力很强

HDFS的缺点:
1.低延迟数据访问
难以应付毫秒级以下的应用
2.海量小文件存取
占用NameNode大量内存
3.一个文件只能有一个写入者
仅支持append(追加)

openstack的对象存储swfit

image.png
openstack object storage (Swift) 是Openstack开源云计算项目的子项目之一。Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。Swift的是用Python开发

其主要特点为:

  1. 各个存储的节点完全对等,是对称的系统架构。
  2. 开发者通过一个RESTful HTTP API与对象存储系统相互作用。
  3. 无单点故障:Swift的元巍据存储是完全均匀随机分布的,并且与对象文件存储一样,元数据也会存储多份。整个Swift集群中,也没有一个角色是单点的。
  4. 在不影响性能的情况下,集群通过增加外部节点进行扩展。
  5. 无限的可扩展性:这里的扩展性分两方面,一是数据存储容量无限可扩展;二是Swift性能(如QPS、吞吐量等)可线性提升,扩容只需简单地新增机器,系统会自动完成数据迁移等工作,使各存储节点重新达到平衡状态。
  6. 极高的数据持久性

Swift可以用以下用途:

  1. 图片、文档存储
  2. 长期保存的日志文件
  3. 存储媒体库(照片、音乐、视频等)
  4. 视频监控文件的存档
  5. 总结:Swift适合用来存储大量的、长期的、需要备份的对象。

公有云对象存储

公有云大都只有对象存储。例如,谷歌云存储是一个快速,具有可扩展性和高可用性的对象存储。

Amazon类似产品就是S3:
http://aws.amazon.com/s3

微软类似产品AzureBo1b:
http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-b1obs/

阿里类似的有OSS:
https://www.aliyun.com/product/oss/

阿里云对象存储OSS
阿里云对象存储服务(0bject storage Service,简称oss),是阿里云提供的海量、安全、低成本、高可靠的云存储服务

存储类型(Storage Class)

OSS提供标准、低频访问、归档三种存储类型,其中标准存储类型提供高可靠、高可用、高性能的对象存储服务,能够支持频繁的数据访问;低频访问存储类型适合长期保存不经常访问的数据(平均每月访问频率1到2次),存储单价低于标准类型;归档存储类型适合需要长期保存(建议半年以上)的归档数据,在三种存储类型中单价最低。

应用场景

1、图片和音视频等应用的海量存储
OSS可用于图片、音视频、日志等海量文件的存储。
2、云端数据处理
上传文件到oss后,可以配合媒体处理服务和图片处理服务进行云端的数据处理。
3、网页或者移动应用的静态和动态资源分离
利用海量互联网带宽,OSS可以实现海量数据的互联网并发下载。

GlusterFS分布式文件系统

image.png

GlusterFS (GNU ClusterFile system)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点全部平等。GlusterFS配置方便, 稳定性好,可轻松达到PB级容量,数千个节点,2011年被红帽收购。

PB级容量高可用性基于文件系统级别共享分布式去中心化

glusgerfs存储卷的类型
基本类型:条带,复制,哈希。
复合卷
复合卷就是分布式复制,分布式条带,分布式条带复制卷,像分布式复制,分布式条带这两个是比较常用的,像分布式条带
复制卷三种揉一块儿的用的都比较少,

各种卷的整理

分布卷:存储数据时,将文件随机存储到各台glusterfs机器上。
优点:存储数据时,读取速度快
缺点:一个birck坏掉,文件就会丢失
复制卷:存储数据时,所有文件分别存储到每台glusterfs机器上。
优点:对文件进行的多次备份,一个brick坏掉,文件不会丢失,其他机器的brick上面有备份
缺点:占用资源
条带卷:存数据时,一个文件分开存到每台glusterfs机器上
优点:对大文件,读写速度快
缺点,一个brick坏掉,文件就会坏掉

最常见的GPFS和HDFS有什么区别

GPFS和Hadoop的HDFS系统对比, 它设计用于在商用硬件上存储类似或更大的数据

HDFS还将文件分割成块,并将它们存储在不同的文件系统节点内。

HDFS对磁盘可靠性的依赖并不高,它可以在不同的节点内存储块的副本。保存单一副本块的一一个节点出现故障可以再复制该组其它有效块内的副本。相较而言,虽然GPFS支持故障节点恢复,但它是一一个更严重的事件,它可能包括数据(暂时性)丢失的高风险。

GPFS支持完整的Posix文件系统语义。 HDFS和GFS(谷歌文件系统)并不支持完整的Posix语义。

GPFS跨文件系统分布它的目录索引和其它元数据。相反,Hadoop将它们保留在主要和次要Namenode中,大型服务器必须在RAM内存储所有的索引信息。

GPFS将文件分割成小块。Hadoop HDFS喜欢64MB甚至更多的块,因为这降低了Namenode的存储需求。小块或很多小的文件会快速填充文件系统的索引,因此限制了文件系统的大小。

Ceph

简介

Ceph简介Ceph使用C++语言开发,遵循LGPL协议开源。Sage wei1(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司,并发布Inktank Ceph企业版(ICE)软件, 业务场景聚焦云、备份和归档,支持对象存储和块存储以及文件系统存储应用。出现Ceph开源社区版本和Redhat企业版。
Cphe主要设计的初衷是变成一一个可避免单节点故障的分布式文件系统,PB级别的扩展能力,而且是一种开源自由软件,许多超融合的分布式文件系统都是基于Ceph开发的。
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

优势

高扩展性:使用普通x86服务器,支持10~1000台服务器,支持TB到EB级的扩展。
高可靠性:没有单点故障,多数据副本,自动管理,自动修复。
高性能:数据分布均衡。
可用于对象存储,块设备存储和文件系统存储

架构

image.png
基础存储系统
rados:基础存储系统RADOS(Relibble, Autonomic, Distributed object store,即可靠的、自动化的、分
布式的对象存储)。所有存储在Ceph系统中的用户数据事实上最终都是由这一层来存储的。Ceph的高可靠、高可扩展、高性能、高自动化等等特性本质上也是由这一层所提供的。

基础库librados:
librados: 这一层的功能是对RADOS进行抽象和封装,并向上层提供API,以便直接基于RADOS (而不是整个Ceph)进行应用开发。特别要注意的是,RADOS是一个对象存储系统,因此, librados实现的API也只是针对对象存储功能的。

高层应用接口
RADOSGW
对象网关接口(对象存储)
RDB
块存储
CEPHFS
文件系统存储
其作用是在1ibrados库的基础上提供抽:象层次更高、更便于应用或客户端使用的上层接口。

组件

image.png

Osd
用于集群中所有数据与对象的存储。处理集群数据的复制、恢复、回填、再均衡。并向其他osd守护进程发送心跳,然后向Mon提供一些监控信息。
当ceph存储集群设定数据有两个副本时(一 共存两份),则至少需要两个OSD守护进程即两个OSD节点,集群才能达到active+clean状态。

MDS(可选)
为Ceph文件系统提供元数据计算、缓存与同步(也就是说,Ceph块设备和Ceph对象存储不使用MDS)。在ceph中,元数据也是存储在osd节点中的,mds类似于元数据的代理缓存服务器。MDS进程并不是必须的进程, 只有需要使用CEPHFS时,才需要配置MDS节点。

Monitor
监控整个集群的状态,维护集群的clusterMAP二进制表,保证集群数据的一致性。ClusterMAP描述了对象块存储的物理位置,以及一个将设备聚合到物理位置的桶列表。

Manager (ceph-mgr)
用于收集ceph集群状态、运行指标,比如存储利用率、当前性能指标和系统负载。对外提供ceph dashboard (cephui)和resetful api。Manager组件开启高可用时,至少2个

ceph结构包含两个部分
ceph qiient:
访问ceph底层服务或组件, 对外提供各种接口。比如:对象存储接口、块存储接口、文件级存储接口。
ceph node:
ceph底层服务提供端,也就是ceph存储集群。

Ceph存储种类及其应用场景

块存储

image.png
典型设备:磁盘阵列,硬盘主要是将裸磁盘空间映射给主机使用的。

优点:
通过Raid与LVM等手段,对数据提供了保护。
多块廉价的硬盘组合起来,提高容量。
多块磁盘组合出来的逻辑盘,提升读写效率。

缺点:
采用SAN架构组网时,光纤交换机,造价成本高。
主机之间无法共享数据。

使用场景:
Docker容器、虚拟机磁盘存储分配。
日志存储。
文件存储。

文件存储

image.png
典型设备:FTP、NFS服务器
为了克服块存储文件无法共享的问题,所以有了文件存储。
在服务器上架设FTP与NFS服务,就是文件存储。

优点:
造价低,随便一台机器就可以了。
方便文件共享。
缺点:
读写速率低。
传输速率慢。
使用场景:
日志存储。
有目录结构的文件存储。

对象存储

为什么需要对象存储?

首先,一个文件包含了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。
例如FAT32这种文件系统,存储过程是链表的形式。

而对象存储则将元数据独立了出来,控制节点叫元数据服务器(服务器+对象存储管理软件),里面主要负责存储对象的属性(主要是对象的数据被打散存放到了那几台分布式服务器中的信息),而其他负责存储数据的分布式服务器叫做OSD,主要负责存储文件的数据部分。当用户访问对象,会先访问元数据服务器,元数据服务器只负责反馈对象存储在哪些osD,假设反馈文件A存储在B、C、D三台OSD, 那么用户就会再次直接访问3台OSD服务器去读取数据。

这时候由于是3台OSD同时对外传输数据,所以传输的速度就加快了。当OSD服务器数量越多,这种读写速度的提升就越大,通过此种方式,实现了读写快的目的。

另一方面,对象存储软件是有专门的文件系统的,所以osD对外又相当于文件服务器,那么就不存在文件共享方面的困难了,也解决了文件共享方面的问题。

所以对象存储的出现很好地结合了块存储与文件存储的优点。

优点:
具备块存储的读写高速。
具备文件存储的共享等特性。

使用场景:(适合更新变动较少的数据)
图片存储。
视频存储。

Ceph同时提供对象存储、块存储和文件系统存储三种功能,满足不同应用需求。

OSD
对象存储(object-based storage)是一 种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(object-based Storage Device)简称OSD。 总体上来讲,对象存储综合了NAS和SAN的优点,同时具有SAN的高速直接访问和NAS的分布式数据共享等优势,提供了具有高性能、高可靠性、跨平台以及安全的数据共享的存储体系结构。

Ceph核心组件及概念介绍

Monitor

监控整个集群的状态,维护集群的cluster MAP二进制表,保证集群数据的一致性

OSD

OSD全称Object storage Device,也就是负贵响应客户端请求返回具体数据的进程。一个Ceph集群一般都有很多个OSD。

MDS

MDS全称Ceph Metadata Server, 是CephFS服务依赖的元数据服务。

Objects

Ceph最底层的存储单元是object对象,每个0bject包含元数据和原始数据。

PG

PG全称Placement Grouops,是一 一个逻辑的概念,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据。

RADOS

RADOS全称Reliable Autonomic Distributed object store, 是Ceph集群的精华,用户实现数据分配、Failover等集群操作。

Libradio

Librados是Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过1ibrados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

CRUSH

CRUSH是Ceph使用的数据分布算法,类似一 -致性哈希,让数据分配到预期的地方。

RBD

RBD全称RADOS block device, 是Ceph对外提供的块设备服务。

RGW

RGW全称RADOS gateway,是ceph对外提供的对象存储服务I接口与s3和Swift兼容。

CephFS

CephFS全称Ceph File System, 是Ceph对外提供的文件系统服务。

工作原理

ceph的数据存储过程
image.png

无论使用哪种存储方式(对象、块、挂载),存储的数据都会被切分成对象(objects)。objects size大小可以由管理员调整,通常为2M或4M。每个对象都会有一个唯一的OID,由ino与ono生成,虽然这些名词看上去很复杂,其实相当简单。ino即是文件的FileID,用于在全局唯一标示每一个文件,而ono则是分片的编号。比如:一个文件FileID为A,它被切成了两个对象,一个对象编号0,另一个编号1,那么这两个文件的oid则为A0与A1。oid的好处是可以唯一标示每个不同的对象,并且存储了对象与文件的从属关系。由于ceph的所有数据都虚拟成了整齐划一-的对象,所以在读写时效率都会比较高。

但是对象并不会直接存储进OSD中,因为对象的size很小,在一个大规模的集群中可能有几百到几千万个对象。这么多对象光是遍历寻址,速度都是很缓慢的;并且如果将对象直接通过某种固定映射的哈希算法映射到osd上,当这个osd损坏时,对象无法自动迁移至其他osd上面(因为映射函数不允许)。为了解决这些问题,ceph引入了归置组的概念,即PG

PG是一个逻辑概念,我们1inux系统中可以直接看到对象,但是无法直接看到PG。它在数据寻址时类似于数据库中的索引:每个对象都会固定映射进一个PG中,所以当我们要寻找一个对象时,只需要先找到对象所属的PG,然后遍历这个PG就可以了,无需遍历所有对象。而且在数据迁移时,也是以PG作为基本单位进行迁移,ceph不会直接操作对象。

对象时如何映射进PG的?还记得OID么?首先使用静态hash函数对OID做hash取出特征码,用特征码与PG的数量去模,得到的序号则是PGID。由于这种设计方式,PG的数量多寡直接决定了数据分布的均匀性,所以合理设置的PG数量可以很好的提升CEPH集群的性能并使数据均匀分布。
最后PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上(其实是把PG中的所有对象存储到节点上),第一个osd节点即为主节点,其余均为从节点。
名词介绍

Ceph集群

ceph的存储方式

radosgw:Ceph对象网关
Ceph对象网关是一个对象存储接口,建立在该对象之上,1ibrados为应用程序提供了通往Ceph存储集群的RESTfu1网关。Ceph对象存储支持两个接口:

与S3兼容:为对象存储功能提供与Amazon S3 RESTfu1 API的大部分子集业容的接口。

兼容Swift:通过与OpenStack Swift API的大部分子集兼容的接口,为对象存储功能提供支持。

Ceph对象存储使用Ceph对象网关守护进程 (radosgw),它是用于与Ceph存储群集进行交互的HTTP服务器。由于它提供与QpenStack Swift和Amazon S3兼容的接口,因此Ceph对象网关具有其自己的用户管理。Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据的同一Ceph存储群集中。和SwiftAPI共享一个公共的名称空间,因此您可以使用一个API编写数据,而使用另一 个API检索数据。
image.png
Ceph文件系统

Ceph文件系统(Ceph FS)是个POSIX兼容的文件系统,它使用Ceph存储集群来存储数据。 Ceph文件系统与Ceph块设备、同时提供S3和Swift API的Ceph对象存储、或者原生库(librados)一样,都使用着相同的Ceph存储集群系统。

CEPH块存储

块是一个字节序列(例如,一个512字节的数据块)。基于块的存储接口是最常见的存储数据方法,它们基于旋转介质,像硬盘、CD、软盘。无处不在的块设备接口使虚拟块设备成为与Ceph这样的海量存储系统交互的理想之选。

image.png

安装ceph集群

注意版本更新非常快,有问题看官方文档
官方文档:http://docs.ceph.org.cn/

准备环境
系统版本:centos7.4 x86_64 server
硬件配置:5台vm, 1核1G内存,每台node角色的机器至少挂载1块不低于5个G的空闲盘为osd存储
主机名 ip role
admin 192.168.153.130 admin—安装ceph-deploy
node1 192.168.153.131 mon / mgr / osd
node2 192.168.153.132 osd
node3 192.168.153.133 osd
ceph-client 192.168.153.134

1.给三台node节点添加一块大小5G以上的磁盘。
2.所有节点修改主机名并相互解析
3.关闭所有机器的防火墙和selinux
4.所有节点创建普通用户并设置密码—所有节点都操作

  1. [root@admin ~]# useradd cephu
  2. [root@admin ~]# passwd cephu

5.确保各Ceph节点上新创建的用户都有sudo权限—所有节点操作

  1. [root@admin ~]# visudo
  2. # 在root ALL=(ALL)ALL下面添加:
  3. cephu ALL=(root) NOPASSWD:ALL

6.实现ssh无密码登录(admin节点操作)

  1. [root@admin ~]#su - cephu
  2. [cephu@admin ~]$ ssh-keygen

7.将admin节点cephu用户生成的密钥拷贝到各Ceph节点:

  1. [cephu@admin ~]$ ssh-copy-id cephu@node1
  2. [cephu@admin ~]$ ssh-copy-id cephu@node2
  3. [cephu@admin ~]$ ssh-copy-id cephu@node3
  4. [cephu@admin ~]$ ssh-copy-id cephu@ceph-client

8.在admin节点用root用户添加~/ .ssh/config配置文件,并进行如下设置,这样ceph-dep1oy就能用你所建的用户名登录Ceph节点了

  1. [root@admin ~]#mkdir ~/.ssh
  2. [root@admin ~]# vim ~/.ssh/config
  3. Host node1
  4. Hostname node1
  5. User cephu
  6. Host node2
  7. Hostname node2
  8. User cephu
  9. Host node3
  10. Hostname node3
  11. User cephu

9.添加下载源,安装ceph-deploy(admin节点, root用户)

  1. [root@admin ~]# vim /etc/yum. repos.d/ceph.repo
  2. [ceph-noarch]
  3. name=Ceph noarch packages
  4. baseur1=https://down1oad. ceph.com/rpm-1uminous /e17/noarch
  5. enabled=1
  6. gpgcheck=1
  7. type=rpm-md
  8. gpgkey=https://down1oad.ceph.com/keys/release.asc
  9. #更新源,安装ceph-deploy:
  10. [root@admin ~]# yum makecache
  11. [root@admin ~]# yum update
  12. #开启yum缓存
  13. [root@admin ~]# vim /etc/yum.conf
  14. keepcache=1
  15. #安装
  16. [root@admin ~]# yum install ceph-deploy -y

10.安装ntp(所有节点)

  1. #注意!!选择任何一台机器当ntp时间服:务器,其他的节点当时间服务器的客户端跟服务器同步时间
  2. 我选择的是admin上:
  3. [root@admin ~]# yum install -y ntp
  4. [root@admin ~]# vim /etc/ntp.conf
  5. #有4行server的位置,把那4行server行注释掉,填写以下两行
  6. server 127.127.1.0 # local clock
  7. fudge 127.127.1.0 stratum 10
  8. [root@admin ~]# systemct1 start ntpd
  9. [root@admin ~]# systemct1 status ntpd
  10. 其他所有节点:
  11. [root@admin node~]# yum install ntpdate -y
  12. [root@admin node~]# ntpdate 时间服务器ip

部署ceph集群

注意!!没有特别说明以下所有操作均是在admin节点,cephu用户下执行

1.创建cephu操作的目录:

  1. [root@qfedu.com-admin ~]#su- cephu
  2. [cephu@admin ~]$ mkdir my-cluster #之后,所有ceph-deploy命令操作必须在该目录下执行

2.创建集群—-这里报错查看后面的错误整理
首先在这里需要先下载一个包并安装否则会报错,然后在创建集群

  1. [cephu@admin ~]$ wget https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7 d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip
  2. [cephu@admin ~]$ unzip distribute-0.7.3.zip
  3. [cephu@admin ~]$ cd distribute-0.7.3
  4. [cephu@admin distribute-0.7.3]$ sudo python setup.py install
  5. 创建集群
  6. [cephu@admin ~]$ cd my-cluster/
  7. [cephu@admin my-cluster]$ ceph-deploy new node1
  8. [cephu@qfedu.com-admin my-cluster]$ ls
  9. ceph.conf ceph-dep1oy-ceph.1og ceph.mon.keyring
  10. 创建成功会有三个文件:ceph.conf. ceph.mon.keyring. and a log file

3.安装luminous-12.2.13在(脚本方式在admin节点)
目标:在node1,node2,node3三个节点上安装ceph和ceph-rados gw主包
方法1:利用官方脚本全自动安装
#脚本会帮助node1,node2 ,node3创建epe1源和ceph源,并且自动安装ceph和ceph-radosgw主包
[cephu@admin my-cluster]$ ceph-deploy install —release luminous nodel node2 node3
#这一步时间很长,容易超时,可以利用手动安装
如果ceph和ceph-radosgw安装不上,则采用方法2
注意epel的源
测试是否安装完成:分别在node1 node2 node3中确认安装版本为12.2.13

  1. [cephu@nodel ~]$ ceph--version
  2. ceph version 12.2.13 (584a20eb0237c657dc0567 da126be145106aa47e) luminous(stable)

4.初始化mon: admin节点--cephu用户执行

  1. [cephu@admin my-cluster]$ ceph-deploy mon create-initial

5.赋予各个节点使用命令免用户名权限:

  1. [cephu@admin my-cluster]$ ceph-deploy admin nodel node2 node3

6.安装ceph-mgr:只有luminous才有, 为使用dashboard做准备

  1. [cephu@admin my-cluster]$ ceph-deploy mgr create node1

7.添加osd:
注意:各个节点上提供存储空间的磁盘大小不能太小,最好5G以上,注意检查你的磁盘名字

  1. [cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node1
  2. [cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node2
  3. [cephu@admin my-cluster]$ ceph-deploy osd create --data /dev/sdb node3

命令中/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区需要指定具体分区),通过如下命令查看:

  1. [cephu@admin my-cluster]$ ssh node1 lsblk -f

最后通过如下命令查看集群状态:

  1. [cephu@admin my-cluster]$ ssh node1 sudo ceph -s

如果显示health_ok,3个osdup就成功了
image.png

Dashboard的配置:

在node1上操作把ceph-mgr和ceph-mon安装在同一个主机上,最好只有一个ceph-mgr

  1. [root@node1 ~]# su - cephu
  2. #1.创建管理域秘钥:
  3. [cephu@node1 ~]$ sudo ceph auth get-or-create mgr.nodel mon 'allow profilemgr' osd 'allow*' mds 'allow *'
  4. [mgr.node1]
  5. key = AQAePadeYsvJLxAA9Pnmib3S+OKj1jAeuSQCKw==
  6. #2.开启ceph-mgr管理域
  7. [cephu@node1 ~]$ sudo ceph-mgr -inodel
  8. #3.查看ceph的状态:确认mgr的状态为active
  9. [cephu@node1 ~]$ sudo ceph status
  10. cluster:
  11. id:aec06bc6-428c-49ff-a2c1-2d84808bcb54
  12. health: HEALTH_OK
  13. services:
  14. mon: 1 daemons, quorum nodel
  15. mgr: nodel(active, starting)
  16. osd: 3 osds: 3 up, 3 in
  17. data:
  18. pools:0 pools, 0 pgs
  19. objects: 0 objects, OB
  20. usage:3.01GiB used, 12.0GiB/ 15.0GiB avail
  21. pgs:
  22. #4.打开dashboard模块:
  23. [cephu@node1 ~]$ sudo ceph mgr module enable dashboard
  24. #5.绑定开启dashboard模块的ceph-mgr节点的ip地址:
  25. [cephu@node1 ~]$ sudo ceph config-key set mgr/dashboard/node1/server_addr 192.168.153.136
  26. set mgr/dashboard/node1/server_addr
  27. #ip地址为mgr节点的ip地址,也就是node1的ip地址
  28. #6.web登录:浏览器地址栏输入:
  29. mgrip地址:7000

配置客户端使用

配置客户端使用rbd:
#创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行—也就是规划好的node1节点
1.创建存储池:

  1. [cephu@nodel ~]$ sudo ceph osd pool create rbd 128 128
  2. pool "rid" created

2.初始化存储池

  1. [cephu@nodel ~]$ sudo rbd pool init rbd

3.准备客户端client:客户端操作

另备一台主机,系统centos7用来作为client。主机名为client,ip:192.168.153.135。修改
hosts文件实现和admin节点的主机名互通。

3.1.升级client内核到4.x,方法在子目录中
Centos7升级内核
更新前,内核版本为:
[root@ceph-client ~]# uname -r
3.10.0-693.e17.x86_64
升级方法:导入key:
[root@ceph-client ~]# rpm —import https://www.elrepo. org/RPM-GPG-KEY-e1repo.org

3.2.安装elrepo的yum源:
[root@ceph-c1ient ~]# rpm -Uvh http: //www.elrepo.org/elrepo-re1ease-7.0-2.e17.e1repo.noarch.rpm
查看可用的系统内核包
[root@ceph-client ~]#yum —disablerepo=”*” —enablerepo=”elrepo-kernel” list
available

3.3安装内核:当前内核为最新5.6,也可以安装4版本的内核
[root@ceph-client ~]# yum —enablerepo=elrepo-kernel install kernel-ml-devel kernel-ml -y
#当前为5.6.7版本
Dependencies Resolved

查看内核默认启动顺序
[root@ceph-client ~]# awk -F\’ ‘$1==”menuentry “ {print $2}’ /etc/grub2.cfg
Centos Linux (5.6.7-1.e17.e1repo.x86_64)7 (Core)
Centos Linux (3.10.0-693.e17.x86_64) 7 (Core)
Centos Linux (0-rescue-8c5f0e6ef af047c5a0b72fdd72ee6575)7 (Core)

默认启动的顺序是从0开始,新内核是从头插入(目前位置在0,而5.6.7的是在1),所以需要选择0。
[root@ceph-client ~]# grub2-set-default 0

然后reboot重启,使用新的内核, 下面是重启后使用的内核版本:
[root@ceph-client ~]# reboot
[root@ceph-client ~]# uname -r
5.6.7-1.e17.e1repo.x86_64

4.删除旧的内核

[root@ceph-client ~]# yum remove kernel -y

5.为client安装ceph:
[root@ceph-client ~]# yum -y install python-setuptools #还要做着一步否则报错
5.1.参考安装ceph集群2-5步
5.2.参考部署ceph集群中的第3步—安装安装1uminous-12.2.13的第2种方式手动安装ceph
5.2.1.安装epel源
[root@ceph-client ~]# yum install -y epel*
5.2.2。创建ceph源

  1. [root@ceph-client ~]# vim /etc/yum.repos.d/ceph.repo
  2. [Ceph]
  3. name=Ceph packages for Sbasearch
  4. baseur1=http://mirrors.aliyun.com/ceph/rpm-1uminous/e17/Sbasearch
  5. enabled=1
  6. gpgcheck=0
  7. type=rpm-md
  8. gpgkey=https ://mirrors.aliyun.com/ceph/keys/release.asc
  9. priority=1
  10. [Ceph-noarch]
  11. name=Ceph noarch packages
  12. baseur1=http://mirrors.aliyun.com/ceph/rpm-1uminous/e17/noarch
  13. enabled=1
  14. gpgcheck=0
  15. type=rpm-md
  16. gpgkey=https://mirrors.aliyun. com/ceph/keys/release.asc
  17. priority=1
  18. [ceph-source]
  19. name=Ceph source packages
  20. baseur1=http://mi rrors.aliyun.com/ceph/rpm-1uminous/e17/SRPMS
  21. enabled=1
  22. gpgcheck=0
  23. type=rpm-md
  24. gpgkey=https://mirrors.aliyun. com/ceph/keys/re1ease.asc
  25. priority=1
  26. [root@ceph-client ~]# vim /etc/yum.conf#开启yum缓存
  27. keepcache=1
  28. [root@ceph-client ~]# yum clean all
  29. [root@ceph-client ~]# su - cephu
  30. [cephu@ceph-client ~]$ sudo yum install ceph ceph-radosgw -y
  31. [cephu@ceph-client ~]$ ceph --version
  32. ceph version 12.2.13 (584a20eb0237c657dc0567 da126be145106aa47e) luminous(stable)

6.在admin节点赋予client使用命令免用户名权限:

  1. [cephu@admin my-cluster]$ ceph-deploy admin ceph-client

7.修改c1ient下该文件的读权限:

  1. [cephu@ceph-client ~]$ sudo chmod +r /etc/ceph/ceph. client.admin.keyring

8.修改c1ient下的ceph配置文件:这一步是为了解决映射镜像时出错问题

  1. [cephu@ceph-client ~]$ sudo vi /etc/ceph/ceph.conf#在g1obal section下添加:
  2. rbd_default_features = 1

9.client节点创建块设备镜像:单位是M,这里是4个G

  1. [cephu@ceph-client ~]$ rbd create foo --size 4096

10.client节点映射镜像到主机:

  1. [cephu@ceph-client ~]$ sudo rbd map foo --name client.admin /dev/rbd0

11.client节点格式化块设备:

  1. [cephu@ceph-client ~]$ sudo mkfs.ext4-m0 /dev/rbd/rbd/foo

12.client节点mount块设备:

  1. [cephu@ceph-client ~]$ sudo mkdir /mnt/ceph-b1ock-device#创建挂载点
  2. [cephu@ceph-client ~]$ sudo mount /dev/rbd/rbd/foo /mnt/ceph-b1ock-device#挂载
  3. [cephu@ceph-client ~]$ cd /mnt/ceph-b1ock-device
  4. [cephu@ceph-client ~]$ ceph-block-device]$ sudo touch a.txt

客户端重起之后,设备需要重新作映射,不然可能会卡死

错误整理

问题一 ImportError: No module named pkg_resources
[cephu@centos7u31 my-cluster]$ ceph-deploy new node1
Traceback (most recent call last):
File “/bin/ceph-deploy”, line 18, in
from ceph_deploy.cli import main
File “/usr/lib/python2.7/site-packages/ceph
deploy/cli.py”, line 1, in

import pkg_resources
ImportError: No module named pkg_resources

重新安装python的distribution:
下载distribution : https://pypi.python.org/pypi/distribute
distribution下载地址:
https://files.pythonhosted.org/packages/5f/ad/1fde06877a8d7d5c9b60eff7de2d452f639916ae1d48f0b8f97bf97e570a/distribute-0.7.3.zip

  1. cd distribution-0.7.3/
  2. sudo python setup.py install

问题二[ERROR ] admin_socket: exception getting command descriptions: [Errno 2]such file or dir

  1. vi /etc/ceph/ceph.conf
  2. 添加
  3. public_network=192.168.122.0/24
  4. 推送
  5. ceph-dep1oy --overwrite-conf config push admin nodel node2 node3

https://blog.csdn.net/zhydream77/article/details/81041767

问题三 [nodel] [ERROR ] no valid command found; 10 closest matches:
ceph-deploy mon create-initial的时候
原因:第一次在做的时候没有修改主机名是就生成了公私钥,结果拷贝的公钥有问题,在问题二推送配置的时候,排查后发现主机名的问题。
之后初始化mon的时候出错,排错两个小时,差点怀疑人生的时候突然发现,想起主机名的事情,就检查了
以下公私钥,结果发现生成的公私钥是以原主机名生成的,删除后生成新的公私钥,传送公钥后,还是失
败。
但是感觉已经找到了问题所在,继续排查,到node1查看日志发现,地址被占用,平复以下自己激动的心,
然后冷静的杀掉进程,重新初始化OK

问题四: RuntimeError: command returned non-zero exit status:2
ceph-deploy osd create —data /dev/vdc node3 的时候
[nodel] [WARNIN] ceph-volume 1vm create: error: GPT headers found, they must be
removed on:/dev/vdb
[nodel] [ERROR ]RuntimeError: command returned non-zero exit status:2
[ceph_deploy.osd][ERROR ] Failed to execute command: /usr/sbin/ceph-vo1ume
cluster ceph 1vm create —bluestore —data /dev/vdb
[ceph_deploy][ERROR ] GenericError: Failed to create 1 OSDs

千万不要分区,然后重新加磁盘,重新做
文档说加上参数也可以但是
ceph-deploy osd create —data /dev/vdc —fs-type xfs node3 不行

[cephu@nodel ~]$ sudo ceph auth get-or-create mgr.nodel mon “allow profile mgr” osd “allow “ mds “allow
[mgr.nodel]
key = AQD8HPdcmntqJRAA1Z3Aei a1qq0nVcdcg+axqQ==

问题:rdbmap出错rbd sysfs write failed创建了一个rbd镜像
$ rbd create —size 4096 dockertest
然后,在Cephclient端将该rbd镜像映射为本地设备时出错。
$ rbd map docker_test —name client.admin
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by
the kernel with “rbd feature disable”.
In some cases useful info is found in syslog - try”dmesg I tail”or so.
原因:
rbd镜像的一些特性,0S kerne1并不支持,所以映射失败。我们查看下该镜像支持了哪些特性。
$ rbd info docker_test
rbd image “docker_test”:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix:rbd_data.43702ae8944a
format:2
features: layering, exclusive-lock, object-map, fast-diff, deep-
flatten
flags:
可以看到特性feature一栏,由于我os的kerne1只支持Tayering,其他都不支持,所以需要把部分
不支持的特性disable掉。
方法一:直接diable这个rbd镜像的不支持的特性:
$ rbd feature disable docker
test exclusive-1ock object-map fast-diff deep-flatten
方法二:创建rbd镜像时就指明需要的特性,如:
$ rbd create —size 4096 docker test —image-feature layering
方法三:如果还想一劳永逸
那么就在执行创建rbd镜像命令的服务器中,
修改Ceph配置文件/etc/ceph/ceph.conf,
在global section下,增加rbd
default_features=1
再创建rdb镜像。
$ rbd create —size 4096 docker_test
通过上述三种方法后,查看rbd镜像的信息。
$ rbd info docker_test
rbd image “docker_test”:
size 4096 MB in 1024 objects
order 22 (4096 kB objects)
block_name_prefix:rbd_data.43a22ae8944a
format:2
features: layering
flags:

再次尝试映射rdb镜像到本地块设备,成功!
$ rbd map docker_test —name client.admin /dev/rbd0

问题:[cephu@client ~]$ sudo rbd map docker_test —name cli ent.admin
rbd: sysfs write failed
In some cases useful info is found in syslog - try”dmesg I tail”.
rbd:map failed:(110) Connection timed out
解决方案:
[cephu@client~]$
sudo ceph osd crush tunables hammer
adjusted tunables profile to hammer
然后重新
[cephu@client ~]$ sudo rbd map docker_test —name client.admin /dev/rbd0

问题1:
2.3步骤中,如果由于网速太慢,可以如下操作
由于网速慢的问题,安装并不会成功。之所以仍进行这一步,只因执行过了该命令就会自动创建相应文件
夹。在进入各个节点手动安装的时候,才能把下载的不成功的包放到正确的目录下,这样,手动安装使用
yum命令才会成功。之后进入每个节点执行安装。
以node1为例:
先从https://down1oad.ceph.com/ rpm-1uminous/e17/x86_64/ 下载所有最有最新版本的rpm包到本地
之后使用secure she11 client上传到nodel的/var/cache/yum/x86_64/7 /ceph/packages/文件夹下,然后安装ceph:
$ ssh nodel
$ sudo yum install -y epel-release ceph ceph-radosgw
虽然所有安装包都在相应的目录中了,但仍可能不成功,这个时候只需要再次重新把安装包放到对应目录后再执行该命令就成功了,原因不明。
问题2:2.3步骤中如果开启防火墙需要做如下操作
设置防火墙(由于node1既是mon节点又是osd节点,所以要添加下面两个规则。其他节点只开启ceph服务
即可):
$ sudo firewall-cmd —zone=public —add-service=ceph-mon —permanent //该规则仅在mon节点执行,如果不添加就不能在其他osd上进行一些查询操作
$ sudo firewall-cmd —zone=public —add-service=ceph —permanentsudo