Ceph持久化存储为k8s应用提供存储方案(3)

一、CephFs介绍
二、CephFS架构
三、配置CephFS MDS
1、创建一个Ceph文件系统
1.1、以kernel client 形式挂载CephFS
1.2、以FUSE client 形式挂载CephFS
四、MDS主备与主主切换
1、配置主主模式
2、还原单主MDS

一、CephFs介绍

Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。

说在前面的话,cephfs其实是为用户提供的一个文件系统,把ceph这个软件把里面的空间,模拟一个文件系统的格式来提供服务,它有posix标准的文件系统的接口能够为ceph集群存储文件,能够提供访问,目前在大多数公司用cephfs也是比较少的,也是由于性能原因,但是也有一些场景也会用到。

对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。

二、CephFS 架构

底层是核心集群所依赖的, 包括:
OSDs (ceph-osd): CephFS 的数据和元数据就存储在 OSDs 上
MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元数据
Mons (ceph-mon): Monitors 管理着集群 Map 的主副本

因为这个map里面维护着很多数据的信息索引,所有的数据都要从mons中map里获取去osd里找这个数据,其实获取这个数据的流程大概都是一样的,只不过它存在的是不同的库,不同的map

Ceph 存储集群的协议层是 Ceph 原生的 librados 库, 与核心集群交互.
CephFS 库层包括 CephFS 库 libcephfs, 工作在 librados 的顶层, 代表着 Ceph文件系统.最上层是能够访问 Ceph文件系统的两类客户端,由于有这个libcephfs这个库,cephfs才能对外提供服务,因为底层是不能提供服务的,都得通过它这个第三方的lib库才能去提供访问,

元数据:文件的名字和属性信息叫元数据,和数据是隔离开的

CephFs的数据是怎么访问的?
首先客户端通过RPC协议到达MDS,从MDS获取到元数据的信息,客户端与RADOS获取文件的一个IO操作,那么有了这两份信息,用户就能得到了想要的那份文件,MDS和RADOS之间通过journal metadate,这个Journal是记录文件写入日志的,这个也是存放到OSD当中的,MDS和rados之间也是由交互的,因为所有最终的数据都会存到rados当中

!

三、配置 CephFS MDS

要使用 CephFS, 至少就需要一个 metadata server 进程。可以手动创建一个 MDS, 也可以使用 ceph-deploy 或者 ceph-ansible 来部署 MDS。
登录到ceph-deploy工作目录执行
hostname指定ceph集群的主机名
#ceph-deploy mds create $hostname

四、部署Ceph文件系统

部署一个 CephFS, 步骤如下:
在一个 Mon 节点上创建 Ceph文件系统.
若使用 CephX 认证,需要创建一个访问 CephFS 的客户端

挂载 CephFS 到一个专用的节点.
以 kernel client 形式挂载 CephFS
以 FUSE client 形式挂载 CephFS

1、创建一个 Ceph 文件系统
1、首先要创建两个pool,一个是cephfs-data,一个是cephfs-metadate,分别存储文件数据和文件元数据,这个pg也可以设置小一点,这个根据OSD去配置

#ceph osd pool create cephfs-data 256 256
#ceph osd pool create cephfs-metadata 64 64

查看已经创建成功

[[email protected] my-cluster]# ceph osd lspools
1 .rgw.root
2 default.rgw.control
3 default.rgw.meta
4 default.rgw.log
5 rbd
6 cephfs-data
7 cephfs-metadata

关于ceph的日志,可以在/var/log/ceph下可以查看到相关信息

[[email protected] my-cluster]# tail -f /var/log/ceph/ceph
ceph.audit.log                  ceph.log                        ceph-mgr.cephnode01.log         ceph-osd.0.log
ceph-client.rgw.cephnode01.log  ceph-mds.cephnode01.log         ceph-mon.cephnode01.log         ceph-volume.log

注:一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs. 因为 metadata pool 存储着 CephFS文件的元数据, 为了保证安全, 最好有较多的副本数. 为了能有较低的延迟, 可以考虑将 metadata 存储在 SSDs 上.
2、创建一个 CephFS, 名字为 cephfs:需要指定两个创建的pool的名字

#ceph fs new cephfs cephfs-metadata cephfs-data
new fs with metadata pool 7 and data pool 6

3、验证至少有一个 MDS 已经进入 Active 状态,也就是活跃
另外可以看到两个备用的是cephnode01,和cephnode03

#ceph fs status cephfs
cephfs - 0 clients

