Ceph分布式存储实战(6)——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工具进行部署,执行命令如下
    [root@ceph-node1 ~]# cd my-cluster/ #进入存放了ceph集群配置文件的目录
    [root@ceph-node1 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 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
        
        [root@ceph-node2 ~]# ceph osd pool create cephfs_data 128 #创建存储数据的存储池,128是PG数量
        pool 'cephfs_data' created
        [root@ceph-node2 ~]#  ceph osd pool create cephfs_metadata 128 #创建存储元数据的存储池
        pool 'cephfs_metadata' created
        [root@ceph-node2 ~]# ceph osd lspools #查看池
        0 rbd,1 HPC_Pool,2 my-test-pool,3 cephfs_data,4 cephfs_metadata,
        [root@ceph-node2 ~]# 
    
    6.2 创建文件系统
    创建好存储池后,你就可以用 fs new 命令创建文件系统了:
    [root@ceph-node2 ~]# ceph fs new mycephfs cephfs_metadata cephfs_data #开始执行创建,mycephfs是名字
    new fs with metadata pool 4 and data pool 3
    [root@ceph-node2 ~]# ceph fs ls #查看创建后的cephfs
    name: mycephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
    
    6.4 查看mds节点状态
    [root@ceph-node2 ~]#  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客户端节点上创建挂载点目录
    [root@ceph-client1 ~]# mkdir /mnt/mycephfs
    
    
    2、查看管理员秘钥
    因为要挂载启用了 cephx 认证的 Ceph 文件系统,所以必须指定用户名、密钥。
    [root@ceph-client1 ~]# cd /etc/ceph/
    [root@ceph-client1 ceph]# cat ceph.client.admin.keyring 
    [client.admin]
        key = AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==    #这个就是管理员的秘钥,等会挂载的时候用得上
        caps mds = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
    
    3、使用linux的mount命令挂载cephfs
    [root@ceph-client1 mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secret=AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==
    
    4、用df -h命令查看挂载情况
    [root@ceph-client1 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
    [root@ceph-client1 mnt]# umount /mnt/mycephfs
    [root@ceph-client1 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的秘钥保存到文件里
    [root@ceph-client1 mnt]# echo "AQBOp0xaDyeNGBAAqbEktnUq5GFVF5arsWbesA==" > /etc/ceph/admin.secret
    [root@ceph-client1 mnt]# mount -t ceph 192.168.89.103:6789:/ /mnt/mycephfs -o name=admin,secretfile=/etc/ceph/admin.secret
    [root@ceph-client1 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


八、通过FUSE方式挂载CephFS
    如果内核版本低于2.6.34,那么可以使用ceph的FUSE客户端来进行挂载ceph文件系统
    
    1、在客户端上安装fuse
    [root@ceph-client1 ~]# yum -y install ceph-fuse

    2、创建挂载点目录
    mkdir /mnt/fuse_cephfs/
    
    3、开始挂载
    [root@ceph-client1 mnt]# ceph-fuse -m 192.168.89.103:6789 /mnt/fuse_cephfs/
    ceph-fuse[2254]: starting ceph client
    2018-01-10 21:10:09.116450 7f9f777a9ec0 -1 init, newargv = 0x560707d1c780 newargc=11
    ceph-fuse[2254]: starting fuse
    
    4、查看挂载后的信息
    [root@ceph-client1 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
    tmpfs                 97M     0   97M   0% /run/user/0
    ceph-fuse             45G  444M   45G   1% /mnt/fuse_cephfs
    
    5、我把之前通过kernel驱动程序的挂载方式中的挂载点目录更改为了kernel_cephfs
    并再次执行了挂载后
    [root@ceph-client1 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
    tmpfs                   97M     0   97M   0% /run/user/0
    ceph-fuse               45G  444M   45G   1% /mnt/fuse_cephfs #这是fuse客户端方式挂载
    192.168.89.103:6789:/   45G  444M   45G   1% /mnt/kernel_cephfs #这是kernel的方式挂载
    
    事实证明:这两者可以同时存在,我这里是在同一台机器上,当然更可以在不同的机器上挂载同一个cephfs
                并且,我在/mnt/fuse_cephfs目录下创建了file_fuse_123.txt,然后再到/mnt/kernel_cephfs去查看,也出现了file_fuse_123.txt
                此处证明,cephfs是分布式的且共享型的网络文件系统.
        注意,这两种挂载方式虽然可以在一台机器上同时存在,但是在生产环境中这么做是没有太大意义的。我这里仅仅只是为了测试而已。
                
    6、开机自动挂载cephfs
    如需要开机时自动挂载cephfs,将下面的信息添加到客户端的/etc/fstab中
    id=admin /mnt/fuse_cephfs fuse.ceph defaults 0 0
    
    7、重启客户端的注意事项
        1、重启前最好是先umont调挂载后的文件系统
        2、然后再重启



本文转自 TtrToby 51CTO博客,原文链接:http://blog.51cto.com/freshair/2059383

相关文章
|
28天前
|
存储 分布式计算 大数据
HBase分布式数据库关键技术与实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析了HBase的核心技术,包括数据模型、分布式架构、访问模式和一致性保证,并探讨了其实战应用,如大规模数据存储、实时数据分析及与Hadoop、Spark集成。同时,分享了面试经验,对比了HBase与其他数据库的差异,提出了应对挑战的解决方案,展望了HBase的未来趋势。通过Java API代码示例,帮助读者巩固理解。全面了解和掌握HBase,能为面试和实际工作中的大数据处理提供坚实基础。
47 3
单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)
单向/双向V2G环境下分布式电源与电动汽车充电站联合配置方法(matlab代码)
|
2天前
|
调度
考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法(matlab代码)
考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法(matlab代码)
|
2天前
|
安全
考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型
|
2天前
|
调度
互动环境下分布式电源与电动汽车充电站的优化配置方法研究-全文复现matlab
互动环境下分布式电源与电动汽车充电站的优化配置方法研究-全文复现matlab
|
8天前
|
监控 NoSQL 算法
探秘Redis分布式锁:实战与注意事项
本文介绍了Redis分区容错中的分布式锁概念,包括利用Watch实现乐观锁和使用setnx防止库存超卖。乐观锁通过Watch命令监控键值变化,在事务中执行修改,若键值被改变则事务失败。Java代码示例展示了具体实现。setnx命令用于库存操作,确保无超卖,通过设置锁并检查库存来更新。文章还讨论了分布式锁存在的问题,如客户端阻塞、时钟漂移和单点故障,并提出了RedLock算法来提高可靠性。Redisson作为生产环境的分布式锁实现,提供了可重入锁、读写锁等高级功能。最后,文章对比了Redis、Zookeeper和etcd的分布式锁特性。
108 16
探秘Redis分布式锁:实战与注意事项
|
24天前
|
存储 分布式计算 Hadoop
[绝对要收藏]配置hadoop完全分布式环境
[绝对要收藏]配置hadoop完全分布式环境
23 0
|
2月前
|
缓存 应用服务中间件 数据库
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(多级缓存设计分析)
41 1
|
2月前
|
存储 缓存 监控
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(场景问题分析+性能影响因素)
43 0
|
2月前
|
缓存 监控 负载均衡
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据缓存不一致分析)
35 2