优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统

Ceph 的统一体现在可以提供文件系统、块存储和对象存储,分布式体现在可以动态扩展

Ceph 俨然已经发展为一整套存储解决方案,上层能够提供对象存储(RGW)、块存储(RBD)和CephFS,可以说是一套适合各种场景,非常灵活,非常有可发挥空间的存储解决方案

组件

基本组件

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

OSD:全称 Object Storage Device,也就是负责响应客户端请求返回具体数据的进程,一个 Ceph 集群一般都有很多个 OSD。主要功能用于数据的存储,当直接使用硬盘作为存储目标时,一块硬盘称之为 OSD,当使用一个目录作为存储目标的时候,这个目录也被称为 OSD

MDS:全称 Ceph Metadata Server,是 CephFS 服务依赖的元数据服务,对象存储和块设备存储不需要该服务。

Object:Ceph 最底层的存储单元是 Object 对象,一条数据、一个配置都是一个对象,每个 Object 包含 ID、元数据和原始数据。

Pool:Pool 是一个存储对象的逻辑分区,它通常规定了数据冗余的类型与副本数,默认为3副本。对于不同类型的存储,需要单独的 Pool,如 RBD。

PG:全称 Placement Grouops,是一个逻辑概念,一个 OSD 包含多个 PG。引入 PG 这一层其实是为了更好的分配数据和定位数据。每个 Pool 内包含很多个 PG,它是一个对象的集合,服务端数据均衡和恢复的最小单位就是 PG。

  • pool 是 ceph 存储数据时的逻辑分区,它起到 namespace 的作用
  • 每个 pool 包含一定数量(可配置)的 PG
  • PG 里的对象被映射到不同的 Object 上
  • pool 是分布到整个集群的

FileStore与BlueStore:FileStore 是老版本默认使用的后端存储引擎,如果使用 FileStore,建议使用 xfs 文件系统。BlueStore 是一个新的后端存储引擎,可以直接管理裸硬盘,抛弃了 ext4 与 xfs 等本地文件系统。可以直接对物理硬盘进行操作,同时效率也高出很多。

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

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

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

RBD:全称 RADOS Block Device,是 Ceph 对外提供的块设备服务,如虚拟机硬盘,支持快照功能。

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

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

块存储

典型设备

磁盘阵列,硬盘,主要是将裸磁盘空间映射给主机使用的。

优点

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

缺点

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

使用场景

  • Docker 容器、虚拟机磁盘存储分配。
  • 日志存储
  • 文件存储
  • ...

文件存储

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

优点

  • 造价低,随便一台机器就可以了
  • 方便文件可以共享

缺点

  • 读写速率低
  • 传输速率慢

使用场景

  • 日志存储
  • 有目录结构的文件存储
  • ...

对象存储

典型设备

内置大容量硬盘的分布式服务器(swift, s3);多台服务器内置大容量硬盘,安装上对象存储管理软件,对外提供读写访问功能。

优点

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

使用场景:(适合更新变动较少的数据)

  • 图片存储
  • 视频存储
  • ...

特点:

1、高性能:

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

  b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。

  c. 能够支持上千个存储节点的规模,支持TB到PB级的数据。

2、高可用性:

  a. 副本数可以灵活控制。

  b. 支持故障域分隔,数据强一致性。

  c. 多种故障场景自动进行修复自愈。

  d. 没有单点故障,自动管理。

3、高可扩展性:

  a. 去中心化。

  b. 扩展灵活。

  c. 随着节点增加而线性增长。

4、特性丰富:

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

  b. 支持自定义接口,支持多种语言驱动。

详细配置

分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连。

分布式文件系统的设计基于客户机/服务器模式

常用分布式文件系统

Lustre , Hadoop , FsatDFS , Ceph , GlusterFS

Ceph组件

OSDs:存储设备

Monitors:集群监控组件

MDSs:存放文件系统的元数据(对象存储和块存储不需要该组件)

Client:ceph客户端

一、准备机器

hostname ip role 描述
admin-node 192.168.0.130 ceph-deploy 管理节点
node1 192.168.0.131 mon.node1 ceph节点,监控节点
node2 192.168.0.132 osd.0 ceph节点,OSD节点
node3 192.168.0.133 osd.1 ceph节点,OSD节点

管理节点:admin-node

ceph节点:node1, node2, node3

所有节点:admin-node, node1, node2, node3

1、修改主机名