+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | cephnode02 | Reqs:    0 /s |   10  |   13  |
+------+--------+------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 1536k | 17.0G |
|   cephfs-data   |   data   |    0  | 17.0G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  cephnode01 |
|  cephnode03 |
+-------------+
MDS version: ceph version 14.2.7 (3d58626ebeec02d8385a4cefb92c6cbc3a45bfe8) nautilus (stable)

4、在 Monitor 上, 创建一个叫client.cephfs的用户,用于访问CephFs

#ceph auth get-or-create client.cephfs mon ‘allow r‘ mds ‘allow rw‘ osd ‘allow rw pool=cephfs-data, allow rw pool=cephfs-metadata‘
这里会生成一个key,用户需要拿这个key去访问
[client.cephfs]
    key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q==

查看权限列表,有哪些用户创建了权限

[[email protected] my-cluster]# ceph auth list
client.cephfs
    key: AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q==
    caps: [mds] allow rw
    caps: [mon] allow r
    caps: [osd] allow rw pool=cephfs-data, allow rw pool=cephfs-metadata
client.rgw.cephnode01
    key: AQBOAl5eGVL/HBAAYH93c4wPiBlD7YhuPY0u7Q==
    caps: [mon] allow rw
    caps: [osd] allow r

5、验证key是否生效

#ceph auth get client.cephfs
可以看到这个用户是拥有访问cephfs的读写权限的
exported keyring for client.cephfs
[client.cephfs]
    key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q==
    caps mds = "allow rw"
    caps mon = "allow r"
    caps osd = "allow rw pool=cephfs-data, allow rw pool=cephfs-metadata"

6、检查CephFs和mds状态

#ceph -s   查看集群已经增加mds配置
  cluster:
    id:     75aade75-8a3a-47d5-ae44-ec3a84394033
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 2h)
    mgr: cephnode01(active, since 2h), standbys: cephnode02, cephnode03
    mds: cephfs:1 {0=cephnode02=up:active} 2 up:standby
    osd: 3 osds: 3 up (since 2h), 3 in (since 2h)
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   7 pools, 96 pgs
    objects: 263 objects, 29 MiB
    usage:   3.1 GiB used, 54 GiB / 57 GiB avail
    pgs:     96 active+clean

#ceph mds stat
这里显示1个是active状态,2个备用状态
cephfs:1 {0=cephnode02=up:active} 2 up:standby

#ceph fs ls
这里有两个pool
name: cephfs, metadata pool: cephfs-metadata, data pools: [cephfs-data ]
#ceph fs status

1.1 以 kernel client 形式挂载 CephFS

这里使用其他的机器进行挂载,这里是是以prometheus主机挂载,不过这个在哪挂载都可以,kernel主要联系系统内核,和系统内核进行做相互,用这种方式进行挂载文件系统
1、创建挂载目录 cephfs
#mkdir /cephfs

2、挂载目录,这里写集群ceph节点的地址,后面跟创建用户访问集群的key

#mount -t ceph 192.168.1.10:6789,192.168.1.11:6789,192.168.1.12:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==

3、自动挂载
#echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab

4、验证是否挂载成功

#stat -f /cephfs
  文件:"/cephfs"
    ID:4f32eedbe607030e 文件名长度:255     类型:ceph
块大小:4194304    基本块大小:4194304
    块:总计:4357       空闲:4357       可用:4357
Inodes: 总计:0          空闲:-1

1.2 以 FUSE client 形式挂载 CephFS

1、安装ceph-common,安装好可以使用rbd,ceph相关命令
这里还是使用我们的内网yum源来安装这些依赖包

yum -y install epel-release
yum install -y ceph-common

2、安装ceph-fuse,ceph的客户端工具,也就是用ceph的方式把这个文件系统挂上
yum install -y ceph-fuse

3、将集群的ceph.conf拷贝到客户端

scp [email protected]:/etc/ceph/ceph.conf /etc/ceph/
chmod 644 /etc/ceph/ceph.conf

4、使用 ceph-fuse 挂载 CephFS
如果是在其他主机挂载的话,需要这个使用cephfs的key,这个是刚才我们创建好的
直接拿这台服务器上用就可以

[[email protected] ~]# more /etc/ceph/ceph.client.cephfs.keyring
exported keyring for client.cephfs
[client.cephfs]
    key = AQA5IV5eNCwMGRAAy4dIZ8+ISfBcwZegFTYD6Q==
    caps mds = "allow rw"
    caps mon = "allow r"
    caps osd = "allow rw pool=cephfs-data, allow rw pool=cephfs-metadata"

#ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m 192.168.1.10:6789,192.168.1.11:6789,192.168.1.12:6789 /cephfs/

5、验证 CephFS 已经成功挂载

#df -h
ceph-fuse                          18G     0   18G    0% /cephfs

#stat -f /cephfs
  文件:"/cephfs/"
    ID:0        文件名长度:255     类型:fuseblk
块大小:4194304    基本块大小:4194304
    块:总计:4357       空闲:4357       可用:4357
Inodes: 总计:1          空闲:0

6、自动挂载

#echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab
或
#echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2 fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab

7、卸载
#fusermount -u /cephfs

五、MDS主备与主主切换

1、配置主主模式
当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。
配置MDS多主模式
每个cephfs文件系统都有一个max_mds设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds设置的值时,mdx_mds设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds被设置为两个,则不会创建第二个主MDS。

添加设置max_mds 2,也就是成2个activity,1个standby,称为主主备模式

#ceph fs set cephfs max_mds 2

[[email protected] ceph]# ceph fs status
cephfs - 1 clients

+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | cephnode02 | Reqs:    0 /s |   11  |   14  |
|  1   | active | cephnode01 | Reqs:    0 /s |   10  |   13  |
+------+--------+------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 2688k | 16.8G |
|   cephfs-data   |   data   |  521M | 16.8G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  cephnode03 |
+-------------+

也就是当你cephfs用的多的话,数据量大的话,就会出现性能的问题,也就是当配置多个avtive的mds的时候会遇到系统瓶颈,这个时候就需要配置主主模式,把这个数据做一个类似的负载均衡,多主的话也就是这些主会同时提供服务

# 1.3、配置备用MDS
即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds时,最好比系统中MDS的总数少一个。
但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available告警信息:
#ceph fs set <fs> standby_count_wanted 0

2、还原单主MDS

2.1、设置max_mds
要是还原的话,直接设置为max_mds 1也就是一个activity两个standby

#ceph fs set max_mds 1
[[email protected] ceph]# ceph fs status
cephfs - 1 clients
======
+------+--------+------------+---------------+-------+-------+
| Rank | State  |    MDS     |    Activity   |  dns  |  inos |
+------+--------+------------+---------------+-------+-------+
|  0   | active | cephnode02 | Reqs:    0 /s |   11  |   14  |
+------+--------+------------+---------------+-------+-------+
+-----------------+----------+-------+-------+
|       Pool      |   type   |  used | avail |
+-----------------+----------+-------+-------+
| cephfs-metadata | metadata | 2688k | 16.8G |
|   cephfs-data   |   data   |  521M | 16.8G |
+-----------------+----------+-------+-------+
+-------------+
| Standby MDS |
+-------------+
|  cephnode03 |
|  cephnode01 |
+-------------+

如果想在客户端去执行相关的ceph命令的话,需要安装ceph-common以及ceph-fuse客户端工具将这个ceph.client.admin.keyring以及ceph.conf文件拷到相应的客户端也可以执行ceph命令了

[[email protected] ceph]# scp ceph.client.admin.keyring [email protected]:/etc/ceph
[email protected]‘s password:
ceph.client.admin.keyring
[[email protected] ceph]# ceph -s
  cluster:
    id:     75aade75-8a3a-47d5-ae44-ec3a84394033
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 4h)
    mgr: cephnode01(active, since 4h), standbys: cephnode02, cephnode03
    mds: cephfs:2 {0=cephnode02=up:active,1=cephnode03=up:active} 1 up:standby
    osd: 3 osds: 3 up (since 4h), 3 in (since 4h)
    rgw: 1 daemon active (cephnode01)

  data:
    pools:   7 pools, 96 pgs
    objects: 345 objects, 203 MiB
    usage:   3.6 GiB used, 53 GiB / 57 GiB avail
    pgs:     96 active+clean

原文地址:https://blog.51cto.com/14143894/2475248

时间: 2024-07-30 19:06:02

Ceph持久化存储为k8s应用提供存储方案(3)的相关文章

# IT明星不是梦 # Ceph持久化存储为k8s应用提供存储方案(2)

目录:一.RBD介绍RBD常用命令RBD配置操作RBD挂载在到操作系统快照配置导出导入RBD镜像 RBD介绍 RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型.RBD块设备类似磁盘可以被挂载. RBD块设备具有快照.多副本.克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中.如下是对Ceph RBD的理解,快照也就是相当于克隆,也就是有一个RBD1做一个快照,比如往里面去写数据,想回滚,就是可以通过这个去做备份,虽然我们写到块里面的是

