ceph介绍及配置文件存储


1、概述

Ceph是为了优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统,并且还是一个开源的分布式文件系统。因为其支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储的后端。当然Ceph也可以单独作为存储,例如部署一个集群作为对象存储、SAN存储、NAS存储等。

Ceph 支持三种存储接口:对象存储 RGW(rados gateway)、块存储 RBD(rados block device) 和文件存储 CephFS;

Ceph中文开源社区地址:http://ceph.org.cn/
Ceph官方文档:http://docs.ceph.org.cn/


2、Ceph优点

  统一存储。虽然ceph底层是一个分布式文件系统,但Ceph能够同时提供对象存储、块存储和文件系统存储三种存储服务的统一存储架构,因此能够满足不同应用需求前提下的简化部署和运维,这是Ceph被OpenStack用户热衷的最主要原因。

  高扩展性。扩容方便、容量大。能够管理上千台服务器、EB级的容量。

  可靠性强。支持多份强一致性副本,EC。副本能够跨主机、机架、机房、数据中心存放。所以安全可靠。存储节点可以自动管理、自动修复。无单点故障,容错性强。

  高性能。因为是多个副本,因此在读写操作时候能够做到高度并行化。理论上,节点越多,整个集群的IOPS和吞吐量越高。另外一点ceph客户端读写数据直接与存储设备(osd) 交互。


3、Ceph组件

ceph的主要组件

一个Ceph存储群集至少需要一个Ceph监视器,Ceph管理器和Ceph OSD(对象存储守护程序)。运行Ceph文件系统客户端时,也需要Ceph Metadata Server。

(1)Ceph monitors(MON):Ceph Monitor作为集群中的控制中心,拥有整个集群的状态信息,各个组件如OSDs将自己的状态信息报告给Ceph Monitor,Ceph Monitor肩负着整个集群协调工作;同时Ceph Monitor还负责将集群的指挥工作,将集群的状态同步给客户端,客户端根据Ceph Monitor发送的集群状态信息可以获取到集群的状态,当集群状态有变化如OSD增加或故障时,Ceph Monitor会负责更新集群状态并下发给客户端。一般需要部署2n+1个Ceph Monitor节点才能实现冗余和高可用性

(2)Ceph manager: Ceph manager是在Kraken版本中引入的,它与monitor守护进程一起运行, 为外部监视和管理系统提供额外的监视和接口。负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率,当前性能指标和系统负载。Ceph Manager守护程序还托管基于python的模块,以管理和公开Ceph集群信息,包括基于Web的Ceph仪表板和 REST API。高可用性通常至少需要两个管理器

(3)Ceph对象存储设备(OSD):集群中通常有多个OSD组成,OSD即Object Storage Daemon,负责Ceph集群中真正数据存储的功能,也就是我们的数据最终都会写入到OSD中。

(4)MDS:Ceph元数据服务器,代表Ceph文件系统存储元数据。MDS跟踪文件层次结构,为Ceph FS文件系统存储元数据

如果你仅使用对象存储和块存储时,MDS不是必须的,仅当你用使用Cephfs时,MDS才是需要安装的。

ceph的其他组件

(1)RADOS: RADOS对象存储负责存储这些对象,而不管它们的数据类型如何。RADOS层确保数据始终保持一致。 为此,它执行数据复制、故障检测和恢复,以及跨集群节点的数据迁移和再平衡。

(2)Librados: librados库是一种访问RADOS的方便方法,支持PHP、Ruby、Java、Python、C和c++编程语言。它为 Ceph存储集群(RADOS)提供了本机接口,并为其他服务提供了基础,如RBD、RGW和CephFS,这些服务构建 在librados之上。librados还支持从应用程序直接访问RADOS,没有HTTP开销。

(3)RBD:提供持久块存储,它是瘦配置的、可调整大小的,并在多个osd上存储数据条带。RBD服务被构建为 一个在librados之上的本机接口。

