侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 64 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

分布式存储Ceph技术

zyixin
2022-07-29 / 0 评论 / 0 点赞 / 2,265 阅读 / 8,263 字
温馨提示:
本文最后更新于 2022-07-29,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

分布式存储介绍

大规模分布式存储系统的定义如下:
“分布式系统是大量普通的PC通过网络互联,对外提供一个整体的存储服务”

分布式存储系统有以下的特性:
可扩展性:分布式存储系统可以扩展到几百台的集群规模,而且随着集群规模的增长,系统的整体性能呈线性增长;
低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机器上,另外,线性扩展的能力也使得增加、减少机器非常的方便,可以实现自动运维;
高性能:无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能;
易用:分布式存储系统需要对外提供易用的接口,另外,也要求具备完善的运维、监控工具,并可以方便的和系统进行集成。

分布式存储系统的主要挑战在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库,如下所示:

数据分布:如何将数据分布到多台机器上并保证数据分布均匀?数据分布到多台服务器之后如何实现跨服务器读写操作? 一致性:如何将数据的多个副本复制到多台服务器,即使在异常的清空下,也能够保证数据在不同副本之间的一致性 容错:如何检测到服务器故障?如何自动将出现故障的机器上的数据和服务迁移到别的机器上?
负载均衡:新增服务器和集群正常运行的过程中如何实现自动负载均衡?数据迁移的过程中如何保证不影响已有的服务?
事务和并发控制:如何设计对外接口使得系统更容易使用?如何设计监控系统并将系统的内部系统状态以方便的形式暴露给运维人员?
压缩、解压缩算法:如何根据数据的特点设计合理的压缩和解压缩算法?如何平衡压缩算法节省的空间存储和对CPU资源的消耗?

存储

分类
	本地存储
		系统级文件系统 ext4 xfs ntfs
	
	网络存储
		网络级文件系统 共享的都是文件系统
			nfs				网络文件系统
			hdfs			分布式网络文件系统
			glusterfs		分布式网络文件系统
			
		共享的是裸设备
			块存储 cinder ceph(块存储 对象存储 网络文件系统-分布式)
			SAN(存储区域网)
	
	分布式
		集群
		
						client
						   |
						namenode		元数据服务器
						   |
			--------------------------------
			|              |               |
		  datanode       datanode        datanode

分布式存储种类及其对比

Hadoop HDFS(大数据分布式文件系统)
Hadoop分布式文件系统(HDFS)是一个分布式文件系统,适用于商用硬件上高数据吞吐量对大数据集的访问的需求。

该系统仿效了谷歌文件系统(GFS),数据在相同节点上以复制的方式进行存储以实现将数据合并计算的目的。

该系统的主要设计目标包括:容错,可扩展性,高效性和可靠性。

HDFS采用了MapReduce,不迁移数据而是以将处理任务迁移到物理节点(保存数据)的方式降低网络I/O。HDFS是Apache Hadoop的一个子项目并且安装Hadoop。

Openstack的对象存储Swift

Openstack Swift提供了一个类似Amazon S3的对象存储。其主要特点为:
1.所有的存储对象都有自身的元数据和一个URL,这些对象在尽可能唯一的区域复制3次,而这些区域可被定义为一组驱动器,一个节点,一个机架等。
2.开发者通过一个RESTful HTTP API与对象存储系统相互作用
3.对象数据可以防止在集群的任何地方
4.在不影响性能的情况下,集群通过增加外部节点进行扩展,这是相对全面升级,性价比更高的近线存储扩展。
5.数据无需迁移到一个全新的村粗系统。
6.集群可无宕机增加新的节点。
7.故障节点和磁盘可无宕机调换。
8.在标准硬件上运行,例如戴尔,HP和Supermicro。

公有云对象存储
公有云大都只有对象存储。例如:谷歌云存储是一个快递,具有可扩展性和高可用性的对象存储。而且云存储无需一种模式也就是图像,视频文件就可以存储海量数据。

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

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

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

