cephfs java api_CephFS 使用
发布日期:2021-06-24 15:50:54 浏览次数:3 分类:技术文章

本文共 3134 字,大约阅读时间需要 10 分钟。

c22ff79c4452

Ceph

之前介绍了 RBD 的使用方法,有了 RBD,远程磁盘挂载的问题就解决了,但 RBD 的问题是不能多个主机共享一个磁盘,如果有一份数据很多客户端都要读写该怎么办呢?这时 CephFS 作为文件系统存储解决方案就派上用场了。

1. CephFS 安装

在已经部署好的 Ceph 集群上安装 CephFS 还是比较简单的,首先需要安装 MDS,原因是 CephFS 需要统一的元数据管理,所以 MDS 必须要有。

$ ceph-deploy --overwrite-conf mds create

剩下的就是 pool 相关的处理的了:

$ ceph osd pool create cephfs_data 1024

$ ceph osd pool create cephfs_metadata 100

$ ceph fs new cephfs cephfs_metadata cephfs_data

这样 CephFS 就已经安装好了,执行下面的命令验证一下状态,看到 up 和 active 就表示状态正常。

$ ceph fs ls

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

$ ceph mds stat

cephfs-1/1/1 up {0=cephfs-master1=up:active}

2. CephFS 物理机挂载

接下来尝试一下远程挂载刚刚创建出来的 CephFS,首先还是要在客户机上安装 Ceph,这步和远程挂载 RBD 是一样的:

# On Linux client

$ echo " ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/

$ sudo chmod 0440 /etc/sudoers.d/

$ sudo apt-get install -y python

# On Ceph master

$ ceph-deploy install

$ ceph-deploy admin

然后获取 Ceph admin 用户的密钥,就是 对应的部分。

$ ceph auth get client.admin

exported keyring for client.admin

[client.admin]

key =

caps mds = "allow *"

caps mgr = "allow *"

caps mon = "allow *"

caps osd = "allow *"

接下来创建挂载目录,并挂载,注意替换 和 ,分别对应 Ceph monitor 所在的 IP 和刚刚在上一步获取的 admin 密钥。

$ sudo mkdir /mnt/cephfs

$ sudo mount -t ceph :6789:/ /mnt/cephfs/ -o name=admin,secret=

至此就已经挂载成功了,可以在挂载的目录下创建新目录,写入新文件,在其他同样挂载该 CephFS 的服务器上,也能看到同样的变化。

如果想做到开机启动就挂载 CephFS,请参考 使用ceph的文件存储CephFS

3. CephFS 用户隔离

上一步已经实现了远程挂载,和文件共享,但如果多个产品同时使用一个 CephFS,如果数据都互相可见,显然是不够安全的,那么就要做隔离,咱们接下来就来看看 CephFS 是如何做到这点的。

CephFS 这个文件系统还是统一的,所以隔离是在用户层面做的,具体的做法是:限定某个用户只能访问某个目录。

下面这个命令创建了一个叫 bruce 的用户,这个用户只能访问目录 /bruce,数据存储在 pool cephfs_data 中。

$ ceph auth get-or-create client.bruce mon 'allow r' mds 'allow r, allow rw path=/bruce' osd 'allow rw pool=cephfs_data'

如果要做进一步的隔离,想让不通用户的数据存储在不同的 pool,可以用命令将 pool 加入的 CephFS 中,再用命令指定,加入 pool 的命令如下:

$ ceph mds add_data_pool bruce

$ ceph fs ls

.... data pools: [cephfs_data bruce ]

挂载方式和 admin 用户挂载一样:

$ sudo mount -t ceph 10.19.250.136:6789:/ /mnt/bruce -o name=bruce,secret=AQCt8qBbx4XGKBAACWG5lQHRX7FTo0nVZCYxNA==

挂载后,可以看到其他目录,但没有操作权限,只能在 /mnt/bruce/bruce 下操作。

$ /mnt/bruce$ ls

abc bruce

$ /mnt/bruce$ cd abc

$ /mnt/bruce/abc$ sudo mkdir test

mkdir: cannot create directory 'test': Permission denied

$ /mnt/bruce/abc$ cd ../bruce

$ /mnt/bruce/bruce$ mkdir test

$ /mnt/bruce/bruce$ ls

test

4. Kubernetes 集群使用 CephFS

首先把 Ceph 用户的密钥以 secret 形式存储起来,下面的命令是获取 admin 用户的密钥,如果使用其他用户,可以把 admin 替换为要使用的用户名即可。

$ ceph auth get-key client.admin | base64

QVFEMDFWVmFWdnp6TFJBQWFUVVJ5VVp3STlBZDN1WVlGUkwrVkE9PQ==

$ cat ceph-secret.yaml

apiVersion: v1

kind: Secret

metadata:

name: ceph-secret

data:

key: QVFEMDFWVmFWdnp6TFJBQWFUVVJ5VVp3STlBZDN1WVlGUkwrVkE9PQ==

接下来创建 PV:

$ cat cephfs-pv.yaml

apiVersion: v1

kind: PersistentVolume

metadata:

name: cephfs-pv

spec:

capacity:

storage: 10Gi

accessModes:

- ReadWriteMany

cephfs:

monitors:

- :6789

- :6789

user: admin

secretRef:

name: ceph-secret

readOnly: false

persistentVolumeReclaimPolicy: Recycle

最后创建 PVC:

$ cat cephfs-pvc.yaml

kind: PersistentVolumeClaim

apiVersion: v1

metadata:

name: cephfs-pvc

spec:

accessModes:

- ReadWriteMany

resources:

requests:

storage: 10Gi

PV 和 PVC 都有以后,使用方式和普通的 PV 和 PVC 无异。

5. 参考文档

转载地址:https://blog.csdn.net/weixin_33642922/article/details/114541381 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java 优解分班_java设计一个按班级的分组排序,班级 姓名 学号 成绩 ,再输出每个班90分以上的人数,占比多少。...
下一篇:java限制只能修改一次订单_拥有可以动态更改订单的Java Comparator是否可以?

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月11日 18时55分44秒