2、修改hosts文件

  1. # vi /etc/hosts
  2. 192.168.0.130 admin-node
  3. 192.168.0.131 node1
  4. 192.168.0.132 node2
  5. 192.168.0.133 node3

二、Ceph节点安装

1. 安装NTP(所有节点)

我们建议在所有 Ceph 节点上安装 NTP 服务(特别是 Ceph Monitor 节点),以免因时钟漂移导致故障,详情见时钟。

  1. # sudo yum install ntp ntpdate ntp-doc

2、管理节点配置无密码ssh登陆

3、关闭核心防护

4、配置yum源

  1. vi /etc/yum.repos.d/ceph.repo
  2. [Ceph]
  3. name=Ceph packages for $basearch
  4. baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
  5. enabled=1
  6. gpgcheck=0
  7. type=rpm-md
  8. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  9. priority=1
  10. [Ceph-noarch]
  11. name=Ceph noarch packages
  12. baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
  13. enabled=1
  14. gpgcheck=0
  15. type=rpm-md
  16. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  17. priority=1
  18. [ceph-source]
  19. name=Ceph source packages
  20. baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMS/
  21. enabled=1
  22. gpgcheck=0
  23. type=rpm-md
  24. gpgkey=https://mirrors.aliyun.com/ceph/keys/release.asc
  25. priority=1

三、搭建集群

1. 安装准备,创建文件夹

在管理节点上创建一个目录,用于保存 ceph-deploy 生成的配置文件和密钥对。

  1. $ cd ~
  2. $ mkdir my-cluster
  3. $ cd my-cluster

注:若安装ceph后遇到麻烦可以使用以下命令进行清除包和配置:

  1. // 删除安装包
  2. $ ceph-deploy purge admin-node node1 node2 node3
  3. // 清除配置
  4. $ ceph-deploy purgedata admin-node node1 node2 node3
  5. $ ceph-deploy forgetkeys

2. 创建集群和监控节点

创建集群并初始化监控节点

  1. $ ceph-deploy new {initial-monitor-node(s)}

这里node1是monitor节点,所以执行:

  1. $ ceph-deploy new node1

完成后,my-cluster 下多了3个文件:ceph.confceph-deploy-ceph.logceph.mon.keyring

  • 问题:如果出现 "[ceph_deploy][ERROR ] RuntimeError: remote connection got closed, ensure requiretty is disabled for node1",执行 sudo visudo 将 Defaults requiretty 注释掉。

3. 修改配置文件

  1. $ cat ceph.conf

内容如下:

  1. [global]
  2. fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
  3. mon_initial_members = node1
  4. mon_host = 192.168.0.131
  5. auth_cluster_required = cephx
  6. auth_service_required = cephx
  7. auth_client_required = cephx

把 Ceph 配置文件里的默认副本数从 3 改成 2 ,这样只有两个 OSD 也可以达到 active + clean 状态。把 osd pool default size = 2 加入 [global] 段:

  1. $ sed -i '$a\osd pool default size = 2' ceph.conf

如果有多个网卡,

可以把 public network 写入 Ceph 配置文件的 [global] 段:

  1. public network = {ip-address}/{netmask}

4. 安装Ceph

在所有节点上安装ceph:

  1. $ ceph-deploy install admin-node node1 node2 node3
  • 问题:[ceph_deploy][ERROR ] RuntimeError: Failed to execute command: yum -y install epel-release

解决方法:

  1. sudo yum -y remove epel-release

5. 配置初始 monitor(s)、并收集所有密钥

  1. $ ceph-deploy mon create-initial

完成上述操作后,当前目录里应该会出现这些密钥环:

  1. {cluster-name}.client.admin.keyring
  2. {cluster-name}.bootstrap-osd.keyring
  3. {cluster-name}.bootstrap-mds.keyring
  4. {cluster-name}.bootstrap-rgw.keyring

6. 添加2个OSD

  1. 登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。
  1. $ ssh node2
  2. $ sudo mkdir /var/local/osd0
  3. $ sudo chmod 777 /var/local/osd0/
  4. $ exit
  5. $ ssh node3
  6. $ sudo mkdir /var/local/osd1
  7. $ sudo chmod 777 /var/local/osd1/
  8. $ exit
  1. 然后,从管理节点执行 ceph-deploy 来准备 OSD 。
  1. $ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
  1. 最后,激活 OSD 。
  1. $ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1

7.把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点

  1. $ ceph-deploy admin admin-node node1 node2 node3