Facebook用于图片存储的Haystack
Facebook Haystack拥有大量元数据,适用于图片的对象存储,采用每张图片一个文件的方式取代NFS文件系统。
http://cse.unl.edu/-ylu/csce990/notes/HayStack_Facebook_ShakthiBchala.ppt

此外,Facebook着眼于长尾服务,因此传统缓存和CDN(内容发布网络)的表现并不甚佳。一般正常的网站有99%CDN点击量,但Facebook只有约80%CDN点击率。

f4:Facebook的暖性BLOB存储
Haystack最初是用于Facebook图片应用的主要存储系统。到2016年已有8年的历史。
这期间它通过比如减少磁盘数设法读取一个BLOB到1,跨地理位置通过复制(3个复制因子即文件副本数)实现容错等更多优化而运行良好。在此期间Facebook虽然服务良好但依然进行了演变。
截至2014年2月,Haystack存储了约4000亿张图片。
https://www.usenix.org/system/files/conference/osdi14/osdi14-paper-muralidhar.pdf
目前,f4存储了超过65PB的本地BLOB,而且将其有效复制因子从3.6降低到任意2.8或2.1。
f4提供低延迟,可以恢复磁盘,主机,机柜和数据中心故障并为暖性BLOB提供足够的吞吐量。
ps: f4仅存储"暖性"图片

Openstack块存储Cinder
Openstack(类似商业云)还可以作为一个Linux访问的文件系统提供传统块存储。Cinder能虚拟化块存储设备池并向需要和消费这些资源的终端用户提供一个自助服务API,而无需了解块存储部署的实际位置或是存储设备的类型。

Openstack Cinder类似于亚马逊EBS(Elastic Block Storage)和微软Azure files以及谷歌Persistent Storage。

Lustre
Lustre是一个并行分布式文件系统,通常用于大规模集群计算。它的名字取自Linux和cluster(集群)的组合词。
Lustre文件系统软件遵循GPL2认证协议并为(各类规模)计算机集群提供高性能文件系统。
因为Lustre文件系统拥有高性能的能力和开发式认证,所以经常应用于超级计算机。
Lustre文件系统具有可扩展性,可支持在数百台服务器上配置数万客户端节点,PB级容量的多个计算机集群,并超出TB级聚合I/O吞吐量。
这让Lustre文件系统受到拥有大型数据中心企业的青昧,其中也包括例如气息,虚拟,石油天然气,生命科学,多功能媒体和金融行业。Lustre曾辗转过几家企业,最近的三个所有者(时间先后排序)依次为甲骨文,Whamcloud和英特尔。

Gluster

http://www.gluster.org/http://en.wikipedia.org/wiki/Giuster
GlusterFS遵循Infiniband RDMA或TCP/IP协议创建块集中存储,在单一全局命名空间内集中磁盘和内存资源并管理数据。
对于公有云部署,GlusterFS提供了一个AWS AMI(亚马逊机器镜像)。它不是在物理服务器上部署,而是在Elastic Compute Cloud(EC2)实例上部署,并且底层存储空间是Amazon的Elastic Block Storage(EBS)。
在这样的环境里,容量通过部署更多EBS存储设备进行扩展,性能则通过部署更多EC2实例进行增强,而可用性通过AWS可用区域之间进行多方复制来提示。

FUSE(Filesystem in Userspace 用户空间文件系统)

FUSE GPL/LGPL 认证是一个操作系统机制,针对类Unix计算操作系统,让用户无需编辑内核代码即可构建自身文件系统。这虽然是通过在用户空间内运行文件系统代码实现,但FUSE模块仅提供了一个到达真正内核接口的一架"桥梁"。
FUSE最初是作为一个可加载的核心模块来实现的,通过GlusterFS使用,尤其适用于编写虚拟文件系统。但与传统文件系统,尤其是可存储数据和从磁盘上检索数据的系统不同,虚拟文件系统检索实际上无法存储自身数据。它们充当一个现有文件系统或存储设备的试图或翻译。

