• ceph-mimic版


    Ceph架构介绍

    Ceph使用RADOS提供对象存储,通过librados封装库提供多种存储方式的文件和对象转换。外层通过RGW(Object,有原生的API,而且也兼容Swift和S3的API,适合单客户端使用)、RBD(Block,支持精简配置、快照、克隆,适合多客户端有目录结构)、CephFS(File,Posix接口,支持快照,社会和更新变动少的数据,没有目录结构不能直接打开)将数据写入存储。

    • 高性能 a. 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高 b.考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等 c. 能够支持上千个存储节点的规模,支持TB到PB级的数据

    • 高可扩展性 a. 去中心化 b. 扩展灵活 c. 随着节点增加而线性增长

    • 特性丰富 a. 支持三种存储接口:块存储、文件存储、对象存储 b. 支持自定义接口,支持多种语言驱动

    Ceph核心概念

    RADOS

    全称Reliable Autonomic Distributed Object Store,即可靠的、自动化的、分布式对象存储系统。RADOS是Ceph集群的精华,用户实现数据分配、Failover等集群操作。

    Librados

    Rados提供库,因为RADOS是协议很难直接访问,因此上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、Java、Python、C和C++支持。

    Crush

    Crush算法是Ceph的两大创新之一,通过Crush算法的寻址操作,Ceph得以摒弃了传统的集中式存储元数据寻址方案。而Crush算法在一致性哈希基础上很好的考虑了容灾域的隔离,使得Ceph能够实现各类负载的副本放置规则,例如跨机房、机架感知等。同时,Crush算法有相当强大的扩展性,理论上可以支持数千个存储节点,这为Ceph在大规模云环境中的应用提供了先天的便利。

    Pool

    Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略,支持两种类型:副本(replicated)和 纠删码( Erasure Code);

    PG

    PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略,简单点说就是相同PG内的对象都会放到相同的硬盘上,PG是 ceph的逻辑概念,服务端数据均衡和恢复的最小粒度就是PG,一个PG包含多个OSD。引入PG这一层其实是为了更好的分配数据和定位数据;

    Object

    简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储。最底层的存储单元,包含元数据和原始数据。

    Ceph核心组件

    OSD

    OSD是负责物理存储的进程,一般配置成和磁盘一一对应,一块磁盘启动一个OSD进程。主要功能是存储数据、复制数据、平衡数据、恢复数据,以及与其它OSD间进行心跳检查,负责响应客户端请求返回具体数据的进程等;

    Pool、PG和OSD的关系:

    • 一个Pool里有很多PG;

    • 一个PG里包含一堆对象,一个对象只能属于一个PG;

    • PG有主从之分,一个PG分布在不同的OSD上(针对三副本类型);

    Monitor

    一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos同步数据,用来保存OSD的元数据。负责坚实整个Ceph集群运行的Map视图(如OSD Map、Monitor Map、PG Map和CRUSH Map),维护集群的健康状态,维护展示集群状态的各种图表,管理集群客户端认证与授权;

    MDS

    MDS全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。负责保存文件系统的元数据,管理目录结构。对象存储和块设备存储不需要元数据服务;

    Mgr

    ceph 官方开发了 ceph-mgr,主要目标实现 ceph 集群的管理,为外界提供统一的入口。例如cephmetrics、zabbix、calamari、promethus

    RGW

    RGW全称RADOS gateway,是Ceph对外提供的对象存储服务,接口与S3和Swift兼容。

    Admin

    Ceph常用管理接口通常都是命令行工具,如rados、ceph、rbd等命令,另外Ceph还有可以有一个专用的管理节点,在此节点上面部署专用的管理工具来实现近乎集群的一些管理工作,如集群部署,集群组件管理等。

    Ceph三种存储类型

    1、 块存储(RBD)
    • 优点:

      • 通过Raid与LVM等手段,对数据提供了保护;

      • 多块廉价的硬盘组合起来,提高容量;

      • 多块磁盘组合出来的逻辑盘,提升读写效率;

    • 缺点:

      • 采用SAN架构组网时,光纤交换机,造价成本高;

      • 主机之间无法共享数据;

    • 使用场景

      • docker容器、虚拟机磁盘存储分配;

      • 日志存储;

      • 文件存储;

    2、文件存储(CephFS)
    • 优点:

      • 造价低,随便一台机器就可以了;

      • 方便文件共享;

    • 缺点:

      • 读写速率低;

      • 传输速率慢;

    • 使用场景

      • 日志存储;

      • FTP、NFS;

      • 其它有目录结构的文件存储

    3、对象存储(Object)(适合更新变动较少的数据)
    • 优点:

      • 具备块存储的读写高速;

      • 具备文件存储的共享等特性;

    • 使用场景

      • 图片存储;

      • 视频存储;

    Ceph版本选择

    Ceph 社区最新版本是 14,而 Ceph 12 是市面用的最广的稳定版本。 第一个 Ceph 版本是 0.1 ,要回溯到 2008 年 1 月。多年来,版本号方案一直没变,直到 2015 年 4 月 0.94.1 ( Hammer 的第一个修正版)发布后,为了避免 0.99 (以及 0.100 或 1.00 ?),制定了新策略。

    x.0.z - 开发版(给早期测试者和勇士们)

    x.1.z - 候选版(用于测试集群、高手们)

    x.2.z - 稳定、修正版(给用户们)

    x 将从 9 算起,它代表 Infernalis ( I 是第九个字母),这样第九个发布周期的第一个开发版就是 9.0.0 ;后续的开发版依次是 9.0.1 、 9.0.2 等等。

    版本名称版本号发布时间
    Argonaut 0.48版本(LTS) 2012年6月3日
    Bobtail 0.56版本(LTS) 2013年5月7日
    Cuttlefish 0.61版本 2013年1月1日
    Dumpling 0.67版本(LTS) 2013年8月14日
    Emperor 0.72版本 2013年11月9
    Firefly 0.80版本(LTS) 2014年5月
    Giant Giant October 2014 - April 2015
    Hammer Hammer April 2015 - November 2016
    Infernalis Infernalis November 2015 - June 2016
    Jewel 10.2.9 2016年4月
    Kraken 11.2.1 2017年10月
    Luminous 12.2.12 2017年10月
    mimic 13.2.7 2018年5月
    nautilus 14.2.5 2019年2月

    mimic新版本特性

    • Bluestore

      • ceph-osd的新后端存储BlueStore已经稳定,是新创建的OSD的默认设置。 BlueStore通过直接管理物理HDD或SSD而不使用诸如XFS的中间文件系统,来管理每个OSD存储的数据,这提供了更大的性能和功能。

      • BlueStore支持Ceph存储的所有的完整的数据和元数据校验。

      • BlueStore内嵌支持使用zlib,snappy或LZ4进行压缩。(Ceph还支持zstd进行RGW压缩,但由于性能原因,不为BlueStore推荐使用zstd)

    • 集群的总体可扩展性有所提高。我们已经成功测试了多达10,000个OSD的集群。

    • ceph-mgr

      • ceph-mgr是一个新的后台进程,这是任何Ceph部署的必须部分。虽然当ceph-mgr停止时,IO可以继续,但是度量不会刷新,并且某些与度量相关的请求(例如,ceph df)可能会被阻止。我们建议您多部署ceph-mgr的几个实例来实现可靠性。

      • ceph-mgr守护进程daemon包括基于REST的API管理。注:API仍然是实验性质的,目前有一些限制,但未来会成为API管理的基础。

      • ceph-mgr还包括一个Prometheus插件。

      • ceph-mgr现在有一个Zabbix插件。使用zabbix_sender,它可以将集群故障事件发送到Zabbix Server主机。这样可以方便地监视Ceph群集的状态,并在发生故障时发送通知。

    安装前准备
    • 最少三台Centos7系统虚拟机用于部署Ceph集群。硬件配置:2C4G,另外每台机器最少挂载三块硬盘(每块盘5G) cephnode01 192.168.0.132 cephnode02 192.168.0.133 cephnode03 192.168.0.134

    环境准备(在Ceph三台机器上操作)

    1)关闭防火墙:
    systemctl stop firewalld
    systemctl disable firewalld
    (2)关闭selinux:
    sed -i 's/enforcing/disabled/' /etc/selinux/config
    setenforce 03)关闭NetworkManager
    systemctl disable NetworkManager && systemctl stop NetworkManager
    (4)添加主机名与IP对应关系:
    vim /etc/hosts
    192.168.0.201 cephnode01
    192.168.0.202 cephnode02
    192.168.0.203 cephnode03
    (5)设置主机名:
    hostnamectl set-hostname cephnode01
    hostnamectl set-hostname cephnode02
    hostnamectl set-hostname cephnode03
    (6)同步网络时间和修改时区
    systemctl restart chronyd.service && systemctl enable chronyd.service
    cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    (7)设置文件描述符
    echo "ulimit -SHn 102400" >> /etc/rc.local
    cat >> /etc/security/limits.conf << EOF
    * soft nofile 65535
    * hard nofile 65535
    EOF
    (8)内核参数优化
    cat >> /etc/sysctl.conf << EOF
    kernel.pid_max = 4194303
    vm.swappiness = 0 
    EOF
    sysctl -p
    (9)在cephnode01上配置免密登录到cephnode02、cephnode03
    ssh-copy-id root@cephnode02
    ssh-copy-id root@cephnode03
    (10)read_ahead,通过数据预读并且记载到随机访问内存方式提高磁盘读操作
    echo "8192" > /sys/block/sda/queue/read_ahead_kb
    (11) I/O Scheduler,SSD要用noop,SATA/SAS使用deadline
    echo "deadline" >/sys/block/sd[x]/queue/scheduler
    echo "noop" >/sys/block/sd[x]/queue/scheduler
    安装Ceph集群

    编辑内网yum源,将yum源同步到其它节点并提前做好yum makecache

    # vim /etc/yum.repos.d/ceph.repo 
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/$basearch
    gpgcheck=0
    priority=1
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch
    gpgcheck=0
    priority=1
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://mirrors.aliyun.com/ceph/rpm-mimic/el7/SRPMS
    gpgcheck=0
    priority=1

    安装ceph-deploy,在node01执行(确认ceph-deploy版本是否为2.0.1,)

    # yum install -y ceph-deploy
    
    # ceph-deploy --version
    Traceback (most recent call last):
      File "/usr/bin/ceph-deploy", line 18, in <module>
        from ceph_deploy.cli import main
      File "/usr/lib/python2.7/site-packages/ceph_deploy/cli.py", line 1, in <module>
        import pkg_resources
    ImportError: No module named pkg_resources
    
    解决报错
    # yum install ceph-deploy python-pip python-setuptools -y
    # ceph-deploy --version
    2.0.1

    创建一个my-cluster目录,所有命令在此目录下进行,在node01执行(文件位置和名字可以随意)

    # mkdir /my-cluster
    # cd /my-cluster

    创建一个Ceph集群,在node01执行

    # ceph-deploy new cephnode01 cephnode02 cephnode03 

    安装Ceph软件(每个节点执行)

    # yum -y install epel-release
    # yum install -y ceph

    生成monitor检测集群所使用的的秘钥

    # ceph-deploy mon create-initial

    安装Ceph CLI,方便执行一些管理命令

    # ceph-deploy admin cephnode01 cephnode02 cephnode03

    配置mgr,用于管理集群

    # ceph-deploy mgr create cephnode01 cephnode02 cephnode03

    部署rgw

    # yum install -y ceph-radosgw
    # ceph-deploy rgw create cephnode01

    部署MDS(CephFS)

    # ceph-deploy mds create cephnode01 cephnode02 cephnode03 

    添加osd

    for dev in /dev/sdb /dev/sdc /dev/sdd
    do
      ceph-deploy osd create cephnode01 --data $dev
      ceph-deploy osd create cephnode02 --data $dev
      ceph-deploy osd create cephnode03 --data $dev
    done

    查看

    [root@cephnode01 my-cluster]# ceph -s
    cluster:
    id: f23ede63-7119-47b2-8f3b-d52797d16a03
    health: HEALTH_OK

    services:
    mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03
    mgr: cephnode01(active), standbys: cephnode02, cephnode03
    osd: 9 osds: 9 up, 9 in

    data:
    pools: 5 pools, 96 pgs
    objects: 187 objects, 1.1 KiB
    usage: 9.1 GiB used, 171 GiB / 180 GiB avail
    pgs: 96 active+clean

    [root@cephnode01 my-cluster]# ceph osd tree
    ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
    -1 0.17537 root default
    -3 0.05846 host cephnode01
    0 hdd 0.01949 osd.0 up 1.00000 1.00000
    3 hdd 0.01949 osd.3 up 1.00000 1.00000
    6 hdd 0.01949 osd.6 up 1.00000 1.00000
    -5 0.05846 host cephnode02
    1 hdd 0.01949 osd.1 up 1.00000 1.00000
    4 hdd 0.01949 osd.4 up 1.00000 1.00000
    7 hdd 0.01949 osd.7 up 1.00000 1.00000
    -7 0.05846 host cephnode03
    2 hdd 0.01949 osd.2 up 1.00000 1.00000
    5 hdd 0.01949 osd.5 up 1.00000 1.00000
    8 hdd 0.01949 osd.8 up 1.00000 1.00000

    ceph.conf

    1、该配置文件采用init文件语法,#和;为注释,ceph集群在启动的时候会按照顺序加载所有的conf配置文件。 配置文件分为以下几大块配置。

    global:全局配置。
    osd:osd专用配置,可以使用osd.N,来表示某一个OSD专用配置,N为osd的编号,如0、2、1等。
    mon:mon专用配置,也可以使用mon.A来为某一个monitor节点做专用配置,其中A为该节点的名称,ceph-monitor-2、ceph-monitor-1等。使用命令 ceph mon dump可以获取节点的名称。
    client:客户端专用配置。

    2、配置文件可以从多个地方进行顺序加载,如果冲突将使用最新加载的配置,其加载顺序为。

    $CEPH_CONF环境变量
    -c 指定的位置
    /etc/ceph/ceph.conf
    ~/.ceph/ceph.conf
    ./ceph.conf

    3、配置文件还可以使用一些元变量应用到配置文件,如。

    $cluster:当前集群名。
    $type:当前服务类型。
    $id:进程的标识符。
    $host:守护进程所在的主机名。
    $name:值为$type.$id。

    4、ceph.conf详细参数

    [global]#全局设置
    fsid = xxxxxxxxxxxxxxx                           #集群标识ID 
    mon host = 10.0.1.1,10.0.1.2,10.0.1.3            #monitor IP 地址
    auth cluster required = cephx                    #集群认证
    auth service required = cephx                           #服务认证
    auth client required = cephx                            #客户端认证
    osd pool default size = 3                             #最小副本数 默认是3
    osd pool default min size = 1                           #PG 处于 degraded 状态不影响其 IO 能力,min_size是一个PG能接受IO的最小副本数
    public network = 10.0.1.0/24                            #公共网络(monitorIP段) 
    cluster network = 10.0.2.0/24                           #集群网络
    max open files = 131072                                 #默认0#如果设置了该选项,Ceph会设置系统的max open fds
    mon initial members = node1, node2, node3               #初始monitor (由创建monitor命令而定)
    ##############################################################
    [mon]
    mon data = /var/lib/ceph/mon/ceph-$id
    mon clock drift allowed = 1                             #默认值0.05#monitor间的clock drift
    mon osd min down reporters = 13                         #默认值1#向monitor报告down的最小OSD数
    mon osd down out interval = 600      #默认值300      #标记一个OSD状态为down和out之前ceph等待的秒数
    ##############################################################
    [osd]
    osd data = /var/lib/ceph/osd/ceph-$id
    osd mkfs type = xfs                                     #格式化系统类型
    osd max write size = 512 #默认值90                   #OSD一次可写入的最大值(MB)
    osd client message size cap = 2147483648 #默认值100    #客户端允许在内存中的最大数据(bytes)
    osd deep scrub stride = 131072 #默认值524288         #在Deep Scrub时候允许读取的字节数(bytes)
    osd op threads = 16 #默认值2                         #并发文件系统操作数
    osd disk threads = 4 #默认值1                        #OSD密集型操作例如恢复和Scrubbing时的线程
    osd map cache size = 1024 #默认值500                 #保留OSD Map的缓存(MB)
    osd map cache bl size = 128 #默认值50                #OSD进程在内存中的OSD Map缓存(MB)
    osd mount options xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier" #默认值rw,noatime,inode64  #Ceph OSD xfs Mount选项
    osd recovery op priority = 2 #默认值10              #恢复操作优先级,取值1-63,值越高占用资源越高
    osd recovery max active = 10 #默认值15              #同一时间内活跃的恢复请求数 
    osd max backfills = 4  #默认值10                  #一个OSD允许的最大backfills数
    osd min pg log entries = 30000 #默认值3000           #修建PGLog是保留的最大PGLog数
    osd max pg log entries = 100000 #默认值10000         #修建PGLog是保留的最大PGLog数
    osd mon heartbeat interval = 40 #默认值30            #OSD ping一个monitor的时间间隔(默认30s)
    ms dispatch throttle bytes = 1048576000 #默认值 104857600 #等待派遣的最大消息数
    objecter inflight ops = 819200 #默认值1024           #客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限
    osd op log threshold = 50 #默认值5                  #一次显示多少操作的log
    osd crush chooseleaf type = 0 #默认值为1              #CRUSH规则用到chooseleaf时的bucket的类型
    ##############################################################
    [client]
    rbd cache = true #默认值 true      #RBD缓存
    rbd cache size = 335544320 #默认值33554432           #RBD缓存大小(bytes)
    rbd cache max dirty = 134217728 #默认值25165824      #缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through
    rbd cache max dirty age = 30 #默认值1                #在被刷新到存储盘前dirty数据存在缓存的时间(seconds)
    rbd cache writethrough until flush = false #默认值true  #该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写
                  #设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。
    rbd cache max dirty object = 2 #默认值0              #最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分
          #每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能
    rbd cache target dirty = 235544320 #默认值16777216    #开始执行回写过程的脏数据大小,不能超过 rbd_cache_max_dirty

     RBD

    RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。如下是对Ceph RBD的理解。

    • RBD 就是 Ceph 里的块设备,一个 4T 的块设备的功能和一个 4T 的 SATA 类似,挂载的 RBD 就可以当磁盘用;

    • resizable:这个块可大可小;

    • data striped:这个块在Ceph里面是被切割成若干小块来保存,不然 1PB 的块怎么存的下;

    • thin-provisioned:精简置备,1TB 的集群是能创建无数 1PB 的块的。其实就是块的大小和在 Ceph 中实际占用大小是没有关系的,刚创建出来的块是不占空间,今后用多大空间,才会在 Ceph 中占用多大空间。举例:你有一个 32G 的 U盘,存了一个2G的电影,那么 RBD 大小就类似于 32G,而 2G 就相当于在 Ceph 中占用的空间 ;

    块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。

    ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务,云平台可以使用rbd作为云的存储后端提供镜像存储、volume块或者客户的系统引导盘等。

    使用场景:

    • 云平台(OpenStack做为云的存储后端提供镜像存储)

    • K8s容器

    • map成块设备直接使用

    • ISCIS,安装Ceph客户端

    RBD常用命令
    命令功能
    rbd create 创建块设备映像
    rbd ls 列出 rbd 存储池中的块设备
    rbd info 查看块设备信息
    rbd diff 可以统计 rbd 使用量
    rbd map 映射块设备
    rbd showmapped 查看已映射块设备
    rbd remove 删除块设备
    rbd resize 更改块设备的大小
    RBD配置操作
    RBD挂载到操作系统
    1、创建rbd使用的pool
    # ceph osd pool create rbd  32 32
    # ceph osd pool application enable rbd rbd 
    
    2、创建一个块设备
    # rbd create --size 10240 image01 
    
    3、查看块设备
    # rbd ls
    # rbd info image01
    
    4、将块设备映射到系统内核
    # rbd map image01 
    
    5、禁用当前系统内核不支持的feature
    # rbd feature disable foo_image exclusive-lock, object-map, fast-diff, deep-flatten
    
    6、再次映射
    # rbd map image01 
    
    7、格式化块设备镜像
    # mkfs.xfs /dev/rbd0
    
    8、mount到本地
    # mount /dev/rbd0 /mnt
    # umount /mnt
    
    9、取消块设备和内核映射
    # rbd unmap image01 
    
    10、删除RBD块设备
    # rbd rm image01
    快照配置
    创建快照
    rbd create --size 10240 image02
    rbd snap create image02@image02_snap01
    
    列出创建的快照
    # rbd snap list image02
    # rbd ls -l
    
    查看快照信息
    # rbd info image02@image02_snap01
    
    克隆快照(快照必须处于被保护状态才能被克隆)
    # rbd snap protect image02@image02_snap01
    # rbd clone rbd/image02@image02_snap01 kube/image02_clone01
    
    查看快照的children
    # rbd children image02
    
    去掉快照的parent
    # rbd flatten kube/image02_clone01
    
    恢复快照
    # rbd snap rollback image02@image02_snap01
    
    删除快照
    # rbd snap unprotect image02@image02_snap01
    # rbd snap remove image02@image02_snap01
    导出导入RBD镜像
    导出rbd镜像
    # rbd export image02 /tmp/image02
    
    导入
    # rbd import /tmp/image02 rbd/image02 --image-format 2

    CephFs

    Ceph File System (CephFS) 是与 POSIX 标准兼容的文件系统, 能够提供对 Ceph 存储集群上的文件访问. Jewel 版本 (10.2.0) 是第一个包含稳定 CephFS 的 Ceph 版本. CephFS 需要至少一个元数据服务器 (Metadata Server - MDS) daemon (ceph-mds) 运行, MDS daemon 管理着与存储在 CephFS 上的文件相关的元数据, 并且协调着对 Ceph 存储系统的访问。

    对象存储的成本比起普通的文件存储还是较高,需要购买专门的对象存储软件以及大容量硬盘。如果对数据量要求不是海量,只是为了做文件共享的时候,直接用文件存储的形式好了,性价比高。

    二、CephFS 架构

    底层是核心集群所依赖的, 包括:

    • OSDs (ceph-osd): CephFS 的数据和元数据就存储在 OSDs 上

    • MDS (ceph-mds): Metadata Servers, 管理着 CephFS 的元数据

    • Mons (ceph-mon): Monitors 管理着集群 Map 的主副本 Ceph 存储集群的协议层是 Ceph 原生的 librados 库, 与核心集群交互.

    CephFS 库层包括 CephFS 库 libcephfs, 工作在 librados 的顶层, 代表着 Ceph 文件系统.最上层是能够访问 Ceph 文件系统的两类客户端.

    三、配置 CephFS MDS

    要使用 CephFS, 至少就需要一个 metadata server 进程。可以手动创建一个 MDS, 也可以使用 ceph-deploy 或者 ceph-ansible 来部署 MDS。

    登录到ceph-deploy工作目录执行
    # ceph-deploy mds create $hostname
    四、部署Ceph文件系统

    部署一个 CephFS, 步骤如下:

    1. 在一个 Mon 节点上创建 Ceph 文件系统.

    2. 若使用 CephX 认证,需要创建一个访问 CephFS 的客户端

    3. 挂载 CephFS 到一个专用的节点.

      • 以 kernel client 形式挂载 CephFS

      • 以 FUSE client 形式挂载 CephFS

    1、创建一个 Ceph 文件系统

    1、CephFS 需要两个 Pools - cephfs-data 和 cephfs-metadata, 分别存储文件数据和文件元数据

    # ceph osd pool create cephfs-data 16 16
    # ceph osd pool create cephfs-metadata 16 16

    注:一般 metadata pool 可以从相对较少的 PGs 启动, 之后可以根据需要增加 PGs. 因为 metadata pool 存储着 CephFS 文件的元数据, 为了保证安全, 最好有较多的副本数. 为了能有较低的延迟, 可以考虑将 metadata 存储在 SSDs 上.

    2、创建一个 CephFS, 名字为 cephfs:

    # ceph fs new cephfs cephfs-metadata cephfs-data

    3、验证至少有一个 MDS 已经进入 Active 状态

    ceph fs status cephfs

    4、在 Monitor 上, 创建一个用户,用于访问CephFs

    # ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'

    5、验证key是否生效

    ceph auth get client.cephfs

    6、检查CephFs和mds状态

    ceph mds stat
    ceph fs ls
    ceph fs status
    以 kernel client 形式挂载 CephFS

    创建挂载目录 cephfs

    # mkdir /cephfs

    挂载目录

    # mount -t ceph 192.168.0.132:6789,192.168.0.133:6789,192.168.0.134:6789:/ /cephfs/ -o name=cephfs,secret=AQDHjeddHlktJhAAxDClZh9mvBxRea5EI2xD9w==

    自动挂载

    # echo "mon1:6789,mon2:6789,mon3:6789:/ /cephfs ceph name=cephfs,secretfile=/etc/ceph/cephfs.key,_netdev,noatime 0 0" | sudo tee -a /etc/fstab

    验证

    # stat -f /cephfs
    以 FUSE client 形式挂载 CephFS
    安装ceph-common
    yum install -y ceph-common
    
    安装ceph-fuse
    yum install -y ceph-fuse
    
    将集群的ceph.conf拷贝到客户端
    scp root@192.168.0.132:/etc/ceph/ceph.conf /etc/ceph/
    chmod 644 /etc/ceph/ceph.conf
    
    使用 ceph-fuse 挂载 CephFS
    ceph-fuse --keyring  /etc/ceph/ceph.client.cephfs.keyring  --name client.cephfs -m 192.168.0.132:6789,192.168.0.133:6789,192.168.0.134:6789  /cephfs/
    
    验证 CephFS 已经成功挂载
    stat -f /cephfs
    
    自动挂载
    echo "none /cephfs fuse.ceph ceph.id=cephfs[,ceph.conf=/etc/ceph/ceph.conf],_netdev,defaults 0 0"| sudo tee -a /etc/fstab
    或
    echo "id=cephfs,conf=/etc/ceph/ceph.conf /mnt/ceph2  fuse.ceph _netdev,defaults 0 0"| sudo tee -a /etc/fstab

    卸载
    fusermount -u /cephfs

    MDS主备与主主切换

    配置主主模式
    • 当cephfs的性能出现在MDS上时,就应该配置多个活动的MDS。通常是多个客户机应用程序并行的执行大量元数据操作,并且它们分别有自己单独的工作目录。这种情况下很适合使用多主MDS模式。

    • 配置MDS多主模式 每个cephfs文件系统都有一个max_mds设置,可以理解为它将控制创建多少个主MDS。注意只有当实际的MDS个数大于或等于max_mds设置的值时,mdx_mds设置才会生效。例如,如果只有一个MDS守护进程在运行,并且max_mds被设置为两个,则不会创建第二个主MDS。

    # ceph fs set cephfs max_mds 2

    配置备用MDS 即使有多个活动的MDS,如果其中一个MDS出现故障,仍然需要备用守护进程来接管。因此,对于高可用性系统,实际配置max_mds时,最好比系统中MDS的总数少一个。

    但如果你确信你的MDS不会出现故障,可以通过以下设置来通知ceph不需要备用MDS,否则会出现insufficient standby daemons available告警信息:

    # ceph fs set <fs> standby_count_wanted 0 
    还原单主MDS
    设置max_mds
    # ceph fs set max_mds 1
    
    删除不需要的rank
    ceph mds deactivate cephfs:2

    Ceph Dashboard介绍

    Ceph 的监控可视化界面方案很多----grafana、Kraken。但是从Luminous开始,Ceph 提供了原生的Dashboard功能,通过Dashboard可以获取Ceph集群的各种基本状态信息。 mimic版 (nautilus版) dashboard 安装。如果是 (nautilus版) 需要安装 ceph-mgr-dashboard

    配置Ceph Dashboard
    1、在每个mgr节点安装
    # yum install ceph-mgr-dashboard 
    2、开启mgr功能
    # ceph mgr module enable dashboard
    3、生成并安装自签名的证书
    # ceph dashboard create-self-signed-cert  
    4、创建一个dashboard登录用户名密码
    # ceph dashboard set-login-credentials admin admin 
    5、查看服务访问方式
    # ceph mgr services
    修改默认配置命令
    指定集群dashboard的访问端口
    # ceph config-key set mgr/dashboard/server_port 7000
    指定集群 dashboard的访问IP
    # ceph config-key set mgr/dashboard/server_addr $IP
    开启Object Gateway管理功能
    1、创建rgw用户
    # radosgw-admin user create --uid=user01 --display-name=user01 --system
    2、提供Dashboard证书
    # ceph dashboard set-rgw-api-access-key $access_key
    # ceph dashboard set-rgw-api-secret-key $secret_key
    3、配置rgw主机名和端口
    # ceph dashboard set-rgw-api-host 192.168.0.132
    # ceph dashboard set-rgw-api-port 7480
    4、刷新web页面
  • 相关阅读:
    字符串系列——Immediate Decodability
    Java I/O流操作(四)对象的序列化
    table自动拉伸在chrome与IE中的区别
    【web开发】spring+hibernate4支持中文排序
    SQL批量重命名中文字段名为对应拼音首字母字段名脚本
    Hibernate执行查询后又立马执行了更新(defaultaccess)
    上传图片之上传前预览图片
    挖掘FPTree
    Linux下Json库的编译及代码测试
    C语言中的位运算和逻辑运算
  • 原文地址:https://www.cnblogs.com/yuezhimi/p/13048873.html
Copyright © 2020-2023  润新知