分布式存储-ceph

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

官网:https://ceph.com/java

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

  1. Ceph特色
    高性能:

1) 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。python

2) 考虑了容灾域的隔离,可以实现各种负载的副本放置规则,例如跨机房、机架感知等。linux

3) 可以支持上千个存储节点的规模,支持TB到PB级的数据。web

高可用性:算法

1) 副本数能够灵活控制。shell

2) 支持故障域分隔,数据强一致性。编程

3) 多种故障场景自动进行修复自愈。vim

4) 没有单点故障,自动管理。后端

高可扩展性:

1) 去中心化。

2) 扩展灵活。

3) 随着节点增长而线性增加。

特性丰富:

1) 支持三种存储接口:块存储、文件存储、对象存储。

2) 支持自定义接口,支持多种语言驱动。

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

1> Ceph是一个高性能、可扩容的分布式存储系统,它提供三大功能:

对象存储(RADOSGW):提供RESTful接口,也提供多种编程语言绑定。兼容S三、Swift;

块存储(RDB):由RBD提供,能够直接做为磁盘挂载,内置了容灾机制;

文件系统(CephFS):提供POSIX兼容的网络文件系统CephFS,专一于高性能、大容量存储;

2> 什么是块存储/对象存储/文件系统存储?

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也是属于文件系统存储;

  1. Ceph核心组件
    在这里插入图片描述

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封装原生接口。

  1. Ceph存储系统的逻辑层次结构
    在这里插入图片描述

  2. RADOS的系统逻辑结构
    在这里插入图片描述

  3. Ceph 数据存储过程
    在这里插入图片描述
    在这里插入图片描述

不管使用哪一种存储方式(对象、块、文件系统),存储的数据都会被切分红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,最大程度地实现可扩展

  1. Ceph IO流程及数据分布

在这里插入图片描述
(1)正常IO流程图:
在这里插入图片描述
在这里插入图片描述
步骤:

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

(2)新主IO流程图
在这里插入图片描述
在这里插入图片描述
  说明:若是新加入的OSD1取代了原有的 OSD4成为 Primary OSD, 因为 OSD1 上未建立 PG , 不存在数据,那么 PG 上的 I/O 没法进行,怎样工做的呢?

新主IO流程步骤:

1) client链接monitor获取集群map信息。

2) 同时新主osd1因为没有pg数据会主动上报monitor告知让osd2临时接替为主。临时主osd2会把数据全量同步给新主osd1。

3) client IO读写直接链接临时主osd2进行读写。

4) osd2收到读写io,同时写入另外两副本节点。

5) 等待osd2以及另外两副本写入成功。

6) osd2三份数据都写入成功返回给client, 此时client io读写完毕。

7) 若是osd1数据同步完毕,临时主osd2会交出主角色。

  1. Ceph Pool和PG分布状况
      pool:是ceph存储数据时的逻辑分区,它起到namespace的做用。每一个pool包含必定数量(可配置) 的PG。PG里的对象被映射到不一样的Object上。pool是分布到整个集群的。 pool能够作故障隔离域,根据不一样的用户场景不统一进行隔离。
    在这里插入图片描述

  2. ceph部署
    1> 实验环境

    四台主机192.168.16.6五、.6六、.6八、.69,对应主机名依次为ajy五、ajy六、ajy七、ajy八、ajy9。ajy5为deploy节点,ajy6为controller节点,ajy8位compute节点,ajy9位storeage节点,将ajy六、八、9所有部署mon,同时设置成osd,ajy5运行ceph-deploy。

2> 静态域名解析,四台主机均作