Ceph

Ceph是红帽的,Ceph是一个遵循LGPL协议的存储平台,它可以在单个分布式节点上同时支持对象存储,块存储和文件存储。

Ceph主要设计的初衷是变成一个可避免单节点故障的分布式文件系统,EB级别的扩展能力,而且是一种开源自由软件,许多超融合的分布式文件系统都是基于Ceph开发的,作为开源软件在超融合商业领域的应用,Ceph因为性能等问题被诟病,但不乏许多厂商在Ceph上不断优化和努力。

IBM General Parallel File System(GPFS通用并行文件系统)
这个专有GPFS是一个由IBM开发的高性能集群文件系统,它可以在共享磁盘或非共享分布式并行模式中进行部署。
GPFS-SNC,其中SNC代表Shared Nothing Cluster(非共享集群),它是2012年12月正式发布的GPFS 3.5版本,如今被称为GPFS-FPO(文件配置优化)。这让GPFS可以在一个联网服务器的集群上采用本地连接磁盘,而不需要配置共享磁盘的专用服务器(例如使用SAN),GPFS-FPO可充当HDFS兼容的文件系统。
GPFS时常通过调用计算集群上的MPI-IO(Message Passing Interface)进行访问。功能包括:

分布式元数据处理。包括目录树。没有单独的"目录控制器"或"索引服务器"管理文件系统。
对非常大的目录进行高效索引目录项。很多文件系统被限制在单一目录(通常,65536或类似的小二进制数)中的少数文件内,而GPFS并没有这样的限制。
分布式锁定。该功能考虑了完整的Posix文件系统语义,包括锁定文件进行独占访问。

Global Federated File System(GFFS全局联合文件系统)
XSEDE文件系统在美国弗吉尼亚大学Genesis II项目的一部分。
GFFS的出现是源于一个对诸如文件系统的资源以一种联合,安全,标准化,可扩展和透明化的方式进行访问和远程操作的需求,而无需数据所有者或应用程序开发者和用户改变他们存储和访问数据的任何方式。
GFFS通过采用一个全局基于路径的命名空间实现,例如/data/bio/files1
在现有文件系统中的数据,无论它们是否是Windows文件系统,MacOS文件系统,AFS,Linux或Lustre文件系统都可以导出或链接到全局命名空间。
例如:一个用户可以将它"C盘"上一个本地根目录结构,C:\work\collaboration-with-Bob导出到全局命名空间,/data/bio/project-Phil,那么用户"C盘\work\collabovation-with-Bob"内的文件和目录将会受到访问限制,用户可以通过/data/bio/project-Bob路径在GFFS上访问。

最后谈一下,最常见的GPFS和HDFS有什么区别?
GPFS和Hadoop的HDFS系统对比起来相当有趣,它设计用于在商用硬件上存储类似或更大的数据——换言之就是,不配置 RAID 磁盘的数据中心和一个SAN。

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

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

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

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

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

说到分布式文件系统,不得不提到许多超融合厂商,一部分是基于Ceph的,还有一部分是完全自主研发的。

为什么要用Ceph?

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

Ceph存储种类及其应用场景

块存储

典型设备:磁盘阵列,硬盘

主要是将裸磁盘空间映射给主机使用的

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

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

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

文件存储


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

优点:
造价低,随便一台机器就可以了。
方便文件共享。

缺点:
读写速率低。
传输速率慢。

使用场景:
日志存储。
有目录结构的文件存储。

对象存储

为什么需要对象存储?

首先,一个文件包含了属性(术语叫metadata,元数据,例如该文件的大小、修改时间、存储路径等)以及内容(以下简称数据)。

例如FAT32这种文件系统,存储过程是链表的形式。

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

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

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

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

典型设备:内置大容量硬盘的分布式服务器(Swift,S3)
多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问速度。

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

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

Ceph 工作原理及集群部署

Ceph数据的存储过程

如下图:

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

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

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

