cephfs集群搭建,在客户端挂载后,在这个挂载目录里,新建目录,存储数据,能限制目录的大小吗(配额)?

cephfs使用ceph-fuse的方式挂载可以设置配额,内核方式挂载暂时还不能设置配额,

cephfs搭建 cephfs使用cephfs搭建 cephfs使用


cephfs搭建 cephfs使用


用户态ceph-fuse挂载设置配额的方式为:

setfattr -n ceph.quota.max_bytes -v 10000 /dir/dir/

CentOS 7部署 Ceph分布式存储架构

随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的后端存储。Ceph是一种为的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

前三台增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{1,2,3};

规范系统主机名添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 设置分别打开各的 /etc/hosts 文件,加入这四个ip与名称的对应关系:

在管理使用ssh-keygen 生成ssh keys 发布到各

步:增加 yum配置文件(各个都需要增加yum源) vim /etc/yum.re.d/ceph.repo

或阿里的ceph源

配置文件到其它和客户端

在ceph1更新软件源并安装ceph-deploy 管理工具

配置文件的默认副本数从3改成2,这样只有两个osd也能达到 active+clean 状态,添加行 osd_pool_default_size = 2

(如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)

错误参考:

添加osd (所有osd执行)

我们实验准备时已经创建目录/var/local/osd{id}

(用ceph-deploy把配置文件和admin密钥拷贝到所有,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存储集群的搭建。

其中:

= 128 ,

关于创建存储池

确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性导致数据丢失的概率)。

创建好存储池后,你就可以用 fs new 命令创建文件系统了

ceph fs new cephfs_metadata cephfs_data

其中: = cephfs 可自定义

在这里想起没在/etc/fstab配置ceph1、ceph2、ceph3的sdb自动挂载。

ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

清理机器上的ceph相关配置

可以参考内容:

如何建立单位内部云存储

看云存储的需求,是做云盘,做大文件存储,小文件存储,或者块读写等等。

开源系统就不少,自己建的话,省钱就用开源。

OpenStack里面有Swift,是一个对象存储,适合于存放比较小的,以对象为单位的文件。

SeaFile开源云存储系统平台是由国人开发的新一代的开源云存储系统软件,SeaFile提供丰富的文件同步和管理功能,搭个网盘是比较方便的。

还有GlusterFS,是一个集群的文件系统,支持 PB 级的数据量。

Ceph,分布式文件系统,支持作为块设备进行读写访问。

按照教程来,搭建起来不难。当然,要深入使用,解决生产运行中的各种坑,还是需要一定时间的积累的。

我们就是选择的Swift,然后在此基础上开发的文档管理系统。

cephfs目录共享给多个pod使用

本篇文章将介绍如何将cephfs的一个目录共享给多个pod使用,更进一步,多个pod之间虽共享一个目录,但可以隔离使用。

写这篇文章的起因是业务部门有多个云原生应用同时产生日志。这些日志放到一个大的目录下管理比如logs/,并且不同的应用所产生的日志存放在不同的目录下。

k8s访问cephfs的方式之一便是通过ceph-csi访问。ceph-csi提供了动态和静态的方式。

静态方式 由存储显式地创建pv,开发者通过pvc获得符合容量要求和访问模式的pv,并和pod关联,达到使用存储的要求。但这样存在一些弊端,比如需要使用不同的pv时,要分别手动构建pv。

动态方式 存储不需要显式地创建pv,而是创建storageClass。由开发者声明pvc,由storageClass生成合适的pv。但是pv关联的路径使用uuid规则创建,如需将后台存储的目录和pod对应并不是很直观。

搭建了一个minikube的k8s系统环境(版本V1.21.0)和ceph存储(版本16.2.4),完成ceph-csi的配置。

不需要配置storageClass。只需要配置一个pv、一个pvc和两个pod。

在cephfs后端创建一个可使用的子卷,实质上是在cephfs内的/volumes(该目录是ceph-csi默认使用的目录)下面创建一系列子目录用来共享。

首先创建一个子卷的组(相当于创建一个上层目录,后面的子卷都是该目录下的子目录)。命令如下:

该命令的源格式为:

这条命令简单的效果是在cephfs后台会创建一个 /volumes/data 的路径。以后所有属于该组的子卷都在该目录下。

然后创建一个子卷名称为data,该卷的大小为1GB大小,size的单位是bytes。命令如下:

该命令的源格式为:

文件系统后台实际创建 /volumes/data/logs/dda798fb-2160-4aca-b810-3bbf7bbdd394 ,即在子卷下面还有一个子目录,目录使用uuid命名。该uuid命名的目录配置了和size一致的配额。即pv的大小。

该pv文件名称为 cephfs-static-pv1.yaml 。pv里的内容:

1、 storageClassName: standard ,如果不加该句,pvc在apply之后会一直处于pending状态,通过describe pvc 可以看到 “Cannot bind to requested volume storageClassName: does not match” 的消息。文档少了这条说明。

2、 persistentVolumeReclaimPolicy: Retain ,当pvc被释放后,PV将会被保留(不清理和删除)。

3、rootPath可以通过getpath命令获取: ceph fs subvolume getpath cephfs logs data ,源命令格式为 ceph fs subvolume getpath <文件系统名称> <子卷名称> <子卷组> 。获取命令的结果带来uuid的子目录,这个uuid目录是带配额的,该配额和pv中描述的大小一致。

4、删除pv和pvc不会删除文件系统后台的子卷,需要额外执行命令删除。