[root@ajy5 ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.65 ajy5
192.168.16.66 ajy6
192.168.16.68 ajy8
192.168.16.69 ajy9

3> 全部的节点都建立普通用户cent,并设置密码,我设置的是123

[root@ajy5 ~]# useradd cent && echo "123" | passwd --stdin cent
Changing password for user cent.

设置每一个节点cent用户都有sudo的权限

[root@ajy5 ~]# echo -e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL' | tee /etc/sudoers.d/ceph
[root@ajy5 ~]# chmod 440 /etc/sudoers.d/ceph

4> 在部署节点切换为cent用户,设置无秘钥登陆各节点,包括客户端节点

[root@ajy5 ~]# su - cent
[cent@ajy5 ~]$ pwd
/home/cent
[cent@ajy5 ~]$ ssh-keygen                  #回车回车回车
[cent@ajy5 ~]$ ssh-copy-id ajy5
[cent@ajy5 ~]$ ssh-copy-id ajy6
[cent@ajy5 ~]$ ssh-copy-id ajy8
[cent@ajy5 ~]$ ssh-copy-id ajy9
[cent@ajy5 ~]$ ssh ajy6
[cent@ajy6 ~]$ exit
logout
Connection to ajy6 closed.
[cent@ajy5 ~]$

5> 在部署节点切换为cent用户,在cent用户家目录,设置以下文件:/.ssh/config

[cent@ajy5 ~]$ ls -a
.  ..  .bash_logout  .bash_profile  .bashrc  .cache  .config  .ssh
[cent@ajy5 ~]$ cd .ssh
[cent@ajy5 .ssh]$ ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[cent@ajy5 .ssh]$ vim config
Host ajy5
      Hostname ajy5
      User cent
Host ajy6
      Hostname ajy6
      User cent
Host ajy8
      Hostname ajy8
      User cent
Host ajy9
      Hostname ajy9
      User cent

修改权限

[cent@ajy5 .ssh]$ chmod 600 ~/.ssh/config

6> 全部的节点配置ceph源

[cent@ajy5 .ssh]$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

使用阿里源(centos7.6版本):https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/
在这里插入图片描述

[root@ajy5 ~]# cd /etc/yum.repos.d/
[root@ajy5 yum.repos.d]# ls
bak                       local.repo.bak    old
Centos7-Base-yunwei.repo  Mariadb.repo.bak  rdo-release-yunwei.repo
epel-yunwei.repo          net.repo.bak
[root@ajy5 yum.repos.d]# vim ceph.repo
[ceph]
name=ceph
baseurl=https://mirrors.aliyun.com/centos/7.6.1810/storage/x86_64/ceph-jewel/
enable=1
gpgcheck=0
[root@ajy5 yum.repos.d]# yum clean all
[root@ajy5 yum.repos.d]# yum makecaceh

因为下载ceph-deploy会跳到外网下载,致使下载失败,一次先将ceph的安装包在本地准备好,而后在本地安装

[root@ajy5 yum.repos.d]# cd
[root@ajy5 ~]# wget http://download2.yunwei.edu/shell/ceph-j.tar.gz
[root@ajy5 ~]# ls
anaconda-ks.cfg  ceph-j.tar.gz  yum-repo.sh
[root@ajy5 ~]# tar xzf ceph-j.tar.gz
[root@ajy5 ~]# ls
anaconda-ks.cfg  cephjrpm  ceph-j.tar.gz  yum-repo.sh
[root@ajy5 ~]# cd cephjrpm
[root@ajy5 cephjrpm]# ls
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

复制代码
7> 在部署节点先安装ceph-deploy

[root@ajy5 cephjrpm]# yum localinstall ceph-deploy-1.5.39-0.noarch.rpm -y
Error: Package: ceph-deploy-1.5.39-0.noarch (/ceph-deploy-1.5.39-0.noarch)
           Requires: python-distribute
           Available: python-setuptools-0.9.8-7.el7.noarch (base)
               python-distribute = 0.9.8-7.el7

配置源有问题,修改rdo的源

[root@ajy5 yum.repos.d]# ls
bak                       epel-yunwei.repo  net.repo.bak
Centos7-Base-yunwei.repo  local.repo.bak    old
ceph.repo                 Mariadb.repo.bak  rdo-release-yunwei.repo
[root@ajy5 yum.repos.d]# mv rdo-release-yunwei.repo bak
[root@ajy5 yum.repos.d]# ls
bak                       ceph.repo         local.repo.bak    net.repo.bak
Centos7-Base-yunwei.repo  epel-yunwei.repo  Mariadb.repo.bak  old
[root@ajy5 yum.repos.d]# cd -
/root/cephjrpm
[root@ajy5 cephjrpm]# yum localinstall ceph-deploy-1.5.39-0.noarch.rpm -y

验证是否安装成功,用ceph本身的命令查看ceph版本

[root@ajy5 cephjrpm]# ceph-deploy --version
1.5.39

ceph-deploy安装完成后将ceph-deploy的安装移除,而后在各节点安装其余全部的安装包,即ceph-deploy只有部署节点ajy5上面安装,其余节点不须要安装

[root@ajy5 cephjrpm]# mv ceph-deploy-1.5.39-0.noarch.rpm ../ #移到上层目录
[root@ajy5 cephjrpm]# yum localinstall ./* -y
[root@ajy6 cephjrpm]# yum localinstall ./* -y
[root@ajy8 cephjrpm]# yum localinstall ./* -y
[root@ajy9 cephjrpm]# yum localinstall ./* -y

8> 部署节点建立ceph的工做目录,配置新集群

[root@ajy5 ~]# su - cent
[cent@ajy5 ~]$ mkdir ceph
[cent@ajy5 ~]$ cd ceph/
[cent@ajy5 ceph]$ pwd
/home/cent/ceph
[cent@ajy5 ceph]$ ceph-deploy new ajy6 ajy8 ajy9        #配置集群,包含三个节点
[cent@ajy5 ceph]$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyring       #生成三个文件
[cent@ajy5 ceph]$ vim ceph.conf                         #编辑主配置文件
[global]
fsid = a5611bfb-b339-43be-b65b-6de3745b86fc             #ceph集群id
mon_initial_members = ajy6, ajy8, ajy9                  #监控节点成员
mon_host = 192.168.16.66,192.168.16.68,192.168.16.69    #监控成员ip
auth_cluster_required = cephx                           #ceph认证的参数
auth_service_required = cephx
auth_client_required = cephx
osd_pool_default_size = 1                               #ceph集群默认保存的副本数,实验环境较差,一个便可
mon_clock_drift_allowed = 2                             #至少两个mon正常的状况下ceph集群是正常的 
mon_clock_drift_warn_backoff = 3                        #每3秒执行一次ceph集群的健康检查
:wq

可选的调优参数有:

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

9> 在部署节点cent用户下,使用ceph命令安装ceph软件

注意 :若安装失败可尝试移除源 rdo 再进行安装

[cent@ajy5 ceph]$ pwd
/home/cent/ceph
[cent@ajy5 ceph]$ ceph-deploy install ajy5      #能够一次性安装全部节点,也能够将各节点分开安装
[ajy5][DEBUG ] Nothing to do                    #第7>步已经提早安装完了全部所需的软件包,这个安装过程会跳到外网安装,因为网络缘由确定会安装失败,所以提早将这些包安装。
[cent@ajy5 ceph]$ ceph-deploy install ajy6
[cent@ajy5 ceph]$ ceph-deploy install ajy8
[cent@ajy5 ceph]$ ceph-deploy install ajy9

安装完成后初始化集群,在部署节点的cent用户下执行

[cent@ajy5 ceph]$  ceph-deploy mon create-initial

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

因为节点ajy6做为OpenStack控制节点内存需求较高,我将sdb硬盘作了swap缓存分区,因此给ajy6节点添加另外一块硬盘sdc

列示节点的磁盘信息

[cent@ajy5 ceph]$ ceph-deploy disk list ajy6
.....
[ajy6][INFO  ] Running command: sudo /usr/sbin/ceph-disk list
[ajy6][DEBUG ] /dev/dm-0 other, xfs, mounted on /
[ajy6][DEBUG ] /dev/dm-1 swap, swap
[ajy6][DEBUG ] /dev/sda :
[ajy6][DEBUG ]  /dev/sda2 other, LVM2_member
[ajy6][DEBUG ]  /dev/sda1 other, xfs, mounted on /boot
[ajy6][DEBUG ] /dev/sdb :
[ajy6][DEBUG ]  /dev/sdb1 swap, swap
[ajy6][DEBUG ] /dev/sdc other, unknown
[ajy6][DEBUG ] /dev/sr0 other, iso9660
......

若想格式化某个磁盘,能够擦净节点磁盘:ceph-deploy disk zap ajy6:/dev/vdb1

准备osd:

在各节点先进行磁盘的文件分区

[root@ajy6 ~]# lsblk
[root@ajy6 ~]# fdisk /dev/sdc
....
Command (m for help): n
Select (default p):
Using default response p
Partition number (1-4, default 1):
First sector (2048-33554431, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-33554431, default 33554431):
Using default value 33554431
Partition 1 of type Linux and of size 16 GiB is set
Command (m for help): p
Disk /dev/sdc: 17.2 GB, 17179869184 bytes, 33554432 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x8146f214
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048    33554431    16776192   83  Linux
Command (m for help): w
The partition table has been altered!
[root@ajy6 ~]# lsblk
......
sdc               8:32   0   16G  0 disk
└─sdc1            8:33   0   16G  0 part
......

准备osd

[cent@ajy5 ceph]$ ceph-deploy osd prepare ajy6:/dev/sdc1
[cent@ajy5 ceph]$ ceph-deploy osd prepare ajy8:/dev/sdb1
[cent@ajy5 ceph]$ ceph-deploy osd prepare ajy9:/dev/sdb1

激活osd(Object Storage Daemon)

[cent@ajy5 ceph]$ ceph-deploy osd activate ajy6:/dev/sdc1 ajy8:/dev/sdb1 ajy9:/dev/sdb1                      #也能够分开写

11> 在部署节点将配置文件发送给每一个节点

[cent@ajy5 ceph]$ ceph-deploy admin ajy5 ajy6 ajy8 ajy9

在每一个节点修改配置文件权限

[root@ajy6 ~]# sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
[root@ajy8~]# sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
[root@ajy9]# sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

12>在集群中的任意节点进行检测

[root@ajy8 ~]# ceph -s

查看osd的分布

[cent@ajy5 ceph]$ ceph osd tree
  1. ceph集群的使用
      若是计算机条件容许,能够在单首创建一台机器用做客户端。

1> 客户端配置cent用户

复制代码
建立cent用户

useradd cent && echo "123" | passwd --stdin cent

赋予sudo权限

echo-e 'Defaults:cent !requiretty\ncent ALL = (root) NOPASSWD:ALL' | tee /etc/sudoers.d/ceph

更改权限

chmod440 /etc/sudoers.d/ceph

复制代码
2> 在部署端ajy5安装车屁股客户端并进行设置。controller表示新添加的客户端节点。

控制节点安装

ceph-deploy install controller

给客户端传配置文件

ceph-deploy admin controller

3> 在客户端修改权限

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
因为本人的物理机配置极低,所以使用几点ajy8做为客户端,不在从新建立客户端节点。

4> 在客户端配置rbd块设备

建立rbd:
rbd create disk01 --size 10G --image-feature layering   

列示rbd,建立完rbd后在任何集群节点均可以看到rbd配置信息,由于rbd块设备使用的是集群的osd提供的空间
rbd ls -l

映射rbd的image map:
sudo rbd map disk01              

显示map:
rbd showmapped

格式化disk01文件系统xfs:
sudo mkfs.xfs /dev/rbd0

挂载硬盘:
sudo mount /dev/rbd0 /mnt

验证是否挂着成功:
df -hT

挂载完成后就可使用fdisk命令操做块设备了,也能够直接使用mkfs .xfs等命令对块设备进行操做。
复制代码
将块设备映射后就至关于一块硬盘,使用方法也与硬盘相同,若不想使用该硬盘,去除该硬盘操做以下:

1) 取消挂载,使用umount命令;