对象时如何映射进PG的?还记得OID么?首先使用静态hash函数对OID做hash取出特征码,用特征码与PG的数量去模,得到的序号则是PGID。由于这种设计方式,PG的数量多寡直接决定了数据分布的均匀性,所以合理设置的PG数量可以很好的提升CEPH集群的性能并使数据均匀分布。

最后PG会根据管理员设置的副本数量进行复制,然后通过crush算法存储到不同的OSD节点上(其实是把PG中的所有对象存储到节点上),第一个osd节点即为主节点,其余均为从节点。

名词介绍

Ceph核心组件及概念介绍

Monitor
一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。

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

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

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

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

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

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

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

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

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

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

部署ceph集群

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

目录:
部署luminous(ceph12.2.10的版本代号)
配置dashboard
客户端使用rbd

===========================================================

部署环境
系统版本:Centos7.5
ecph版本:ceph 12.2.10 (luminous)
硬件版本:5台vm,1核1G内存,每台node角色的机器至少挂载1块为osd准备的空闲盘

主机名				ip						role
admin			192.168.160.15			admin
node1			192.168.160.16			mon/mgr/osd
node2			192.168.160.17			osd
node3			192.168.160.18			osd
client			192.168.160.20

====================================================================

1 准备工作
1.1 开启网络(所有节点,root用户)
1.2 修改主机名/互相解析(所有节点,root用户)
1.3 创建用户(所有节点,root用户)
	在所有节点上执行如下操作:
	1)创建用户名:cephu,设置密码
	# useradd cephu
	# passwd  cephu
	
	2)修改visudo文件,否则提示cephu不再sudoer列表中的错误
	命令行输入visudo,在root ALL=(ALL) ALL下面添加
	cephu ALL=(ALL) ALL
	
	3)切换至ceph用户,为该用户增加root权限
	$ echo "cephu ALL=(root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/cephu
	$ sudo chmod 0440 /etc/sudoers.d/cephu

1.4 实现ssh无密码登录(admin节点)
	1)cephu用户下,生成密钥:
		$ ssh-keygen
	2)cephu用户下,把生成的密钥拷贝到各ceph节点:
		$ ssh-copy-id cephu@node1
		$ ssh-copy-id cephu@node2
		$ ssh-copy-id cephu@node3
	3)root用户下,添加~/.ssh/config配置文件,并进行如下设置:
		Host node1
		Hostname node1
		User cephu
		
		Host node2
		Hostname node2
		User cephu
		
		Host node3
		Hostname node3
		User cephu
		
1.5 添加下载源,安装ceph-deploy (admin节点,root用户)
	1)添加ceph源:
		# cat >/etc/yum.repos.d/ceph.repo
		[ceph-noarch]
	name=Ceph noarch packages
	baseurl=https://download.ceph.com/rpm-luminous/e17/noarch
	enabled=1
	gpgcheck=1
	type=rpm-md
	gpgkey=https://download.ceph.com/keys/release.asc
		
	ctrl + d 保存
	
	2)更新源,安装ceph-deploy
		# sudo yum makecache
		# sudo yum update
		
		# vim /etc/yum.conf
			keepcache=1
		
		# sudo yum install ceph-deploy -y
		
1.6 设置TTY (所有节点)
	注意:此设置由官方文档指出,但是并未在这里找不到此配置行,不用做此步
	# sudo visudo 找到 Defaults requiretty 注释掉

1.7 关闭selinux(所有节点)

1.8 安装ntp (所有节点)
	选择任何一台机器当ntp时间服务器,其他的节点当时间服务器的客户端跟服务器同步时间
	
	admin上:
	# yum -y install ntp
	# vim /etc/ntp.conf 		//有4行server的位置,把那4行server行注释掉,填写以下两行
	server 127.127.1.0			#local clock
	fudge 127.127.1.0 stratum 10
	
	# systemctl start ntpd
	# systemctl status ntpd		//确认打开NTP服务
	
	其他所有节点:
	# yum install ntpdate -y
	# ntpdate 时间服务器ip