应用该静态pv

结果

在pod创建前创建pvc,该pvc名称为cephfs-static-pvc1.yaml。volumeName和以上创建的pv相对应。

应用该pvc

查看所创建的pvc

创建两个pod分别使用 logs/data/dda798fb-2160-4aca-b810-3bbf7bbdd394 目录下面的 dir4 目录和 dir5 目录。每次在创建pod的时候需要指定一个subPath。

个pod配置,指定使用dir4目录。

使用volumeMounts中的参数 subPath 。 subPath 在实际存储后端会建立一个子目录,可以使容器在挂载数据卷时指向数据卷内部的一个子路径,而不是直接指向数据卷的根路径。第二个pod配置。指定使用dir5目录。

两个pod创建后,在ceph后台可以看到路径如下

查看挂载情况

在两个pod内各创建一个文件

使用查看命令,可以看到每个pod的 /var/lib/www 中只有自己创建的内容。

cephfs文件系统后端也分别在两个目录内创建了对应的文件

创建一个storageClass和pvc,这里省去两个pod的创建过程。

动态的storageClass配置如下:

pvc的配置

在底层文件系统中展现的结构 /volumes/csi/csi-vol-/ 两次uuid的值不相同。

pod创建过程类似,修改 claimName 内的pvc内容。

动态的方式使用uuid分配,底层路径和pod之间的关系不那么明显,使用静态卷+subPath的方式能够预知到所使用的路径,也做到了应用之间的隔离。

目前发现的一个问题是无论用kernel方式还是fuse方式挂载,在一个Node上对应某个卷的挂载点只有一个,多个pod会同时访问一个客户端程序。可能造成caps过多,性能竞争的问题。(以下是通过 ceph daemon session ls 查看到的结果。在我的例子中两个pod共用一个ceph-fuse客户端)

Ceph为什么越来越火?国内使用ceph较为成功的存储厂商有哪些?

目前国内软件定义存储产品主要分两类:

自主研发,比如SmartX,华为,安全性,可靠性以及服务的及时性等会更高一些;

基于开源的ceph研发,比如XSKY,杉岩,深信服,价格会比较便宜一些。

如何建立无限容量的云盘和网盘?

由于现在的云存储和网盘服务都有容量限制,建立一个无限容量的云盘或网盘是不可能的。然而,以下是一些方法可以增加云盘或网盘的可用存储空间:

使用多个云盘或网盘:注册多个云存储或网盘账户,将文件分散储存在多个账户中,这样就能够自定义总的存储空间。

使用可扩展版本的云存储或网盘:某些云存储或网盘服务提供了可扩展的版本,允许您按需购买更多的存储空间。

使用外部硬盘或网络附加存储:使用外部硬盘或网络附加存储设备来增加本地储存空间,再将文件上传到你的云盘或网盘上。

压缩文件压缩:通过压缩您上传至云存储或网盘的文件,减小文件所占用的存储空间。

以上是一些实现类似无限容量的方法。需要注意的是,使用这些方法时可能会带来其他复杂性和风险,如数据丢失、维护管理等问题,请谨慎选择。

要建立无限容量的云盘和网盘,有几种可能的途径:

使用公共云服务:许多公共云服务提供商,如Google Drive、OneDrive和Dropbox,都提供了大容量的存储空间,但它们可能需要付费才能获取更多的存储空间。

使用私有云服务:搭建自己的私有云存储服务可以获得更大的存储容量,但需要投入更多的时间和金钱。私有云服务通常需要购买硬件、设置网络和软件等。

使用分布式存储系统:分布式存储系统是一种将数据分散存储在多个计算机上的技术,例如GlusterFS、Ceph、OpenStack等,可以实现无限容量的存储。但这需要一定的技术知识和运维经验。

需要注意的是,建立无限容量的云盘和网盘并不是的,因为任何存储介质都有其物理限制。此外,也要考虑到数据安全、备份和恢复等问题,确保数据不会丢失或被盗。

建立无限容量的云盘和网盘是不可能的,因为任何物理存储设备都有其容量限制。然而,可以使用某些云存储服务提供商的付费服务来获得更大的存储空间。以下是一些建议:

使用付费云存储服务:许多云存储服务提供商,如Google Drive、OneDrive、Dropbox等,都提供付费服务,允许用户获得更大的存储空间。你可以选择一个价格适中并提供足够存储空间的服务,或者选择按需购买存储空间。

使用多个云存储服务:你可以注册多个云存储服务的帐户,并将文件分散存储在不同的服务中。这样可以限度地利用可用的存储空间。

自己架设云存储服务:如果你有足够的技术知识和资源,可以自己架设一个云存储服务。你可以使用开源的云存储软件,如Nextcloud、OwnCloud等,来搭建自己的云存储服务。在这种情况下,你可以控制存储空间的大小,但需要考虑到硬件资源的限制。

需要注意的是,无论使用哪种方法,都需要遵守服务提供商的使用规定和政策,以避免出现违规行为。此外,备份重要的数据是非常必要的,因为云存储服务提供商也有可能发生故障或数据丢失的情况。

建立无限容量的云盘和网盘是不太可能的,因为云存储也需要占用的空间和资源。不过,您可以通过一些方法来增加您的云盘和网盘的容量,例如:

开通百度网盘会员,会员等级越高,容量越大。

使用Google Drive,它提供了15G的免费空间。

利用百度网盘的漏洞,上传占位文件来扩容。