2) 格式化分区,清洗掉元数据;

3) 取消映射:sudo rbd unmap disk01;

4) 删除块设备:rbd rm disk01。

5> 文件系统(File System)配置

在部署节点ajy5选择一个节点ajy建立mds的元数据服务

ceph-deploy mds create node1

在节点上修改权限

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

在ceph集群建立存储池(pool)

ceph osd pool create cephfs_data 128                  #128指的是pg的数量
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

而后再获取认证

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

chmod600 admin.key

以后再挂载,服务器的名字能够指定ceph节点的任意一个节点

mount-t ceph ajy6:6789:/ /mnt -o name=admin,secretfile=admin.key    #挂载在本地,名字为admin,认证为admin.key
df-hT

1) 若不想使用mds,须要以下操做:

2) 中止mds:systemctl stop ceph-mds@node1;

3) 设置mds状态为0:ceph mds fail 0;

4) 删除cephfs中的pool:ceph fs rm cephfs --yes-i-really-mean-it

a) 显示pool:ceph osd lspools;

b) 删除pool:ceph osd pool rm cephfs_metadata cephfs_metadata --yes-i-really-really-mean-it

6> 删除环境

若不想使用ceph,能够将其环境删除。在部署几点切换为cent用户,执行:

1) 删除节点:ceph-deploy purge ajy5 ajy6 ajy8 ajy9;

2) 删除节点数据:ceph-deploy purgedata ajy5 ajy6 ajy8 ajy9;

3) 忘记验证信息:ceph-deploy forgetkeys;

4) 删除全部的ceph文件:rm -rf ceph*。

做者:Ajunyu 出处:http://www.cnblogs.com/shwee/ 转载请注明出处