1. ceph 简介
Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统()。ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展。在国内一些公司的云环境中,通常会采用 ceph 作为openstack 的唯一后端存储来提高数据转发效率。
Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。
官网:https://ceph.com/
官方文档:http://docs.ceph.com/docs/master/#
2. Ceph特点
高性能:
1) 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。
2) 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
3) 能够支持上千个存储节点的规模,支持TB到PB级的数据。
高可用性:
1) 副本数可以灵活控制。
2) 支持故障域分隔,数据强一致性。
3) 多种故障场景自动进行修复自愈。
4) 没有单点故障,自动管理。
高可扩展性:
1) 去中心化。
2) 扩展灵活。
3) 随着节点增加而线性增长。
特性丰富:
1) 支持三种存储接口:块存储、文件存储、对象存储。
2) 支持自定义接口,支持多种语言驱动。
3. Ceph应用场景
Ceph可以提供对象存储、块设备存储和文件系统服务,其对象存储可以对接网盘(owncloud)应用业务等;其块设备存储可以对接(IaaS),当前主流的IaaS运平台软件,如:OpenStack、CloudStack、Zstack、Eucalyptus等以及kvm等。
1> Ceph是一个高性能、可扩容的分布式存储系统,它提供三大功能:
对象存储(RADOSGW):提供RESTful接口,也提供多种编程语言绑定。兼容S3、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也是属于文件系统存储;
4. 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封装原生接口。
5. Ceph存储系统的逻辑层次结构
6. RADOS的系统逻辑结构
7. 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,最大程度地实现可扩展
8. 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会交出主角色。
9. Ceph Pool和PG分布情况
pool:是ceph存储数据时的逻辑分区,它起到namespace的作用。每个pool包含一定数量(可配置) 的PG。PG里的对象被映射到不同的Object上。pool是分布到整个集群的。 pool可以做故障隔离域,根据不同的用户场景不统一进行隔离。
10. ceph部署
1> 实验环境
四台主机192.168.16.65、.66、.68、.69,对应主机名依次为ajy5、ajy6、ajy7、ajy8、ajy9。ajy5为deploy节点,ajy6为controller节点,ajy8位compute节点,ajy9位storeage节点,将ajy6、8、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
11. 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*。