zoukankan      html  css  js  c++  java
  • ceph-文件存储

    文件存储

    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 128
    pool 'cephfs_data' created
    [ceph-admin@ceph-node1 my-cluster]$ ceph osd pool create cephfs_metadata 32
    pool 'cephfs_metadata' created
    [ceph-admin@ceph-node1 my-cluster]$ ceph fs new cephfs cephfs_metadata cephfs_data
    new fs with metadata pool 22 and data pool 21

    查看状态

    [ceph-admin@ceph-node1 my-cluster]$ ceph mds stat
    cephfs-1/1/1 up  {0=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:6789:/ /mnt/cephfs -o name=cephfs,secret=AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==
    [root@localhost ~]# df -h /mnt/cephfs/
    Filesystem            Size  Used Avail Use% Mounted on
    192.168.0.126:6789:/   54G     0   54G   0% /mnt/cephfs

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

    [root@localhost ~]# echo "AQD2EWpcZasXIBAAzcdvbJxrwwgR1eDJHTz1lQ==" > /etc/ceph/cephfskey
    [root@localhost ~]# umount /mnt/cephfs/
    [root@localhost ~]# mount -t ceph ceph-node2:6789:/ /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:6789:/   54G     0   54G   0% /mnt/cephfs

    写入数据测试

    [root@localhost ~]# dd if=/dev/zero of=/mnt/cephfs/file1 bs=1M count=1024
    1024+0 records in
    1024+0 records out
    1073741824 bytes (1.1 GB) copied, 8.76348 s, 123 MB/s
    [root@localhost ~]# ll -h /mnt/cephfs/
    total 1.0G
    -rw-r--r-- 1 root root 1.0G Feb 18 11:56 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:6789 /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:6789 /mnt/cephfs
    ceph-fuse[78183]: starting ceph client
    2019-02-18 12:05:41.922959 7ff1e2ce20c0 -1 init, newargv = 0x55fdbb5c4420 newargc=9
    ceph-fuse[78183]: starting fuse
    [root@localhost ~]# df -h /mnt/cephfs
    Filesystem      Size  Used Avail Use% Mounted on
    ceph-fuse        54G  1.0G   53G   2% /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
    2019-02-18 14:29:48.123645 7f70a8cb50c0 -1 init, newargv = 0x562911bb0150 newargc=11ceph-fuse[78451]: starting ceph client
    
    ceph-fuse[78451]: starting fuse
    [root@localhost ~]# df -h /mnt/cephfs/
    Filesystem      Size  Used Avail Use% Mounted on
    ceph-fuse        54G  1.0G   53G   2% /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 2019-02-18 14:54:56 CST; 14s ago
     Main PID: 37093 (rpcbind)
       CGroup: /system.slice/rpcbind.service
               └─37093 /sbin/rpcbind -w
    
    Feb 18 14:54:56 ceph-node2 systemd[1]: Starting RPC bind service...
    Feb 18 14:54:56 ceph-node2 systemd[1]: 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 = 77;
    
        # 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 = "3";
        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:/       0     0     0    - /mnt/cephnfs
  • 相关阅读:
    centos7修改服务端口(ssh为例)
    VLAN基础知识
    三层交换机与路由器区别
    冲突域和广播域的区分
    LAN口和WAN口的区别是什么?
    内网穿透frp
    linux bash中too many arguments问题的解决方法
    linux日志
    linux服务管理
    OSPF 多区域配置实验
  • 原文地址:https://www.cnblogs.com/yuezhimi/p/10393783.html
Copyright © 2011-2022 走看看