8. 确保你对 ceph.client.admin.keyring 有正确的操作权限

  1. $ sudo chmod +r /etc/ceph/ceph.client.admin.keyring

9. 检查集群的健康状况和OSD节点状况

  1. [zeng@admin-node my-cluster]$ ceph health
  2. HEALTH_OK
  3. [zeng@admin-node my-cluster]$ ceph -s
  4. cluster a3dd419e-5c99-4387-b251-58d4eb582995
  5. health HEALTH_OK
  6. monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
  7. election epoch 3, quorum 0 node1
  8. osdmap e10: 2 osds: 2 up, 2 in
  9. flags sortbitwise,require_jewel_osds
  10. pgmap v22: 64 pgs, 1 pools, 0 bytes data, 0 objects
  11. 12956 MB used, 21831 MB / 34788 MB avail
  12. 64 active+clean
  13. [zeng@admin-node my-cluster]$ ceph osd df
  14. ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
  15. 0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 64
  16. 1 0.01659 1.00000 17394M 6478M 10915M 37.25 1.00 64
  17. TOTAL 34788M 12956M 21831M 37.24
  18. MIN/MAX VAR: 1.00/1.00 STDDEV: 0

四、扩展集群(扩容)

1. 添加OSD

在 node1 上添加一个 osd.2。

  1. 创建目录
  1. $ ssh node1
  2. $ sudo mkdir /var/local/osd2
  3. $ sudo chmod 777 /var/local/osd2/
  4. $ exit
  1. 准备OSD
  1. $ ceph-deploy osd prepare node1:/var/local/osd2
  1. 激活OSD
  1. $ ceph-deploy osd activate node1:/var/local/osd2
  1. 检查集群状况和OSD节点:
  1. [zeng@admin-node my-cluster]$ ceph -s
  2. cluster a3dd419e-5c99-4387-b251-58d4eb582995
  3. health HEALTH_OK
  4. monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
  5. election epoch 3, quorum 0 node1
  6. osdmap e15: 3 osds: 3 up, 3 in
  7. flags sortbitwise,require_jewel_osds
  8. pgmap v37: 64 pgs, 1 pools, 0 bytes data, 0 objects
  9. 19450 MB used, 32731 MB / 52182 MB avail
  10. 64 active+clean
  11. [zeng@admin-node my-cluster]$ ceph osd df
  12. ID WEIGHT REWEIGHT SIZE USE AVAIL %USE VAR PGS
  13. 0 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 41
  14. 1 0.01659 1.00000 17394M 6478M 10915M 37.24 1.00 43
  15. 2 0.01659 1.00000 17394M 6494M 10899M 37.34 1.00 44
  16. TOTAL 52182M 19450M 32731M 37.28
  17. MIN/MAX VAR: 1.00/1.00 STDDEV: 0.04

2. 添加MONITORS

在 ndoe2 和 node3 添加监控节点。

  1. 修改 mon_initial_membersmon_hostpublic network 配置:
  1. [global]
  2. fsid = a3dd419e-5c99-4387-b251-58d4eb582995
  3. mon_initial_members = node1,node2,node3
  4. mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
  5. auth_cluster_required = cephx
  6. auth_service_required = cephx
  7. auth_client_required = cephx
  8. osd pool default size = 2
  9. public network = 192.168.0.120/24
  1. 推送至其他节点:
  1. $ ceph-deploy --overwrite-conf config push node1 node2 node3
  1. 添加监控节点:
  1. $ ceph-deploy mon add node2 node3
  1. 查看集群状态和监控节点:
  1. [zeng@admin-node my-cluster]$ ceph -s
  2. cluster a3dd419e-5c99-4387-b251-58d4eb582995
  3. health HEALTH_OK
  4. monmap e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}
  5. election epoch 8, quorum 0,1,2 node1,node2,node3
  6. osdmap e25: 3 osds: 3 up, 3 in
  7. flags sortbitwise,require_jewel_osds
  8. pgmap v3919: 64 pgs, 1 pools, 0 bytes data, 0 objects
  9. 19494 MB used, 32687 MB / 52182 MB avail
  10. 64 active+clean
  11. [zeng@admin-node my-cluster]$ ceph mon stat
  12. e3: 3 mons at {node1=192.168.0.131:6789/0,node2=192.168.0.132:6789/0,node3=192.168.0.133:6789/0}, election epoch 8, quorum 0,1,2 node1,node2,node3