=====================================================
2 部署ceph集群
没有特别说明以下所有操作均是在admin节点,cephu用户下执行

2.1 创建cephu操作目录:
	$ mkdir my-cluster			//切记不可以sudo创建
	$ cd my-cluster				//之后,所有ceph-deploy命令操作必须在该目录下执行
	
2.2 创建集群:
	$ ceph-deploy new node1
	创建成功会有三个文件:ceph.conf, ceph.mon.keyring, and a log file
	
2.3 安装luminous(12.2.9)
	目标:在node1,node2,node3三个节点上安装ceph和ceph-radosgw主包
	
	方法1:利用官方脚本全自动安装
	脚本会帮助node1,node2,node3创建epel源和ceph源,并且自动安装ceph和ceph-radosgw主包
	$ ceph-deploy install --release luminous node1 node2 node3
	这一步实际上是给3个节点安装两个软件,如果ceph和ceph-radosgw安装不上,则采用方法2
	在做实验要注意epel的源(切记)
	
	测试是否安装完成:分别在node1 node2 node3中确认安装版本为12.2.9
	$ ceph --version
	
	方法2:手动安装部署
	1)安装epel源
	2)创建Ceph源,内容如下:
	[Ceph]
	name=Ceph packages for $basearch
	baseurl=http://download.ceph.com/rpm-luminous/e17/$basearch
	enabled=1
	gpgcheck=1
	type=rpm-md
	gpgkey=https://download.ceph.com/keys/release.asc
	priority=1
	
	[Ceph-noarch]
	name=Ceph noarch packages
	baseurl=http://download.ceph.com/rpm-luminous/e17/noarch
	enabled=1
	gpgcheck=1
	type=rpm-md
	gpgkey=https://download.ceph.com/keys/release.asc
	priority=1
	
	[ceph-source]
	name=Ceph source packages
	baseurl=http://download.ceph.com/rpm-luminous/e17/SRPMS
	enabled=1
	gpgcheck=1
	type=rpm-md
	gpgkey=https://download.ceph.com/keys/release.asc
	priority=1
	
	3)分别在node1,node2,node3节点执行下面命令安装软件,可以完全手动安装,但需要yum的ceph缓存目录结构
	$ sudo yum install ceph ceph-redosgw -y
	如果因为速度慢导致安装失败可以按ctrl+c,利用它创建的yum缓存目录,手动把安装包下载下来保存到缓存目录/var/cache/yum/x86_64/Ceph/packages目录下
	
	再次执行安装命令:
	$ sudo yum install -y ceph ceph-radosgw
	
	分别在node1,node2,node3中确认安装版本为12.2.1
	$ ceph --version
	
2.4 初始化mon:
	$ ceph-deploy mon create-initial
	
2.5 赋予各个节点使用命令免用户名权限:
	$ ceph-deploy admin node1 node2 node3
	
2.6 安装ceph-mgr: 只有luminous才有,为使用dashboard做准备
	$ ceph-deploy mgr create node1
	
2.7 添加osd:
	注意:各个节点上提供存储空间的磁盘大小不能太小,最好5G以上
	
	$ ceph-deploy osd create --data /dev/sdb node1 (12.2.10版本是这条命令,分开给各节点安装)
	$ ceph-deploy osd create --data /dev/sdb node2
	$ ceph-deploy osd create --data /dev/sdb node3
	
	命令中/dev/sdb是在各个节点上为osd准备的空闲磁盘(无需分区格式化,如果有分区需要指定具体分区),通过如下命令查看:
	$ ssh node1 lsblk -f
	
	最后通过如下命令查看集群状态:
	$ ssh node1 sudo ceph -s
	如果显示health_ok,3个osd up就成功了
	
==============================================================
3 Dashboard的配置:在node1上操作
把ceph-mgr和ceph-mon安装在同一个主机上,最好只有一个ceph-mgr

3.1 创建管理域密钥:
	$ sudo ceph auth get-or-create mgr.node1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
	
