zoukankan      html  css  js  c++  java
  • Ceph分布式存储安装

    Ceph介绍      

             Ceph 是一个能提供文件存储(cephfs)、块存储(rbd)和对象存储(rgw)的分布式存储系统,具有高扩展性、高性能、高可靠性等优点。Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。

    英文文档

    中文文档

    常用分布式存储介绍

    Ceph特点

    • 高性能
      • 摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

      • 考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架等。

      • 能够支持上千个存储节点的规模,支持TB到PB级的数据

    • 高可用性
      • 副本数可以灵活控制。
      • 支持故障域分割,数据强一致性。
      • 多重故障场景自动进行修复自愈。
      • 没有单点故障,自动管理。
    • 高可扩展性
      • 去中心化。
      • 扩展灵活。
      • 随着节点增加而线性增长
    • 特性丰富
      • 支持三种存储接口:块存储、文件存储、对象存储
      • 支持自定义接口,支持多种语言驱动

    Ceph架构


    核心组件

    • 监视器:Ceph Monitor (Ceph -mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD映射、MDS映射和CRUSH映射。这些映射是Ceph守护进程相互协调所需的关键集群状态。监视器还负责管理守护进程和客户机之间的身份验证。通常至少需要三个监视器来实现冗余和高可用性。
    • 管理器:Ceph Manager守护进程(Ceph -mgr)负责跟踪运行时指标和Ceph集群的当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph仪表盘和REST API。高可用性通常需要至少两个管理器。
    • Ceph OSD: Ceph OSD(对象存储守护进程,Ceph - OSD)负责存储数据,处理数据复制、恢复、再平衡,并通过检查其他Ceph OSD进程是否有心跳,为Ceph monitor和manager提供一些监控信息。通常至少需要3个Ceph osd来实现冗余和高可用性。
    • MDS: Ceph元数据服务器(MDS, Ceph - MDS)代表Ceph文件系统(即Ceph块设备和Ceph对象存储不使用MDS)存储元数据。Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls, find等),而不会给Ceph存储集群带来巨大的负担(对象存储和块存储不需要该组件)。

    数据存储流程

    环境准备

           此处使用ceph-deploy工具安装ceph,ceph-deploy是一个集群自动化部署工具,基于ssh方式。

    1、配置主机名解析

    172.29.1.100 HL-1-100
    172.29.1.101 HL-1-101
    172.29.1.102 HL-1-102

    2、配置yum源

    mkdir /etc/yum.repos.d/repo_bak
    mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/repo_bak
    #配置基础源信息
    wget http://mirrors.aliyun.com/repo/Centos-7.repo  -P /etc/yum.repos.d/
    wget http://mirrors.aliyun.com/repo/epel-7.repo -P /etc/yum.repos.d/
    #配置Ceph源
    rpm -ivh https://mirrors.aliyun.com/ceph/rpm-mimic/el7/noarch/ceph-release-1-1.el7.noarch.rpm
    cd /etc/yum.repos.d
    #替换yum源
    sed -i "s;download.ceph.com;mirrors.aliyun.com/ceph;" ceph.repo

     

    开始安装

           以下安装步骤详情可见官网:https://docs.ceph.com/en/latest/man/8/ceph-deploy/

    1、安装ceph-deploy

    yum -y install ceph-deploy python-setuptools python-pip
    mkdir  /etc/ceph && cd /etc/ceph    #后续操作都在此目录进行,仅HL-1-101节点执行即可

    2、初始化节点

    ceph-deploy new --public-network 172.29.0.0/24   HL-1-100  HL-1-101  HL-1-102

    3、安装Ceph集群

          ceph-deploy能以远程的方式进入ceph集群各节点完成程序包的安装等操作,格式如下:

          eg:ceph-deploy install HOST [HOST]

    #此处选择在各节点执行相关安装命令
    yum -y install ceph  ceph-radosgw
    #此处也可使用如下方法,等待时间较长
    ceph-deploy install --no-adjust-repos  HL-1-100 HL-1-101 HL-1-102

    4、配置初始化MON节点,并收集所有密钥

    ceph-deploy mon create-initial 

    5、把配置文件和admin密钥拷贝ceph集群各节点

    ceph-deploy admin HL-1-100  HL-1-101  HL-1-102

    6、创建manager节点

    ceph-deploy mgr create HL-1-100
    #添加多个mgr可以实现HA
    ceph-deploy mgr create HL-1-101
    ceph-deploy mgr create HL-1-102
    ceph  -s   #查看集群状态,health: HEALTH_OK

    以上集群状态异常时,相关解释参考官网:https://docs.ceph.com/en/latest/rados/operations/health-checks

     

    RADOS集群添加OSD

    1、列出ceph集群节点所有可用磁盘的相关信息:

    ceph-deploy disk list  HL-1-100
    ceph-deploy disk list  HL-1-101
    ceph-deploy disk list  HL-1-102

    2、擦除磁盘,清除残留数据

    ceph-deploy disk  zap HL-1-100 /dev/sd{a,b,c,d,e,f,g,h,i,j}
    ceph-deploy disk  zap HL-1-101 /dev/sd{a,b,c,d,e,f,g,h,i,j}
    ceph-deploy disk  zap HL-1-102 /dev/sd{a,b,c,d,e,f,g,h,i,j}

    3、添加osd

    ceph-deploy osd  create HL-1-100 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}
    ceph-deploy osd  create HL-1-101 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}
    ceph-deploy osd  create HL-1-102 --data /dev/sd{a,b,c,d,e,f,g,h,i,j}

    5、扩展监视器节点

         概述:Ceph存储集群需要至少运行一个Ceph Monitor和Ceph Mnager,为实现高可用,Ceph存储通常运行多个监视器,以免单个监视器节点整个集群崩溃。

    ceph-deploy  mon add HL-1-101
    ceph-deploy  mon add HL-1-102

    删除osd

           官方文档

          此处在每个节点各删除2个osd,挂载本地使用。

    1、查看集群的osd磁盘状态

    ceph osd tree

    2、先标记为out状态,标记后再次查看状态,可以发现权重置为0了,但状态还是up

    ceph osd out osd.26
    ceph osd tree

    3、在osd.26对应的节点停止ceph-osd服务,再rm删除

    systemctl status ceph-osd@26.service
    systemctl stop ceph-osd@26.service
    ceph osd rm osd.26

    4、crush算法中和auth验证中删除

    ceph -s
    ceph osd crush remove osd.26
    ceph auth del osd.26

    5、在osd.26对应的节点上卸载

     

    df -h |grep osd
    umount /var/lib/ceph/osd/ceph-26

    6、在osd.26对应的节点上删除osd磁盘产生的逻辑卷

     

    pvs
    vgs
    lvremove ceph-xxxxxxxxxxxxxxx


    块存储(RBD)

    中文文档

    RBD介绍

    RBD即RADOS Block Device的简称,RBD块存储是最稳定且最常用的存储类型。RBD块设备类似磁盘可以被挂载。 RBD块设备具有快照、多副本、克隆和一致性等特性,数据以条带化的方式存储在Ceph集群的多个OSD中。
    块存储本质就是将裸磁盘或类似裸磁盘(lvm)设备映射给主机使用,主机可以对其进行格式化并存储和读取数据,块设备读取速度快但是不支持共享。
    ceph可以通过内核模块和librbd库提供块设备支持。客户端可以通过内核模块挂在rbd使用,客户端使用rbd块设备就像使用普通硬盘一样,可以对其就行格式化然后使用;客户应用也可以通过librbd使用ceph块,典型的是云平台的块存储服务(如下图),云平台可以使用rbd作为云的存储后端提供映像存储、volume块或者客户的系统引导盘等。


    1、创建存储池

          存储池相关可参考:存储池(Pool)

    eg:ceph osd pool  create [pool_name] pg_num
    #创建
    ceph osd pool create mypool 128
    #查看当前集群有多少存储池
    ceph osd lspools

          此处存在归置组(pg_num)的概念,大小设置参考:中文文档

    2、创建映像

    eg:rbd create --size {megabytes} {pool-name}/{image-name}
    #创建映像
    rbd create mypool/test-image  [--image-feature layering] --size 10G
    #查看当前存储池的映像
    rbd list mypool   #需指定pool_name
    #查看映像信息
    rbd info  mypool/test-image

    3、动态调整

    #扩容
    rbd resize --size 15G mypool/test-image
    #缩容
    rbd resize --size 7G image --allow-shrink
    #查看映像大小信息
    rbd info mypool/test-image

    4、通过KRBD访问(客户端使用)

    #客户端安装ceph-common包
    yum -y install ceph-common
    #传递集群密钥给客户端,客户端知道集群哪里如何连接
    scp  /etc/ceph/ceph.conf  /etc/ceph/ceph.client.admin.keyring      node:/etc/ceph
    #将映像映射为本地磁盘
    rbd map mypool/test-image
    lsblk
    /dev/rbd0
    rbd showmapped   #查看已经映射的映像
    #格式化挂载使用
    mkfs.ext4  /dev/rbd0
    mount /dev/rbd0   /home

    5、其他操作

    # 扩容操作
    #blockdev --getsize64 /dev/rbd0
    e2fsck -f /dev/rbd0       # 检查分区
    resize2fs  /dev/rbd0      # ext4格式
    xfs_growfs /dev/rbd0      # xfs格式
    # 客户端撤销磁盘映射
    //语法格式  rbd  unmap /dev/rbd/{poolname}/{imagename}
    rbd unmap /dev/rbd/mypool/test-image或rbd  unmap /dev/rbd0
    # 删除映像
    rbd  rm mypool/test-image
    #获取当前副本数
    ceph osd pool get test-pool size
    #获取pool的配置值,比如获取当前pg_num
    ceph osd pool get test-pool pg_num
    #查看每个pool的详细信息
    ceph osd pool ls detail

    6、开机自动挂载

    1、写入块设备信息
    cd /etc/ceph
    echo >> rbdmap  <<EOF
    volumes/mysql-data1.img          id=admin,keyring=/etc/ceph/ceph.client.admin.keyring
    EOF
    2、写入开机挂载文件
    /dev/rbd0 /data ext4 defaults,_netdev 0 0
    3、启动rbdmap服务
    systemctl status rbdmap && systemctl start rbdmap

    文件存储(CephFs)

    官方文档

    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 库, 与核心集群交互.

    1、安装元数据服务器

    yum -y install ceph-mds
    
    ceph-deploy mds create node03

    2、创建存储池和元数据存储池

    ceph osd pool create cephfs_data 128
    ceph osd pool create cephfs_metadata 128

    3、创建文件系统

    ceph fs new cephfs cephfs_metadata cephfs_data
    #查看fs
    ceph fs ls
    #查看msd服务器状态
    ceph mds stat

    4、挂载cephfs(客户端节点)

    mkdir  /home
    mount -t ceph HL-1-100:6789,HL-1-101:6789,HL-1-102:6789:/ /home  -o name=admin,secret=xxxxx

    5、B28挂载使用

    mount -t ceph 172.29.1.100:6789,172.29.1.101:6789,172.29.1.102:6789:/ /es-snapshots/ -o name=cephfs,secret=AQDAZcxg+ZuIIxAAOeh7xhvrP97c2SM3FoJn1w==

    Troubleshooting指南

    此处以官网讲解做常见故障处理及处理思路总结:

    一、常见错误及处理

    1、clock skew detected on mon.HL-1-101, mon.HL-1-102

          处理:此报错为对应节点的时间不同步造成,可重新同步时间即可。eg: ntpdate ntp1.aliyun.com

    2、Module 'dashboard' has failed: IOError("Port 8443 not free on ''",)

          处理:端口冲突引起,将dashboard迁移至其它mgr节点。eg: ceph config set mgr mgr/dashboard/server_addr HL-1-101

    3、rbd: sysfs write failed

         RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable mypool/test-image object-map fast-diff deep-flatten".
         In some cases useful info is found in syslog - try "dmesg | tail".
         rbd: map failed: (6) No such device or address

         处理:rbd设备支持4种格式,但目前3.10仅支持layering格式的映像,所以在客户端使用挂载时会报此错误,其他格式的需关闭掉 rbd feature disable mypool/test-image object-map fast-diff deep-flatten或者在创建映像时就明确指定layering格式。

    4、POOL_APP_NOT_ENABLED: application not enabled on 1 pool(s)

          处理:使用ceph health detail查看具体报错信息,后明确pool为rbd或车cephfs类型的存储池,便于ceph管理识别

    二、排查思路

    1、rbd时客户端不能正常挂载使用

         处理:可检查服务节点是否存在iptables相关规则限制,需放开相应限制

    2、osd相关服务排查

         日志:/var/log/ceph、存储空间、IO

         数据恢复时可提升最大线程数:sysctl -kernel.pid_max=4194303

         nf_conntrack相关排查

  • 相关阅读:
    element ui 表单清空
    element ui 覆盖样式 方法
    element ui 修改表单值 提交无效
    element ui 抽屉里的表单输入框无法修改值
    element ui 抽屉首次显示 闪烁
    css 左侧高度 跟随右侧内容高度 自适应
    PICNUF框架
    elementui 抽屉组件标题 出现黑色边框
    vue 子组件跨多层调用父组件中方法
    vue 编辑table 数据 未点击提交,table里的数据就发生了改变(深拷贝处理)
  • 原文地址:https://www.cnblogs.com/wushaoyu/p/15048602.html
Copyright © 2011-2022 走看看