(4)RGW:RGW提供对象存储服务。它使用librgw (Rados网关库)和librados,允许应用程序与Ceph对象存储建立 连接。RGW提供了与Amazon S3和OpenStack Swift兼容的RESTful api接口。

(5)CephFS: Ceph文件系统提供了一个符合posix标准的文件系统,它使用Ceph存储集群在文件系统上存储用户数 据。与RBD和RGW一样,CephFS服务也作为librados的本机接口实现。


4、安装ceph

1)准备工作

格式化所有硬盘

[root@ceph01 ~]# mkfs.xfs /dev/sdb

临时关闭所有主机的防火墙和SELinux,这样可以更加快捷的配置ceph。

systemctl stop firewalld && systemctl disable firewalld && setenforce 0
vim /etc/selinux/config
SELINUX = disabled

编辑所有主机的/etc/hosts文件,将IP地址与主机名对应

[root@localhost ~]# cat << EOF >> /etc/hosts
192.168.10.10 ceph01
192.168.10.11 ceph02
192.168.10.12 ceph03
EOF
[root@localhost ~]# cat  /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.10.10 ceph01
192.168.10.11 ceph02
192.168.10.12 ceph03

更改主机bash名字
hostname ceph01
bash
hostname ceph02
bash
hostname ceph03
bash

管理节点ceph01生成密钥,并发布给所有主机,包括自身

[root@localhost ~]# ssh-keygen
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph01
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph02
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@ceph03

配置yum源

yum -y install wget 
yum -y install vim
//安装wget命令,方便下载新的yum源。
cd /etc/yum.repos.d/
mkdir backup
mv C* backup

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

配置ceph源

//配置ceph源
vim /etc/yum.repos.d/ceph.repo

[ceph]
name=Ceph packages for
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.0/el7/$basearch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-noarch]
name=Ceph noarch packages 
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.0/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages 
baseurl=https://mirrors.aliyun.com/ceph/rpm-15.2.0/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
priority=1



yum clean all
yum makecache

配置ntp时间同步

yum install -y ntp
ntpdate ntp1.aliyun.com

安装ceph

//ceph01主节点
yum install ceph-deploy ceph python-setuptools -y


//ceph02、ceph03节点
yum install ceph python-setuptools -y

查看ceph版本

ceph -v

管理节点创建mon并初始化,收集秘钥

cd /etc/ceph
ceph-deploy new ceph01 ceph02 ceph03 	'//创建mon'
ceph-deploy mon create-initial	'//初始化,收集秘钥'

将配置文件和admin秘钥下发到节点并给秘钥增加权限

[root@ceph1 ceph]# ceph-deploy admin ceph01 ceph02 ceph03
[root@ceph1 ceph]# chmod +r ceph.client.admin.keyring 
[root@ceph2 ceph]# chmod +r ceph.client.admin.keyring 
[root@ceph3 ceph]# chmod +r ceph.client.admin.keyring 

创建osd

ceph-deploy osd create --data /dev/sdb ceph01
ceph-deploy osd create --data /dev/sdb ceph02
ceph-deploy osd create --data /dev/sdb ceph03

也可以通过ceph osd tree查看每个节点上osd的情况和crush tree的情况

查看集群状态

[root@ceph01 ceph]# ceph -s

此时Ceph的health状态为HEALTH_WARN告警状态,提示信息为“no active mgr”,因此需要部署一个mgr节点,manager节点在luminous之后的版本才可以部署,将mgr部署到三个节点,执行

[root@ceph01 ceph]# ceph-deploy mgr create ceph01 ceph02 ceph03

ceph集群安装完毕


5、文件存储

Ceph的文件存储全称是CephFS,它是一个与POSIX兼容的分布式文件系统,底层使用Ceph rados存储数据。要能正常使用CephFS,集群中应至少包含一个元数据服务器MDS(MataData Server)。

创建MDS
创建MDS可以直接使用ceph-deploy中的mds create子命令进行创建

[root@ceph01 ceph]# ceph-deploy mds create ceph01 ceph02 ceph03