3.2 开启 ceph-mgr 管理域:
	$ sudo ceph-mgr -i node1
	
3.3 查看ceph的状态:
	$ sudo ceph status
	确认mgr的状态为active
	
3.4 打开dashboard模块:
	$ sudo ceph mgr module enable dashboard
	
3.5 绑定开启dashboard模块的ceph-mgr节点的ip地址:
	$ sudo ceph config-key set mgr/dashboard/node1/server_addr 192.168.160.16
	ip地址为mgr节点的ip地址
	
3.6 web登录:
	浏览器地址栏输入:
		mgr地址:7000
============================================
4 配置客户端使用rbd:
创建块设备之前需要创建存储池,存储池相关命令需要在mon节点执行

4.1 创建存储池:
	$ sudo ceph osd pool create rbd 128 128

4.2 初始化存储池:
	$ sudo rbd pool init rbd
	
4.3 准备客户端client:
	另备一台主机,系统centos7用来作为client。主机名为client,ip: 192.168.160.15 修改hosts文件实现和admin节点的主机名互通。
1)升级client内核到4.x,方法在子目录中
Centos7升级内核
更新前,内核版本为:
	# uname -r
	3.10.0-327.10.1.e17.x86_64
	
	
升级方法
导入key:
	# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
	
安装elrepo的yum源:
	# rpm -Uvh http://www.elerpo.org/elrepo-release-7.0-2.e17.elrepo.noarch.rpm
	
安装内核:
	# yum --enablerepo-elrepo-kernel install kernel-ml-devel kernel-ml
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
当前4.4.4:
===========================================================================
Package			架构			版本				源			大小
===========================================================================
正在安装:
kernel-ml		x86_64		4.4.4-1.e17.elrepo elrepo-ketnel 	38M
kernel-ml-devel  x86_64		4.4.4-1.e17.elrepo elrepo-kernel	10M

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

	查看默认启动顺序
	# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
	CentOS Linux (4.4.4-1.e17.elrepo.x86_64) 7 (Core)
	CentOS Linux (3.10.0-327.10.1.e17.x86_64) 7 (Core)
	CentOS Linux (0-rescue-c52097a1078c403da038eddeac5080b) 7 (Core)
	
	默认启动的顺序是从0开始,新内核是从头插入(目前位置再0,而4.4.4的是在1),所以需要选择0
	# grub2-set-default 0
	
	然后reboot重启,使用新的内核,下面的重启后使用的内核版本:
	# uname -r
	4.4.4-1.e17.elrepo.x86_64
	
5 删除旧的内核
	# yum remove kernel
	
2)为client安装ceph:
 参考2.3			在做2.3之前现在client上做1.3的三步
 还要做着一步 否则报错 
 # yum -y install python-setuptools
 
3)配置client防火墙(直接关闭):
$ sudo firewalld-cmd --zone=public --add-service=ceph --permanent
$ sudo firewalld-cmd --reload

4)在admin节点赋予client使用命令免用户名权限:
	$ ceph-deploy admin client
	
5)修改client下该文件的读权限:
	$ sudo chmod +r /etc/ceph/ceph.client.admin.keyring
	
6)修改client下的ceph配置文件:这一步是为了解决映射镜像时出错问题
	$ sudo vi /etc/ceph/ceph.conf		在global section下添加:
	rbd_default_features = 1
	
4.4 client节点创建块设备镜像:单位是M,这里是4个G
	$ rbd create foo --size 4096
	
4.5 client节点映射镜像到主机:
	$ sudo rbd map foo --name client.admin
	
4.6 client节点格式化块设备:
	$ sudo mkfs.ext4 -m 0 /dev/rbd/rbd/foo
	
4.7 client节点mount块设备:
	$ sudo mkdir /mnt/ceph-block-device
	$ sudo mount /dev/rbd/rbd/foo /mnt/ceph-block-device
	$ cd /mnt/ceph-block-device
	
客户端重启之后,设备需要重新做映射,不然可能会卡死
0

评论区