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分钟,可以将该行注释后重启测试