文件存储

ceph文件系统提供了任何大小的符合posix标准的分布式文件系统,它使用Ceph RADOS存储数据。要实现ceph文件系统,需要一个正在运行的ceph存储集群和至少一个ceph元数据服务器(MDS)来管理其元数据并使其与数据分离,这有助于降低复杂性和提高可靠性。

libcephfs库在支持其多个客户机实现方面发挥重要作用。它具有本机linux内核驱动程序支持,因此客户机可以使用本机文件系统安装,例如使用mount命令。她与samba紧密集成,支持CIFS和SMB。Ceph FS使用cephfuse模块扩展到用户空间(FUSE)中的文件系统。它还允许使用libcephfs库与RADOS集群进行直接的应用程序交互。
只有Ceph FS才需要Ceph MDS,其他存储方法的块和基于对象的存储不需要MDS。Ceph MDS作为一个守护进程运行,它允许客户机挂载任意大小的POSIX文件系统。MDS不直接向客户端提供任何数据,数据服务仅OSD完成。

部署cephfs

[ceph-admin@ceph-node1 my-cluster]$ ceph-deploy mds create ceph-node2

创建池 FS

[ceph-admin@ceph-node1 my-cluster]$ ceph osd pool create cephfs_data
pool 'cephfs_data' created
[ceph-admin@ceph-node1 my-cluster]$ ceph osd pool create cephfs_metadata
pool 'cephfs_metadata' created
[ceph-admin@ceph-node1 my-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool and data pool

查看状态

[ceph-admin@ceph-node1 my-cluster]$ ceph mds stat
cephfs-// up {=ceph-node2=up:active}
[ceph-admin@ceph-node1 my-cluster]$ ceph osd pool ls
rbd
.rgw.root
default.rgw.control
default.rgw.meta
default.rgw.log
.rgw
.rgw.control
.rgw.gc
.rgw.buckets
.rgw.buckets.index
.rgw.buckets.extra
.log
.intent-log
.usage
.users
.users.email
.users.swift
.users.uid
default.rgw.buckets.index
default.rgw.buckets.data
cephfs_data
cephfs_metadata
[ceph-admin@ceph-node1 my-cluster]$ ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

创建用户

[ceph-admin@ceph-node1 my-cluster]$ ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow r,allow rw path=/' osd 'allow rw pool=cephfs_data' -o ceph.client.cephfs.keyring
[ceph-admin@ceph-node1 my-cluster]$ cat ceph.client.cephfs.keyring
[client.cephfs]
key = AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==
[ceph-admin@ceph-node1 my-cluster]$ scp ceph.client.cephfs.keyring root@192.168.0.123:/etc/ceph/      #将key复制到客户端
通过内核驱动和FUSE客户端挂载cephfs
[root@localhost ~]# ceph auth get-key client.cephfs
AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==
[root@localhost ~]#
[root@localhost ~]# mkdir /mnt/cephfs
[root@localhost ~]# mount -t ceph ceph-node2::/ /mnt/cephfs -o name=cephfs,secret=AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==
[root@localhost ~]# df -h /mnt/cephfs/
Filesystem Size Used Avail Use% Mounted on
192.168.0.126::/ 54G 54G % /mnt/cephfs

也可以将key保存到文件,通过文件挂载

[root@localhost ~]# echo "AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==" > /etc/ceph/cephfskey
[root@localhost ~]# umount /mnt/cephfs/
[root@localhost ~]# mount -t ceph ceph-node2::/ /mnt/cephfs -o name=cephfs,secretfile=/etc/ceph/cephfskey

开机自动挂载

[root@localhost ~]# echo "ceph-node2:6789:/ /mnt/cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfskey,_netdev,noatime 0 0" >> /etc/fstab
[root@localhost ~]# umount /mnt/cephfs
[root@localhost ~]# mount /mnt/cephfs
[root@localhost ~]# df -h /mnt/cephfs/
Filesystem Size Used Avail Use% Mounted on
192.168.0.126::/ 54G 54G % /mnt/cephfs

写入数据测试

[root@localhost ~]# dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=
+ records in
+ records out
bytes (1.1 GB) copied, 8.76348 s, MB/s
[root@localhost ~]# ll -h /mnt/cephfs/
total .0G
-rw-r--r-- root root .0G Feb : file1

使用fuse客户端挂载

ceph文件系统由linux内核本地支持,但是如果主机在较低的内核版本上运行,或者有任何应用程序依赖项,可以使用FUSE客户端让ceph挂载cephfs。

安装ceph-fuse

[root@localhost ~]# yum install ceph-fuse -y

挂载方式

[root@localhost ~]# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m ceph-node2: /mnt/cephfs^C
[root@localhost ~]# umount /mnt/cephfs/
[root@localhost ~]# ceph-fuse --keyring /etc/ceph/ceph.client.cephfs.keyring --name client.cephfs -m ceph-node2: /mnt/cephfs
ceph-fuse[]: starting ceph client
-- ::41.922959 7ff1e2ce20c0 - init, newargv = 0x55fdbb5c4420 newargc=
ceph-fuse[]: starting fuse
[root@localhost ~]# df -h /mnt/cephfs
Filesystem Size Used Avail Use% Mounted on
ceph-fuse 54G .0G 53G % /mnt/cephfs

写入配置文件

[root@localhost ~]# echo "id=cephfs,keyring=/etc/ceph/ceph.client.cephfs.keyring /mnt/cephfs fuse.ceph defaults 0 0" >> /etc/fstab
[root@localhost ~]# umount /mnt/cephfs
[root@localhost ~]# mount /mnt/cephfs
-- ::48.123645 7f70a8cb50c0 - init, newargv = 0x562911bb0150 newargc=11ceph-fuse[]: starting ceph client ceph-fuse[]: starting fuse
[root@localhost ~]# df -h /mnt/cephfs/
Filesystem Size Used Avail Use% Mounted on
ceph-fuse 54G .0G 53G % /mnt/cephfs

将Ceph FS导出为NFS服务器

网络文件系统(Network Filesystem,NFS)是最流行的可共享文件系统协议之一,每个基于unix的系统都可以使用它。不理解Ceph FS类型的基于unix的客户机仍然可以使用NFS访问Ceph文件系统。要做到这一点,我们需要一个NFS服务器,它可以作为NFS共享重新导出Ceph FS。NFS-ganesha是一个在用户空间中运行的NFS服务器,使用libcephfs支持Ceph FS文件系统抽象层(FSAL)。

安装软件

[root@ceph-node2 ~]# yum -y install nfs-utils nfs-ganesha

启动NFS需要的rpc服务

[root@ceph-node2 ~]# systemctl start rpcbind
[root@ceph-node2 ~]# systemctl enable rpcbind
[root@ceph-node2 ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Mon -- :: CST; 14s ago
Main PID: (rpcbind)
CGroup: /system.slice/rpcbind.service
└─ /sbin/rpcbind -w Feb :: ceph-node2 systemd[]: Starting RPC bind service...
Feb :: ceph-node2 systemd[]: Started RPC bind service.

修改配置文件

[root@ceph-node2 ~]# cat /etc/ganesha/ganesha.conf
###################################################
#
# EXPORT
#
# To function, all that is required is an EXPORT
#
# Define the absolute minimal export
#
################################################### EXPORT
{
# Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = ; # Exported path (mandatory)
Path = "/"; # Pseudo Path (required for NFS v4)
Pseudo = "/"; # Required for access (default is None)
# Could use CLIENT blocks instead
Access_Type = RW;
SecType = "none";
NFS_Protocols = "";
Squash = No_ROOT_Squash;
# Exporting FSAL
FSAL {
Name = CEPH;
}
}

通过提供Ganesha.conf 启动NFS Ganesha守护进程

[root@ceph-node2 ~]# ganesha.nfsd -f /etc/ganesha/ganesha.conf -L /var/log/ganesha.log -N NIV_DEBUG
[root@ceph-node2 ~]# showmount -e
Export list for ceph-node2:

客户端挂载

[root@localhost ~]# yum -y install nfs-utils
[root@localhost ~]# mkdir /mnt/cephnfs
[root@localhost ~]# mount -o rw,noatime ceph-node2:/ /mnt/cephnfs
[root@localhost ~]# df -h /mnt/cephnfs
Filesystem Size Used Avail Use% Mounted on
ceph-node2:/ - /mnt/cephnfs

最新文章

  1. Java远程方法调用(Remote Method Invocation,RMI)
  2. HTML页面弹出自定义对话框带遮蔽罩(使用JavaScript)
  3. 【BZOJ-1131】Sta 树形DP
  4. HTML标记语法之表格元素
  5. Quartz定时任务学习(一)简单任务
  6. 搭建的SSH 框架
  7. sqlserver2012相关资源下载
  8. canvas打开本机摄像头
  9. 递归函数练习:输出菲波拉契(Fibonacci)数列的前N项数据
  10. Raspberry Pi3 ~ 安装samba服务
  11. 小学生之KTV项目文档(bdqn)
  12. 安装Sublime Text 3插件的方法:
  13. 17 一个ContentProvider的例子
  14. scrapy爬虫学习系列二:scrapy简单爬虫样例学习
  15. Web前端开发标准规范
  16. JDBC四种驱动程序
  17. [原创]K8Cscan插件之Windows密码爆破
  18. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展
  19. DELPHI动态创建窗体
  20. citus 多租户应用开发(来自官方文档)

热门文章

  1. 搭建hadpoot平台(集群式分布)
  2. 转 Python3 错误和异常/ Python学习之错误调试和测试
  3. 转 Logs are not shipped to the physical standby database
  4. android Activity启动过程(一)从startActivty开始说起
  5. Linux 文件锁flock 实现两个进程相互监听存活状态
  6. php 自带加密、解密函数
  7. 零度4W1H提问规则
  8. [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging.
  9. Version Control&Git
  10. css3之移动平台资源