一个ceph文件系统至少需要包含两个存储池,一个用来存储数据,另一个则是用来存储元数据。配置这些存储池时需考虑:

  • 为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效。
  • 为元数据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时。

接下来创建两个存储池,一个叫cephfs_data,一个叫ceph_metadata:

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

查看存储池

ceph osd lspools

创建文件系统
在MDS和存储池创建完成后就可以创建文件系统了。创建文件系统的子命令是fs new ceph fs new

[root@ceph01 mds]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 6 and data pool 5
[root@ceph01 mds]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

使用ceph fs status查看新建的文件系统的状态

[root@ceph01 mds]# ceph fs status
cephfs - 0 clients
======
RANK  STATE    MDS       ACTIVITY     DNS    INOS  
 0    active  ceph01  Reqs:    0 /s    10     13   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  1536k  17.9G  
  cephfs_data      data       0   17.9G  
STANDBY MDS  
   ceph03    
   ceph02    
MDS version: ceph version 15.2.0 (dc6a0b5c3cbf6a5e1d6d4f20b5ad466d76b96247) octopus (rc)s

文件系统创建完成后,MDS服务器就能达到active的状态了

[root@ceph01 mds]# ceph mds stat
cephfs:1 {0=ceph01=up:active} 2 up:standby

挂载文件存储
要挂载 Ceph 文件系统,如果你知道mon节点ip地址可以用 mount 命令、或者用 mount.ceph 工具来自动解析监视器 IP 地址。由于mount命令与mount.ceph基本一致,所以仅介绍mount命令挂载。

客户端创建挂载点

mkdir /ceph

默认情况下,ceph部署完成后会自动开启cephx认证,所以在挂载时需要指明用户名及秘钥。

查看mon节点
    [root@ceph01 ceph]# cat ceph.client.admin.keyring 
[client.admin]
        key = AQA9jJxhdDBwHxAAlFGW8j1ivxdQAp7L5NmW5Q==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

客户端挂载

[root@localhost ~]# mount -t ceph 192.168.10.10:/ /ceph -o name=admin,secret=AQA9jJxhdDBwHxAAlFGW8j1ivxdQAp7L5NmW5Q==

官方建议以更加安全的方式挂载cephFS,就需要把秘钥文件导出到一个文件中,挂载时指明文件名。这样就避免了secret残留在bash中。

echo "AQA9jJxhdDBwHxAAlFGW8j1ivxdQAp7L5NmW5Q==" > /etc/ceph/ceph-admin.secret
mount -t ceph 192.168.10.10:/ /ceph -o name=admin,secretfile=/etc/ceph/ceph-admin.secret

写入/etc/fstab

为了保证服务器重启后挂载仍然有效,需要将挂载信息写入到/etc/fstab中。

echo "192.168.10.10:/  /ceph/ ceph name=admin,secretfile=/etc/ceph/ceph-admin.secret,noatime 0 2" >>/etc/fstab


6、ceph命令

查看集群状态

[root@ceph01 ceph]# ceph -s

查看文件系统

[root@ceph01 ~]# ceph fs ls
name: 128, metadata pool: cephfs_metadata, data pools: [cephfs_data 

删除ceph文件系统

[root@ceph01 ~]# ceph fs rm 文件系统名字 --yes-i-really-mean-it
[root@ceph01 ~]# ceph fs ls
No filesystems enabled

查看存储池

ceph osd lspools

删除存储池

若要删除池,添加删除pool权限

cd /etc/ceph/
cat /etc/ceph/ceph.conf 

mon_allow_pool_delete = true

分发配置文件

ceph-deploy --overwrite-conf admin ceph01 ceph02 ceph03

重启所有节点的mon服务

systemctl restart ceph-mon.target

删除,池名字输两遍

ceph osd pool delete 池名字 池名字 --yes-i-really-really-mean-it

ceph-mon节点重启报错

[root@ceph-1 ~]# cat /etc/systemd/system/ceph-mon.target.wants/ceph-mon\@ceph-1.service
StartLimitInterval=30min												 #重启间隔时间设置,默认是30分钟,可以将该行注释后重启测试