kubernetes持久化存储,静态存储【pv】,动态存储【StorageClass】(5)

在开始介绍k8s持久化存储前,我们有必要了解一下k8s的emptydir和hostpath.configmap以及secret的机制和用途 1.EmptydirEmptyDir是一个空目录,他的生命周期和所属的 Pod 是完全一致的,pod删掉目录消失 2.HostpathHostpath会把宿主机上的指定卷加载到容器之中,如果 Pod 发生跨主机的重建,其内容就难保证了 3.ConfigmapConfigMap跟Secrets类似,但是ConfigMap可以更方便的处理不包含敏感信息的字符串.

开源为改进服务器、网络、存储及加速技术提供了行之有效的新途径

开源为改进服务器.网络.存储及加速技术 提供了行之有效的新途径 Dave Berry 自从PMC去年十一月宣布加入Canonical's Ubuntu OpenStack互通性实验室,近期又加入了OpenPOWER基金会,该基金会是一个开源开发的社区,倡导基于IBM推出的下一代POWER微处理器架构的软硬件的合作开发. 开源的大趋势带来的驱动力是显而易见的.正如许多个人积极地拥抱了开源的理念,将其当成能够参与到新技术革命当中的宝贵机会,如Google,Rackspace等领军科技公司.甚至中国的

k8s使用glusterfs存储报错type ‘features/utime‘

k8s使用glusterfs存储报错type 'features/utime' is not valid or not found on this machine pods报错如下 Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 5m48s default-scheduler Successfully assigned default/auth-web-1-77f4f7cbcc

【云快讯】之二十六《AWS推出网络文件存储EFS,进军NAS存储市场》

2015-04-10 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 亚马逊网络服务的不断蚕食企业存储市场,AWS最新计划发布一个新服务替代网络附加存储(NAS)设备.亚马逊弹性文件系统(EFS)将提供一个共享的,低延迟的文件系统,用于支持项目团队和组织内部需要共享大型文件,并快速访问它们的场景,如视频制作公司等. "该文件系统在云服务普及的今天是缺少的一环,"Amazon Web Services的负责人安迪·雅西周四在AWS峰会在旧金山表示该服

(转)C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区

程序在内存有五个存在区域: A:动态区域中的栈区  B:动态区域中的栈区 C:静态区域中:全局变量 和静态变量    (这个区域又可以进一步细分为:初始化的全局变量和静态变量    以及    未初始化的全局变量和静态变量  ) D:静态区域中:文字 数字 常量 E:静态区域中:代码区(就是编译后的二进制代码  指导CPU怎么运行的玩意) ××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××× 栈,程

架构设计:系统存储(2)——块存储方案(2)

接上文<架构设计:系统存储(1)--块存储方案(1)> 4-2.固态硬盘工作过程 本小节我们要解决一个关键问题:既然机械硬盘和固态硬盘从工作原理.制作工艺.技术规范等多个方面都完全不一样,那为什么无论硬件层是使用机械硬盘还是固态硬盘操作系统却都可以进行识别,并在其上进行数据读写呢? 这个问题中,计算机系统不同层次对数据操作最小单位的定义不一致都还是一个小问题:虽然机械硬盘上数据操作单元为512字节.固态硬盘上数据操作单元为4KB.操作系统层面定义的数据操作单元可能是1KB\2KB\4KB\8K

深入PHP变量存储结构 标签: PHP存储

1.深入PHP变量存储结构 标签: PHP存储  分类: 编程语言(10)  首先声明,我并没有去读PHP的源码,只是对于PHP的有时候诡异的表现感兴趣,找了一下开发人员laruence的博客结合PHP提供的函数debug_zval_dump刺探得到了本博客所阐述的工作机理.如果你想对PHP变量存储结构有一个了解或想对PHP变量加深理解的话,本文是适合你的,比较深入的去看源代码吧. 为了保证博客的连贯性,首先引用laruence关于PHP变量内部存储结构的部分内容(稍作修改) 在PHP中,所有的

Android 存储学习之在外部存储中读写文件

上节学习了如何在手机内部存储中读写文件,本节学习如何在手机的外部存储中读写文件.那就是如何在Sdcard中读写文件. 那我们还是用以前登录界面的例子举例说明,(登录界面请看上节Android 存储学习之在内部存储中读写文件) 先我们显示写的代码: 当点击确定并且自动登录的钩是选中的,则就会在sdcard文件夹写创建一个info.txt文件 public void login(View v) { String name = ed_nam.getText().toString(); String p