ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CephFS分布式文件系统

2022-01-20 14:34:56  阅读:175  来源: 互联网

标签:Ceph 存储 admin ceph node1 分布式文件系统 CephFS 节点


目录

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

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。

1608261361982

  • 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文件

# vi /etc/hosts
192.168.0.130 admin-node
192.168.0.131 node1
192.168.0.132 node2
192.168.0.133 node3

二、Ceph节点安装

1. 安装NPT(所有节点)

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

# sudo yum install ntp ntpdate ntp-doc

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

3、关闭核心防护

4、配置yum源

vi /etc/yum.repos.d/ceph.repo

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

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

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

三、搭建集群

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

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

$ cd ~
$ mkdir my-cluster
$ cd my-cluster

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

// 删除安装包
$ ceph-deploy purge admin-node node1 node2 node3

// 清除配置
$ ceph-deploy purgedata admin-node node1 node2 node3
$ ceph-deploy forgetkeys

2. 创建集群和监控节点

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

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

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

$ ceph-deploy new node1

完成后,my-clster 下多了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. 修改配置文件

$ cat ceph.conf

内容如下:

[global]
fsid = 89933bbb-257c-4f46-9f77-02f44f4cc95c
mon_initial_members = node1
mon_host = 192.168.0.131
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

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

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

如果有多个网卡,
可以把 public network 写入 Ceph 配置文件的 [global] 段:

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

4. 安装Ceph

在所有节点上安装ceph:

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

解决方法:

sudo yum -y remove epel-release

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

$ ceph-deploy mon create-initial

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

{cluster-name}.client.admin.keyring
{cluster-name}.bootstrap-osd.keyring
{cluster-name}.bootstrap-mds.keyring
{cluster-name}.bootstrap-rgw.keyring

6. 添加2个OSD

  1. 登录到 Ceph 节点、并给 OSD 守护进程创建一个目录,并添加权限。
$ ssh node2
$ sudo mkdir /var/local/osd0
$ sudo chmod 777 /var/local/osd0/
$ exit

$ ssh node3
$ sudo mkdir /var/local/osd1
$ sudo chmod 777 /var/local/osd1/
$ exit
  1. 然后,从管理节点执行 ceph-deploy 来准备 OSD 。
$ ceph-deploy osd prepare node2:/var/local/osd0 node3:/var/local/osd1
  1. 最后,激活 OSD 。
$ ceph-deploy osd activate node2:/var/local/osd0 node3:/var/local/osd1

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

$ ceph-deploy admin admin-node node1 node2 node3

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

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

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

[zeng@admin-node my-cluster]$ ceph health
HEALTH_OK

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

四、扩展集群(扩容)

img

1. 添加OSD

在 node1 上添加一个 osd.2。

  1. 创建目录
$ ssh node1
$ sudo mkdir /var/local/osd2
$ sudo chmod 777 /var/local/osd2/
$ exit
  1. 准备OSD
$ ceph-deploy osd prepare node1:/var/local/osd2
  1. 激活OSD
$ ceph-deploy osd activate node1:/var/local/osd2
  1. 检查集群状况和OSD节点:
[zeng@admin-node my-cluster]$ ceph -s
    cluster a3dd419e-5c99-4387-b251-58d4eb582995
     health HEALTH_OK
     monmap e1: 1 mons at {node1=192.168.0.131:6789/0}
            election epoch 3, quorum 0 node1
     osdmap e15: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v37: 64 pgs, 1 pools, 0 bytes data, 0 objects
            19450 MB used, 32731 MB / 52182 MB avail
                  64 active+clean

[zeng@admin-node my-cluster]$ ceph osd df
ID WEIGHT  REWEIGHT SIZE   USE    AVAIL  %USE  VAR  PGS 
 0 0.01659  1.00000 17394M  6478M 10915M 37.24 1.00  41 
 1 0.01659  1.00000 17394M  6478M 10915M 37.24 1.00  43 
 2 0.01659  1.00000 17394M  6494M 10899M 37.34 1.00  44 
              TOTAL 52182M 19450M 32731M 37.28          
MIN/MAX VAR: 1.00/1.00  STDDEV: 0.04

2. 添加MONITORS

在 ndoe2 和 node3 添加监控节点。

  1. 修改 mon_initial_membersmon_hostpublic network 配置:
[global]
fsid = a3dd419e-5c99-4387-b251-58d4eb582995
mon_initial_members = node1,node2,node3
mon_host = 192.168.0.131,192.168.0.132,192.168.0.133
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

osd pool default size = 2
public network = 192.168.0.120/24
  1. 推送至其他节点:
$ ceph-deploy --overwrite-conf config push node1 node2 node3
  1. 添加监控节点:
$ ceph-deploy mon add node2 node3
  1. 查看集群状态和监控节点:
[zeng@admin-node my-cluster]$ ceph -s
    cluster a3dd419e-5c99-4387-b251-58d4eb582995
     health HEALTH_OK
     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}
            election epoch 8, quorum 0,1,2 node1,node2,node3
     osdmap e25: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v3919: 64 pgs, 1 pools, 0 bytes data, 0 objects
            19494 MB used, 32687 MB / 52182 MB avail
                  64 active+clean
                  
[zeng@admin-node my-cluster]$ ceph mon stat
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

标签:Ceph,存储,admin,ceph,node1,分布式文件系统,CephFS,节点
来源: https://www.cnblogs.com/dingcong1201/p/15826180.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有