Ceph分布式存储实战——Ceph存储配置(CephFS的挂载)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ceph分布式存储实战——Ceph存储配置(CephFS的挂载)相关的知识,希望对你有一定的参考价值。
一、什么是POSIX标准有一种情况是,在windows上写的代码,放到Linux上去运行居然报错,为什么?
比如在代码中需要创建一个进程,linux下是fork函数,windows下是creatprocess函数,可我是在windows上写的代码,自然调用的是creatprocess函数
但是我将代码拿到linux上运行,linux内核提供的系统调用根本就没有creatprocess函数。怎么可能会不报错呢?对吧?
一定要注意,不同的内核提供的系统调用(也就是一个函数)是不同的。
因此,posix标准的出现就是为了解决这个问题。linux内核和windows内核提供的系统调用都要实现基本的posix标准,这样就方便移植了。
二、什么是CephFS
CephFS也称ceph文件系统,他是一个POSIX兼容的分布式文件系统。
三、实现ceph文件系统的要求
1、需要一个已经正常运行的ceph集群
2、至少包含一个ceph元数据服务器(MDS)
为什么ceph文件系统依赖于MDS?为毛线?
因为:
Ceph 元数据服务器( MDS )为 Ceph 文件系统存储元数据。
元数据服务器使得POSIX 文件系统的用户们,可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。
问题又来了,什么是元数据?
可以简单的理解为它是描述数据的数据,意思就是描述数据的信息,比如,数据的大小、位置、属性等等信息
【可以在不对 Ceph 存储集群造成负担的前提下,执行诸如 ls、find 等基本命令。】意思就是说
在执行数据搜索和查看的时候,首先查找的是元数据,通过元数据中的描述信息准确且快速的找到数据。
而不用大费周章的在整个集群的osd上查找
通常,客户端向cephfs发起I/O时,过程大概为两步:
1、client端与mds节点通讯,获取metadata信息(metadata也存在osd上)
2、client直接写数据到osd
四、挂载ceph文件系统的方式
支持两种方式
1、使用本地系统内核驱动程序进行挂载
2、使用ceph fuse进行挂载
五、创建mds
要运行 Ceph 文件系统,你必须先装起至少带一个 Ceph 元数据服务器的 Ceph 存储集群。
我这里让ceph-node1,ceph-node2,ceph-node3 这三个节点都成为mds的角色
在管理节点上,通过ceph-deploy工具进行部署,执行命令如下
[[email protected] ~]# cd my-cluster/ #进入存放了ceph集群配置文件的目录
[[email protected] my-cluster]# ceph-deploy mds create ceph-node1 ceph-node2 ceph-node3 #开始创建mds
六、创建CephFS
注意:
1、但是当前一套集群只能有一个文件系统存在。
2、一个 Ceph 文件系统需要至少两个 RADOS 存储池,一个用于数据、一个用于元数据。配置这些存储池时需考虑:
2.1 为元数据存储池设置较高的副本水平,因为此存储池丢失任何数据都会导致整个文件系统失效。
2.2 为元数据存储池分配低延时存储器(像 SSD ),因为它会直接影响到客户端的操作延时。
6.1 创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
*少于 5 个 OSD 时可把 pg_num 设置为 128
*OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
*OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
*OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
*自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
[[email protected] ~]# ceph osd pool create cephfs_data 128 #创建存储数据的存储池,128是PG数量
pool 'cephfs_data' created
[[email protected] ~]# ceph osd pool create cephfs_metadata 128 #创建存储元数据的存储池
pool 'cephfs_metadata' created
[[email protected] ~]# ceph osd lspools #查看池
0 rbd,1 HPC_Pool,2 my-test-pool,3 cephfs_data,4 cephfs_metadata,
[[email protected] ~]#
6.2 创建文件系统
创建好存储池后,你就可以用 fs new 命令创建文件系统了:
[[email protected] ~]# ceph fs new mycephfs cephfs_metadata cephfs_data #开始执行创建,mycephfs是名字
new fs with metadata pool 4 and data pool 3
[[email protected] ~]# ceph fs ls #查看创建后的cephfs
name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
6.4 查看mds节点状态
[[email protected] ~]# ceph mds stat
e45: 1/1/1 up {0=ceph-node3=up:active}, 2 up:standby #ceph-node3是活跃的,那么其他两个是处于热备份的状态
文件系统创建完毕后, MDS 服务器就能达到 active 状态了,比如在一个单 MDS 系统中
建好文件系统且 MDS 活跃后,你就可以挂载此文件系统了
七、使用内核驱动程序挂载CephFs
1、在ceph-client1客户端节点上创建挂载点目录
[[email protected] ~]# mkdir /mnt/mycephfs
2、查看管理员秘钥
因为要挂载启用了 cephx 认证的 Ceph 文件系统,所以必须指定用户名、密钥。
[[email protected] ~]# cd /etc/ceph/
[[email protected] ceph]# cat ceph.client.admin.keyring
[client.admin]
key = AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA== #这个就是管理员的秘钥,等会挂载的时候用得上
caps mds = "allow *"
caps mon = "allow *"
caps osd = "allow *"
3、使用linux的mount命令挂载cephfs
[[email protected] mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secret=AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==
4、用df -h命令查看挂载情况
[[email protected] mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0
192.168.89.103:6789:/ 45G 436M 45G 1% /mnt/mycephfs #这个就是挂载好的cephfs
5、卸载cephfs
[[email protected] mnt]# umount /mnt/mycephfs
[[email protected] mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0
6、以更安全的方式挂载
用法会把密码遗留在 Bash 历史里,更安全的方法是从文件读密码
将admin的秘钥保存到文件里
[[email protected] mnt]# echo "AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==" > /etc/ceph/admin.secret
[[email protected] mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
[[email protected] mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 471M 0 471M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 6.6M 477M 2% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/mapper/cl-root 8.0G 1.5G 6.5G 19% /
/dev/sda1 1014M 186M 829M 19% /boot
/dev/rbd0 10G 33M 10G 1% /mnt/ceph-vol1
tmpfs 97M 0 97M 0% /run/user/0
192.168.89.103:6789:/ 45G 436M 45G 1% /mnt/mycephfs #这个就是挂载好的cephfs
以上是关于Ceph分布式存储实战——Ceph存储配置(CephFS的挂载)的主要内容,如果未能解决你的问题,请参考以下文章