CephFS分布式文件系统的更多相关文章

  1. 【架构设计】分布式文件系统 FastDFS的原理和安装使用

    本文地址 分享提纲: 1.概述 2. 原理 3. 安装 4. 使用 5. 参考文档 1. 概述 1.1)[常见文件系统] Google了一下,流行的开源分布式文件系统有很多,介绍如下:   -- mo ...

  2. 网站文件系统发展&&分布式文件系统fastDFS

    网站文件系统发展 1.单机时代的图片服务器架构 初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件 ...

  3. 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

    少啰嗦,直接装 看过上一篇分布式文件系统 - FastDFS 简单了解一下的朋友应该知道,本次安装是使用目前余庆老师开源的最新 V5.05 版本,是余庆老师放在 Github 上的,和目前你能在网络上 ...

  4. 分布式文件系统 - FastDFS 简单了解一下

    别问我在哪里 也许我早已不是我自己,别问我在哪里,我一直在这里. 突然不知道说些什么了... 初识 FastDFS 记得那是我刚毕业后进入的第一家公司,一个技术小白进入到当时的项目组后,在开发中上传用 ...

  5. 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试

    也不说废话,直接干 上一篇 分布式文件系统 - FastDFS 在 CentOS 下配置安装部署 中安装了 FastDFS 后,并配置启动了 Tracker 和 Storage 服务,已经可以上传文件 ...

  6. 【从零开始学习Hadoop】--2.HDFS分布式文件系统

    1. 文件系统从头说2. Hadoop的文件系统3. 如何将文件复制到HDFS3.1 目录和文件结构3.2 FileCopy.java文件的源代码3.3 编译3.4打包3.5 运行3.6 检查结果 1 ...

  7. Hadoop学习笔记【分布式文件系统学习笔记】

    分布式文件系统介绍 分布式文件系统:Hadoop Distributed File System,简称HDFS. 一.HDFS简介 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(c ...

  8. HDFS分布式文件系统资源管理器开发总结

      HDFS,全称Hadoop分布式文件系统,作为Hadoop生态技术圈底层的关键技术之一,被设计成适合运行在通用硬件上的分布式文件系统.它和现有的分布式文件系统有很多共同点,但同时,它和其他的分布式 ...

  9. Hadoop 分布式文件系统:架构和设计

    引言 Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时,它和其他的分布式文件系统 ...

随机推荐

  1. SpringBoot文章合集

    SpringBoot文章合集 SpringBoot合集为<尚硅谷雷神SpringBoot2零基础入门(spring boot2)>的学习以及项目中使用知识点进行整理. SpringBoot ...

  2. Xstart远程连接Linux图形用户界面

    目标: 在自己的Windows桌面打开Linux的firefox浏览器 工具: Windows: Xmanager的Xstart工具 Linux: xterm,firefox 说明: 使用Xstart ...

  3. .net core获取本地Ip地址的方法

    笔记: /// <summary> /// 获取本地Ip地址 /// </summary> /// <returns></returns> public ...

  4. JZOJ5405 & AtCoder Grand Contest 001 F. Permutation

    题目大意 给出一个长度为\(n\)的排列\(P\)与一个正整数\(k\). 你需要进行如下操作任意次, 使得排列\(P\)的字典序尽量小. 对于两个满足\(|i-j|>=k\) 且\(|P_i- ...

  5. 在动态组件上使用 keep-alive

    ----------------------html.js.style----------------------------------------------- <!DOCTYPE html ...

  6. Appium服务器初始化参数(Capability)

    原文:https://blog.csdn.net/lilongsy/article/details/83010101 appium官方说明:https://appium.io/docs/cn/writ ...

  7. How to run a batch file each time the computer loads Windows

    https://www.computerhope.com/issues/ch000322.htm#:~:text=Press Start%2C type Run%2C and press Enter. ...

  8. vscode中关闭python默认自动提示

    vscode中python的默认自动代码提示工具是Jedi,我现在用的是kite.默认情况下连个自动补全工具会同时工作,提示窗口会重复出现相同的代码.以下操作可以关闭Jedi.

  9. Sentry 企业级数据安全解决方案 - Relay PII 和数据清理

    本文档描述了一种我们希望最终对用户隐藏的配置格式.该页面仍然存在的唯一原因是当前 Relay 接受这种格式以替代常规数据清理设置. 以下文档探讨了 Relay 使用和执行的高级数据清理配置的语法和语义 ...

  10. 《剑指offer》面试题39. 数组中出现次数超过一半的数字

    问题描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, ...