ceph分布式存储

编程之家收集整理的这篇文章主要介绍了ceph分布式存储编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

介绍为什么要用CephCeph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性 等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph在存储的时候充分利用存储节点的计算能力,在存储每一个数据时 都会通过计算得出该数据的位置,尽量的分布均衡。。目前也是OpenStack的主流 后端存储,随着OpenStack在云计算领域的广泛使用,ceph也变得更加炙手可热。 国内目前使用ceph搭建分布式存储系统较为成功的企业有x-sky,深圳元核云

介绍

为什么要用Ceph

Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性 等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph在存储的时候充分利用存储节点的计算能力,在存储每一个数据时 都会通过计算得出该数据的位置,尽量的分布均衡。。目前也是OpenStack的主流 后端存储,随着OpenStack在云计算领域的广泛使用,ceph也变得更加炙手可热。 国内目前使用ceph搭建分布式存储系统较为成功的企业有x-sky,深圳元核云,上海 UCloud等三家企业。

Ceph架构介绍

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

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

  1. 性能

    a. 摒弃了传统的集中式存储元数据寻址的方案,采用Crush算法,数据分布 均衡,并行度高

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

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

  2. 高可扩展性

    a. 去中心化

    b. 扩展灵活

    c. 随着节点增加而线性增长

  3. 特性丰富

    a. 支持三种存储接口:块存储、文件存储、对象存储

    b. 支持自定义接口,支持多种语言驱动

目前来说,ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端 存储。官方推荐使用ceph的对象式存储,速度和效率都比较高,而cephfs官方并 不推荐直接在生产中使用。以上介绍的只是ceph的沧海一粟,ceph远比上面介绍 的要复杂,而且支持很多特性,比如使用纠删码就行寻址,所以大多数在生产环境使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也 比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

Ceph核心概念

  1. RADOS

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

  2. librados

    上层的RBD、RGW和CephFS都是通过librados访问的,目前提供PHP、Ruby、 Java、Python、C和C++支持

  3. Crush

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

  4. Pool

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

  5. PG

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

  6. Object

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

  7. ceph资源划分

    在这里插入图片描述

  8. ceph对象元数据

    在这里插入图片描述

Ceph核心组件

  1. OSD

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

  2. Pool、PG和OSD的关系:

    一个Pool里有很多PG;

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

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

  3. pool PG

    在这里插入图片描述

  4. OSD PG pool

    在这里插入图片描述

  5. Monitor

    一个Ceph集群需要多个Monitor组成的小集群,它们通过paxos同步数据, 用来保存OSD的元数据。负责监视整个Ceph集群运行的Map视图(如OSD Map、Monitor Map、PG Map和Crush Map),维护集群的健康状态,维护展 示集群状态的各种图表,管理集群客户端认证与授权;生产中建议最少要用3 个Monitor,基数个的Monitor组成组件来做高可用。

  6. mds

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

  7. Mgr

    实现 ceph 集群的管理,为外界提供统一的入口。

  8. RGW

    Ceph对外提供的对象存储服务,接口与S3和Swift兼容

  9. admin

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

Ceph三种存储类型

  1. 块存储(RBD)

    优点:
    a.通过RaID与LVM等手段,对数据提供了保护;
    b.多块廉价的硬盘组合起来,提高容量;
    c.多块磁盘组合出来的逻辑盘,提升读写效率;

    缺点:
    a.采用SAN架构组网时,光纤交换机,造价成本高;
    b.主机之间无法共享数据;

    使用场景
    a.docker容器、虚拟机磁盘存储分配;
    b.日志存储;
    c.文件存储;

  2. 文件存储(CephFS)

    优点:
    a.造价低,随便一台机器就可以了;
    b.方便文件共享;

    缺点:
    a.读写速率低;
    b.传输速率慢;

    使用场景
    a.日志存储;
    b.FTP、NFS;
    c.其它有目录结构的文件存储

  3. 对象存储(Object)(适合更新变动较少的数据)

    优点:
    a.具备块存储的读写高速;
    b.具备文件存储的共享等特性;

    使用场景
    a.图片存储;
    b.视频存储;

如何将ssd作为hdd的缓存池

  1. 缓存池原理

    缓存分层特性也是在Ceph的Firfly版中正式发布的,这也是Ceph的Firefly版本中 被谈论最多的一个特性。缓存分层是在更快的磁盘(通常是SSD),上创建一 个Ceph池。这个缓存池应放置在一个常规的复制池或erasure池的前端,这 样所有的客户端I/O操作都首先由缓存池处理。之后,再将数据写回到现有的 数据池中。客户端能够在缓存池上享受高性能,而它们的数据显而易见最终是 被写入到常规池中的。

    一般来说,缓存层构建在昂贵/速度更快的SSD磁盘上,这样才能为客户提供更好 的I/O性能。在缓存池后端通常是存储层,它由复制或者erasure类型的HDD 组成。在这种类型的设置中,客户端将I/O请求提交到缓存池,不管它是一个 读或写操作,它的请求都能够立即获得响应。速度更快的缓存层为客户端请求 提供服务。一段时间后,缓存层将所有数据写回备用的存储层,以便它可以缓 存来自客户端的新请求。在缓存层和存储层之间的数据迁移都是自动触发且对 客户端是透明的。缓存分层能以两种模式进行配置。

    在这里插入图片描述

  2. writeback模式:

    写操作时,写入缓存池。基于缓存层flushing/evicting策略,数据将从缓存层 迁移到存储层,并由缓存分层代理将其从缓存层中删除
    读操作时,由缓存分层代理将数据从存储层迁移到缓存层,然后再把它提供给 客户。直到数据变得不再活跃或成为冷数据,否则它将一直保留在缓存层 中。

  3. read-only模式:

    写操作不涉及缓存分层,所有的客户端写都在存储层上完成。
    读操作时,在处理来自客户端的读操作时,缓存分层代理将请求的数据从存储 层复制到缓存层。基于你为缓存层配置的策略,不活跃的对象将会从缓存 层中删除。这种方法非常适合多个客户端需要读取大量类似数据的场景。

    缓存层是在速度更快的物理磁盘(通常是SSD),上实现的,它在使用HDD构建 的速度较慢的常规池前部署一个快速的缓存层。在本节中,我们创建两个独 立的池(一个缓存池和一个常规),分别用作缓存层和存储层。

    在这里插入图片描述

部署

机器需求

  1. 最少三台Centos7系统虚拟机用于部署Ceph集群
  2. 硬件配置:2C4G
  3. 另外每台机器最少挂载三块硬盘

安装环境准备

  1. 服务器初始化(参考初始化文档)

  2. 安装需要工具

    yum install  createrepo -y
    yum install epel-release -y
    yum install lttng-ust -y
    
  3. 关闭NetworkManager

    systemctl disable NetworkManager
    systemctl stop NetworkManager
    
  4. 升级系统内核

    #查看内核版本
    uname -r
    cd 内核文件/
    yum -y install kernel-ml-5.7.8-1.el7.elrepo.x86_64.rpm kernel-ml-devel-5.7.8-1.el7.elrepo.x86_64.rpm
    #调整认启动内核
    cat /boot/grub2/grub.cfg | grep  menuentry
    grub2-set-default "CentOS linux (5.7.8-1.el7.elrepo.x86_64) 7 (Core)"
    #查看是否设置成功
    grub2-editenv List
    reboot
    
  5. 主机名与IP对应关系(必须配置主机名映射)

    vim /etc/hosts
    192.168.66.31 ceph-node1
    192.168.66.32 ceph-node2
    192.168.66.33 ceph-node3
    
  6. ceph-node1操作节点上安装ceph的yum源共享

    安装

    yum install httpd
    #上传软件包\ceph到/var/www/HTML/下
    #启动httpd
    systemctl restart httpd
    systemctl enable httpd
    #更新yum源
    createrepo --update  /var/www/HTML/ceph/rpm-nautilus
    #(官方yum源
    vim /etc/yum.repos.d/ceph.repo 
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/$basearch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
    priority=1
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/noarch
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
    priority=1
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://mirrors.163.com/ceph/rpm-nautilus/el7/SRPMS
    enabled=1
    gpgcheck=1
    type=rpm-md
    gpgkey=https://download.ceph.com/keys/release.asc
    )
    

    编辑yum源文件

    vim /etc/yum.repos.d/ceph.repo 
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/$basearch
    gpgcheck=0
    priority=1
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/noarch
    gpgcheck=0
    priority=1
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://192.168.66.31/ceph/rpm-nautilus/el7/SRPMS
    gpgcheck=0
    priority=1
    
    [nfs-ganesha]
    name=nfs-ganesha
    baseurl=http://192.168.66.31/nfs-ganesha/el7/x86_64
    gpgcheck=0
    priority=1
    
    [ceph-iscsi]
    name=ceph-iscsi noarch packages
    baseurl=http://192.168.66.31/ceph-iscsi/3/rpm/el7/noarch
    gpgcheck=0
    priority=1
    
    [ceph-iscsi-source]
    name=ceph-iscsi source packages
    baseurl=http://192.168.66.31/ceph-iscsi/3/rpm/el7/SRPMS
    gpgcheck=0
    priority=1
    
    [tcmu-runner]
    name=tcmu-runner
    baseurl=http://192.168.66.31/tcmu-runner/x86_64
    gpgcheck=0
    priority=1
    
    [ceph-iscsi-conf]
    name=ceph-iscsi-config
    baseurl=http://192.168.66.31/ceph-iscsi-config/noarch
    gpgcheck=0
    priority=1
    

    在每台node上执行

    yum makecache
    
  7. 安装基础ceph包每台node

    yum -y install ceph
    ceph -v
    

安装Ceph集群

  1. 部署安装工具

    安装 ceph-deploy在ceph-node1操作节点上

    yum install -y ceph-deploy
    yum install python-setuptools -y
    ceph-deploy --version
    

    创建一个my-cluster目录,所有命令在此目录进行ceph-node1操作节点上

    mkdir /my-cluster
    cd /my-cluster
    

    控制端无密码连接所以节点和自己

    ssh-keygen
    for i in 31 32 33; do ssh-copy-ID root@192.168.66.$i; done
    
  2. 创建Ceph集群,生成Ceph配置文件(建议是奇数)ceph-node1操作节点上

    ceph-deploy new --public-network 对外网端 --cluster-network 192.168.66.0/24 
    ceph-node1 ceph-node2 ceph-node3
    #--public-network没有就不写
    #--cluster-network对内通行网端
    #ceph-nodex   mon节点
    

    允许删除存储池
    ceph-node1操作节点上修改配置文件

    vim ceph.conf
    [global]
    .......
    #允许删除存储池
    mon_allow_pool_delete = true
    
  3. 安装mon服务,生成monitor检测集群所使用的的秘钥ceph-node1操作节点上

    ceph-deploy mon create-initial
    
  4. 安装管理命令Ceph Cliceph-node1操作节点上

    如前所示,我们执行admin的命令,要提供admin的key(–keyring ceph.clIEnt.admin.keyring)以及配置文件(-c ceph.conf)。在后续的运维中,我们经常 需要在某个node上执行admin命令。每次都提供这些参数比较麻烦。实际上,ceph 会认地从/etc/ceph/中找keyring和ceph.conf。因此,我们可以把 ceph.clIEnt.admin.keyring和ceph.conf放到每个node的/etc/ceph/。ceph-deploy可 以帮做这些

    ceph-deploy admin ceph-node1 ceph-node2 ceph-node3
    
  5. 添加osd(添加的磁盘必须是没有被处理过的裸盘)ceph-node1操作节点上

    所有操作节点上初始化清空磁盘数据

    ceph-volume lvm zap /dev/sdb /dev/sdc /dev/sdd
    
    ceph-deploy osd create --data /dev/sdb ceph-node1
    ceph-deploy osd create --data /dev/sdc ceph-node1
    ceph-deploy osd create --data /dev/sdd ceph-node1
    
    ceph-deploy osd create --data /dev/sdb ceph-node2
    ceph-deploy osd create --data /dev/sdc ceph-node2
    ceph-deploy osd create --data /dev/sdd ceph-node2
    
    ceph-deploy osd create --data /dev/sdb ceph-node3
    ceph-deploy osd create --data /dev/sdc ceph-node3
    ceph-deploy osd create --data /dev/sdd ceph-node3
    
  6. 检查Ceph群集状态。

    ceph -s
    
  7. #使用盘+盘的方式所有节点磁盘创建固态+集群盘组

    对固态进行分区

    parted /dev/sdb mklabel gpt
    parted /dev/sdb mkpart primary 1 50%
    parted /dev/sdb mkpart primary 50% 100%
    #磁盘分区后的权限无法让ceph软件对其进行读写操作
    

    提权

    chown  ceph.ceph  /dev/sdb1
    chown  ceph.ceph  /dev/sdb2
    vim /etc/udev/rules.d/70-sdb.rules
    ENV{DEVname}=="/dev/sdb1",OWNER="ceph",GROUP="ceph"
    ENV{DEVname}=="/dev/sdb2",GROUP="ceph"
    

    创建OSD存储空间

    ceph-deploy osd create --data 
    /dev/sdc:/dev/sdb1 /dev/sdd:/dev/sdb2 ceph-node1 
    ceph-deploy osd create --data 
    ceph-node2:/dev/sdc:/dev/sdb1 ceph-node2:/dev/sdd:/dev/sdb2  
    ceph-deploy osd create --data 
    ceph-node3:/dev/sdc:/dev/sdb1 ceph-node3:/dev/sdd:/dev/sdb2  
    

    #使用pool+pool的方式(后面说)

  8. 部署监控配置mgr,用于管理集群ceph-node1操作节点上

    ceph-deploy mgr create ceph-node1
    ceph-deploy mgr create ceph-node2 
    ceph-deploy mgr create ceph-node3
    
  9. 允许删除存储池以做

    ceph-node1操作节点上修改配置文件

    vim ceph.conf
    [global]
    .......
    #允许删除存储池
    mon_allow_pool_delete = true
    

    使用ceph-deploy推配置给所有节点

    ceph-deploy --overwrite-conf config push 
    	ceph-node1 ceph-node2 ceph-node3
    

    所有节点重启ceph-mon服务

    systemctl restart ceph-mon.target
    
  10. 创建认pool,ceph-node1操作节点上

```powershell
ceph osd pool create rbd 32 32
ceph osd pool application enable rbd rbd
```
  1. 检查状态

    OSD状态

    ceph osd tree
    ID CLASS WEIGHT  TYPE name           STATUS REWEIGHT PRI-AFF 
    -1       0.29279 root default                                
    -3       0.09760     host cephnode01                         
    0   hdd 0.04880         osd.0           up  1.00000 1.00000 
    1   hdd 0.04880         osd.1           up  1.00000 1.00000 
    -5       0.09760     host cephnode02                         
    2   hdd 0.04880         osd.2           up  1.00000 1.00000 
    3   hdd 0.04880         osd.3           up  1.00000 1.00000 
    -7       0.09760     host cephnode03                         
    4   hdd 0.04880         osd.4           up  1.00000 1.00000 
    5   hdd 0.04880         osd.5           up  1.00000 1.00000
    

    整体运行状态

    ceph -s
      cluster:
        ID:     a4c42290-00ac-4647-9856-a707d5f8f2fd
        health: HEALTH_OK
     
      services:
        mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 18m)
        mgr: cephnode01(active, since 34m), standbys: cephnode03, cephnode02
        mds:  3 up:standby
        osd: 6 osds: 6 up (since 27m), 6 in (since 27m)
        rgw: 1 daemon active (cephnode01)
     
      data:
        pools:   4 pools, 128 pgs
        objects: 187 objects, 1.2 KiB
        usage:   6.0 GiB used, 294 GiB / 300 GiB avail
        pgs:     128 active+clean
    

    检查集群健康状况的命令,后期用来查找故障

    ceph health detail
    HEALTH_OK
    

    Monitor状态

    ceph mon stat
    

Ceph Dashboard监控

  1. 所有节点节点安装

    yum -y install ceph-mgr-dashboard
    
  2. 配置ceph-node1操作节点上

    禁用 SSL

    ceph config set mgr mgr/dashboard/ssl false
    #生成安装自签名的证书ssl
    #ceph dashboard create-self-signed-cert
    

    配置监听IP和 port

    ceph config set mgr mgr/dashboard/server_addr 0.0.0.0
    ceph config set mgr mgr/dashboard/server_port 8888
    #IP 不设置认绑定 ::,禁用 ssl 之后,PORT 认8080
    

    创建一个dashboard登录用户名密码

    vim dashboard-password
    123456
    ceph dashboard ac-user-create admin -i ./dashboard-password administrator
    #更多操作,查看帮助
    ceph dashboard -h
    
  3. 开启功能ceph-node1操作节点上

    ceph mgr module enable dashboard
    ceph mgr module disable dashboard(注意修改了配置,要先停,在开启)
    
  4. 启用功能

    rgw启用

    #部署rgw
    	#安装实现 ceph 集群的管理,为外界提供统一的入口,所有节点
    yum install -y ceph-radosgw
    #创建rgw实例ceph-node1操作节点上
    ceph-deploy rgw create ceph-node1
    ceph-deploy rgw create ceph-node2
    ceph-deploy rgw create ceph-node3
    
    #Dashboard中启用RGWceph-node1操作节点上
    #创建rgw系统账户
    radosgw-admin user create --uID=rgw --display-name=rgw --system
    #查看
    radosgw-admin user info --uID=rgw
    #记下输出的access_key 和 secret_key的值
    "access_key": "DK81962PKOT9MURYBL3Y",
    "secret_key": "OABnPhViCWlYtNCyXxTQ7sr6xUVAYvvSgrTiNUQE"
    #为Dashboard设置access_key 和 secret_key
    echo DK81962PKOT9MURYBL3Y > access_key
    echo OABnPhViCWlYtNCyXxTQ7sr6xUVAYvvSgrTiNUQE > secret_key
    ceph dashboard set-rgw-API-access-key -i ./access_key
    ceph dashboard set-rgw-API-secret-key -i ./secret_key
    #禁用SSL
    ceph dashboard set-rgw-API-ssl-verify False
    
    #检测
    http://rgw-node:7480
    

    在这里插入图片描述

    cephfs启用ceph-node1操作节点上

    #创建cephfs实例
    ceph-deploy mds create ceph-node1
    ceph-deploy mds create ceph-node2
    ceph-deploy mds create ceph-node3
    #创建cephfs池
    ceph osd pool create cephfs_data 32
    ceph osd pool create cephfs_Metadata 32
    #创建文件系统
    ceph fs new cephfs cephfs_Metadata cephfs_data
    #查看mds状态
    ceph mds stat
    

    在这里插入图片描述

  5. 查看服务访问方式,查看已开启模块信息ceph-node1操作节点上

    ceph mgr services
    

    访问:http://ceph-node1:8888/

创建nfs存储

  1. 首先创建存储池nfs-hmtd

    #创建在SSD上	
    #ceph osd pool create nfs-hmtd on-ssd
    ceph osd pool create nfs-hmtd 32 32
    ceph osd pool application enable nfs-hmtd nfs
    
  2. 部署NFS服务(这里我放在了appfor117\appfor210):

    # ceph orch apply nfs 
    *<svc_ID>* *<pool>* *<namespace>* --placement="*<num-daemons>* [*<host1>* ...]"
    
    ceph orch apply nfs nfs-hmtd --pool nfs-hmtd nfs-ns --placement="appfor117 appfor210"
    
  3. 为了在dashboard中进行操作,可以进行如下设置

    ceph dashboard set-ganesha-clusters-rados-pool-namespace nfs-hmtd/nfs-ns
    
  4. Ceph的NFS是基于CephFS提供的,我们首先在CephFS中创建一个/nfs目录,用于作为NFS服务的根目录

    mkdir /mnt/cephfs/nfs
    
  5. 其中mount的时候的secret是/etc/ceph/ceph.clIEnt.admin.keyring的值,也可以替换成

    secretfile=/etc/ceph/ceph.clIEnt.admin.keyring。
    

创建Ceph块存储

  1. 创建存储池pool

    新建数据池

    ceph osd pool create storage_(池名) 64
    

    重命名pool

    ceph osd pool rename storage_(旧池名) storage_(新池名)
    

    设置存储池副本数(认3副本)

    ceph osd pool get storage_(池名) size
    ceph osd pool setstorage_(池名) size 3
    

    给test使用的pool标识成test

    ceph osd pool application enable  storage_(池名)/cache_(池名)  test
    

    查看存储池

    ceph osd lspools
    
    #创建缓存+存储(可以不操作)
    #新建数据池
    ceph osd pool create storage_(池名) 64
    #新建缓冲池
    ceph osd pool create cache_(池名) 64
    #把缓存层挂接到后端存储池上
    ceph osd tIEr add storage_(池名) cache_(池名)
    #设定缓冲池读写策略为写回模式。
    ceph osd tIEr cache-mode cache_(池名) writeback
    #将客户端流量指向到缓存存储池
    ceph osd tIEr set-overlay storage_(池名)  cache_(池名)
    #调整Cache tIEr配置
    	#1、设置缓存层hit_set_type使用bloom过滤器
    	ceph osd pool set cache_(池名) hit_set_type bloom
    	#2、设置hit_set_count、hit_set_period
    	#热度数hit_set_count:HitSet 覆盖的时间区间,保留多少个这样的 		HitSet,保留一段时间以来的访问记录
    	#热度周期hit_set_period:判断一客户端在一段时间内访问了某对象		一次、还是多次
    	#最大缓冲数据target_max_bytes。
    
    	ceph osd pool set cache_(池名) hit_set_count 1
    	ceph osd pool set cache_(池名) hit_set_period 3600
    	ceph osd pool set cache_(池名) target_max_bytes 1000000000000
    	#3、设置min_read_recency_for_promete、min_write_recency_for_promote
    	ceph osd pool set cache_(池名) min_read_recency_for_promote 1
    	ceph osd pool set cache_(池名) min_write_recency_for_promote 1
    
    		#缓存池容量控制
    		#刷写(flushing):负责把已经被修改的对象写入到后端慢存储,但是对		象依然在缓冲池。
    		#驱逐(evicting):负责在缓冲池里销毁那些没有被修改的对象。
    		#(1)驱逐(容量百分比),缓冲池代理就开始把这些数据刷写到后端慢存		储。当缓冲池里被修改的数据达到40%时,则触发刷写动作。
    		ceph osd pool set cache_(池名)  cache_target_dirty_ratio 0.4
    		#(2)驱逐指定数据对象数量或者确定的数据容量。对缓冲池设定最大的数			据容量
    		ceph osd pool set cache_(池名) target_max_bytes 1073741824
    		#(3)驱逐对缓冲池设定最大的对象数量。在认情况下,RBD的认对		象大小为	4MB,1GB容量包含256个4MB的对象
    		ceph osd pool set cache_(池名)  target_max_objects 256
    	#4、对象有最短的刷写周期。		
    	#设定最短的刷写周期:若被修改的对象在缓冲池里超过最短周期,将会被刷写	到慢存储池(分钟)
    	ceph osd pool set cache_(池名) cache_min_flush_ age 600
    	#设定对象最短的驱逐周期
    	ceph osd pool set cache_(池名) cache_min_evict_age 1800
    #删除缓存层
    	#删除Readonly缓存
    		#把缓存模式改为 none 即可禁用
    		ceph osd tIEr cache-mode cache_(池名) none
    		#去除后端存储池的缓存池
    		ceph osd tIEr remove storage_(池名) cache_(池名)
    	#删除writeback缓存
    		#把缓存模式改为 forward ,这样新的和更改过的对象将直接刷回到		后端存储池
    		ceph osd tIEr cache-mode cache_(池名) forward --yes-i-really-mean-it
    		#确保缓存池已刷回,可能要等数分钟
    		rados ls -p cache_(池名)
    		#可以通过以下命令进行手动刷回
    		rados -p cache_(池名) cache-flush-evict-all
    		#取消流量指向缓存池
    		ceph osd tIEr remove-overlay storage_(池名)
    		#剥离缓存池
    		ceph osd tIEr remove storage cache_(池名)
    
  2. 创建镜像

    方法一:认池中创建镜像

    rbd create cxk-image --image-feature  layering --size 1G
    

    方法二:指定池中创建镜像

    rbd create 池名/cxk-image --image-feature  layering --size 1G
    

    查看镜像

    rbd List 池名
    

    查看详细信息

    rbd info 池名/cxk-image
    
  3. 镜像动态调整

    扩容容量

    rbd resize --size 2G 池名/cxk-image
    

    缩小容量

    rbd resize --size 1G 池名/cxk-image --allow-shrink
    
  4. 删除RBD块设备

    rbd rm 池名/cxk-image
    

    镜像快照操作 给镜像创建快照 rbd snap create 池名/cxk-image --snap cxk-snap1 克隆快照
    保护快照不让删除:rbd snap protect 池名/cxk-image --snap cxk-snap1 取消保护:rbd snap
    unprotect 池名/cxk-image --snap cxk-snap1 rbd clone 池名/cxk-image --snap
    cxk-snap1 cxk-snap2 --image-feature layering 还原快照: rbd snap rollback
    池名/cxk-image --snap cxk-snap1 把快照脱离父母独立工作 rbd flatten cxk-snap1 删除快照:
    rbd snap rm 池名/cxk-image --snap cxk-snap1 查看快照: 查看镜像快照 rbd snap ls
    池名/cxk-image 查看克隆镜像与父镜像快照的关系 rbd info 池名/cxk-clone

客户端通过KRBD访问块存储

  1. 客户端安装

    yum install  createrepo -y
    yum install epel-release -y
    yum install lttng-ust -y
    #指定共享的yum
    yum -y  install ceph-common
    
  2. 客户端拷贝ceph文件本地配置文件和连接密钥文件

    scp /my-cluster/ceph.conf  root@192.168.66.242:/etc/ceph/
    scp /my-cluster/ceph.clIEnt.admin.kevring root@192.168.66.242:/etc/ceph/
    
  3. 客户端挂载服务端的镜像

    rbd map  池名/cxk-image
    撤销磁盘挂载:
    rbd unmap /dev/rbd0(挂载点)
    
  4. 客户端查看挂载服务端的镜像

    rbd showmapped
    lsblk
    
  5. 客户端格式化、挂载分区

    mkfs.xfs /dev/rbd0
    mount /dev/rbd0 /mnt/
    

创建mds文件系统(inode+block)

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

  1. 给那些osd部署mds服务:

    cd /my-cluster
    ceph-deploy mds create ceph-node1ceph-node2 ceph-node3 (可以继续添加)
    
  2. 创建存储池

    数据:ceph osd pool create cephfs_cxk_data 128
    元数据:ceph osd pool create cephfs_cxk_Metadata 64
    查看:ceph osd lspools
    
  3. 创建Ceph文件系统

    ceph fs new myfs-cxk cephfs_cxk_Metadata cephfs_cxk_data
    
  4. 查看

    ceph fs ls
    

客户端挂载

vim /etc/fstab
ip:6789,ip:6789,ip:6789:/    /mnt/cephfs   ceph    name=admin,secret=xxxxxx,_netdev  0    0
mount -t ceph  MON节点的IP:6789:/  /mnt/cephfs/ 
-o name=admin,secret=AQC0FaJgu2A2araACbXjhYEeZTX+nlUJ+seDGw==
#注意:文件系统类型为ceph
#admin用户名,secret是密钥
#密钥可以在/etc/ceph/ceph.clIEnt.admin.keyring中找到

创建RGW对象存储

  1. 部署rgw服务:

    ceph-deploy rgw create ceph-node1(可以继续添加)
    
  2. 登陆该节点验证服务是否启动

    ps aux |grep radosgw
    
  3. 该节点修改服务端口

    vim  /etc/ceph/ceph.conf
    [clIEnt.rgw.node5]
    host = ceph-node1
    rgw_frontends = "civetweb port=8000"
    //node5为主机名
    //civetweb是RGW内置的一个web服务
    
  4. 该节点重启服务

    systemctl  status ceph-radosgw@\*
    
  5. 创建radosgw用户

    radosgw-admin user create --uID="radosgw" --display-name="radosgw"
    {
        "user_ID": "radosgw",
        "display_name": "radosgw",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auID": 0,
        "subusers": [],
        "keys": [
            {
                "user": "radosgw",
                "access_key": "DKOORDOMS6YHR2OW5M23",
                "secret_key": "OOBNCO0d03oiBaLCtYePPQ7gIEUR2Y7UuB24pBW4"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read,write,delete",
        "default_placement": "",
        "placement_Tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
        "temp_url_keys": [],
        "type": "rgw"
    }
    

客户端安装软件

  1. 安装

    yum install s3cmd
    
  2. 修改软件配置

    s3cmd --configure
    Access Key: DKOORDOMS6YHR2OW5M23
    Secret Key: OOBNCO0d03oiBaLCtYePPQ7gIEUR2Y7UuB24pBW4
    Default Region [US]: ZH
    
    S3 Endpoint [s3.amazonaws.com]: 192.168.4.15:8000
    [%(bucket)s.s3.amazonaws.com]: %(bucket)s.192.168.4.15:8000
    Use httpS protocol [Yes]: no
    Test access with supplIEd credentials? [Y/n] n
    Save settings? [y/N] y
    
  3. 创建存储数据的bucket(类似于存储数据的目录创建桶并放入文件

    s3cmd ls
    
    s3cmd mb s3://my_bucket
    Bucket 's3://my_bucket/' created
    
    s3cmd ls
    2018-05-09 08:14 s3://my_bucket
    
    s3cmd put /var/log/messages s3://my_bucket/log/
    
    s3cmd ls s3://my_bucket
    DIR s3://my_bucket/log/
    
    s3cmd ls s3://my_bucket/log/
    2018-05-09 08:19 309034 s3://my_bucket/log/messages 
    
  4. 测试下载功能

    s3cmd get s3://my_bucket/log/messages /tmp/
    
  5. 测试删除功能

    s3cmd del s3://my_bucket/log/messages
    

使用

集群监控管理

  1. 集群整体运行状态

    ceph -s 
    
  2. 检查集群健康状况的命令,后期用来查找故障

    ceph health detail
    HEALTH_OK
    
  3. PG状态

    ceph pg dump
    ceph pg stat
    
  4. Pool状态

    ceph osd pool stats
    
  5. OSD状态

    ceph osd stat
    ceph osd dump
    ceph osd tree
    ceph osd df
    
  6. Monitor状态和查看仲裁状态

    ceph mon stat
    ceph mon dump
    ceph quorum_status
    
  7. 集群空间用量

    ceph df
    ceph df detail
    

集群配置管理(临时和全局,服务平滑重启)

有时候需要更改服务的配置,但不想重启服务,或者是临时修改。这时候就可以使用 tell和daemon子命令来完成此需求。

  1. 查看运行配置

    #命令格式
    ceph daemon {daemon-type}.{ID} config show 
    #命令举例:
    ceph daemon osd.0 config show 
    
  2. tell子命令格式

    使用 tell 的方式适合对整个集群进行设置使用 * 号进行匹配,就可以对整个集 群的角色进行设置。而出现节点异常无法设置时候,只会在命令行当中进行报错, 不太便于查找。

    #命令格式
    ceph tell {daemon-type}.{daemon ID or *} injectargs
     	--{name}={value} [--{name}={value}]
    #命令举例:
    ceph tell osd.0 injectargs --deBUG-osd 20 --deBUG-ms 1
    #daemon-type:为要操作的对象类型如osd、mon、mds等。
    #daemon ID:该对象的名称,osd通常为0、1等,mon为ceph -s显示名称这里可以输入*表示全部。
    #injectargs:表示参数注入,后面必须跟一个参数,也可以跟多个
    
  3. daemon子命令

    使用 daemon 进行设置的方式就是一个个的去设置,这样可以比较好的反馈,此 方法是需要在设置的角色所在的主机上进行设置

    #命令格式
    ceph daemon {daemon-type}.{ID} config set {name}={value}
    #命令举例:
    ceph daemon mon.ceph-monitor-1 config set mon_allow_pool_delete false
    

集群操作

命令包含start、restart、status

  1. 启动所有守护进程

    systemctl start ceph.target
    
  2. 按类型启动守护进程

    systemctl restart ceph-mgr.target
    systemctl restart ceph-osd@ID
    systemctl restart ceph-mon.target
    systemctl restart ceph-mds.target
    systemctl restart ceph-radosgw.target
    
  3. 更新所有节点的配置文件的命令

    ceph-deploy --overwrite-conf config push cephnode01 cephnode02 cephnode03 
    

添加删除OSD

@H_881_3301@添加OSD

  1. 格式化磁盘

    ceph-volume lvm zap /dev/sd<ID>
    
  2. 进入到ceph-deploy执行目录/my-cluster,添加OSD

@H_881_3301@删除OSD

  1. 调整osd的crush weight为 0

    ceph osd crush reweight osd.<ID> 0.0
    
  2. 将osd进程stop

    systemctl stop ceph-osd@<ID>
    
  3. 将osd设置out

    ceph osd out <ID>
    
  4. 立即执行删除OSD中数据

    ceph osd purge osd.<ID> --yes-i-really-mean-it
    
  5. 卸载磁盘

    umount /var/lib/ceph/osd/ceph-

RDB快设备操作

  1. 创建

    #方法一:认池中创建镜像
    rbd create cxk-image --image-feature  layering --size 1G
    #方法二:指定池中创建镜像
    rbd create 池名/cxk-image --image-feature  layering --size 1G
    
  2. 查看

    #查看镜像:
    rbd List 池名
    #查看详细信息:
    rbd info 池名/cxk-image
    
  3. 镜像动态调整

    #扩容容量
    rbd resize --size 2G 池名/cxk-image
    #缩小容量
    rbd resize --size 1G 池名/cxk-image --allow-shrink
    
  4. 删除RBD块设备

    rbd rm 池名/cxk-image
    
  5. 快照操作

    #给镜像创建快照
    rbd snap create 池名/cxk-image  --snap cxk-snap1
    
    #克隆快照
    #保护快照不让删除
    rbd snap protect  池名/cxk-image --snap cxk-snap1
    #取消保护:
    rbd snap unprotect  池名/cxk-image --snap cxk-snap1
    
    rbd clone 池名/cxk-image --snap cxk-snap1 cxk-snap2 --image-feature layering
    
    #还原快照:
    rbd snap rollback 池名/cxk-image --snap cxk-snap1
    
    #把快照脱离父母独立工作
    rbd flatten cxk-snap1
    
    #删除快照:
    rbd snap rm 池名/cxk-image --snap cxk-snap1
    
    #查看快照:
    #查看镜像快照
    rbd snap ls 池名/cxk-image
    #查看克隆镜像与父镜像快照的关系
    rbd info 池名/cxk-clone
    

扩容PG

ceph osd pool set {pool-name} pg_num 128
ceph osd pool set {pool-name} pgp_num 128 

1、扩容大小取跟它接近的2的N次方
2、在更改pool的PG数量时,需同时更改PGP的数量。PGP是为了管理placement 而存在的专门的PG,它和PG的数量应该保持一致。如果你增加pool的 pg_num,就需要同时增加pgp_num,保持它们大小一致,这样集群才能正常 rebalancing

Pool操作

  1. 列出存储池

    ceph osd lspools
    
  2. 创建存储池

    #命令格式
    ceph osd pool create {pool-name} {pg-num} [{pgp-num}]
    #命令举例:
    ceph osd pool create rbd  32 32
    
  3. 设置存储池配额

    #命令格式
    ceph osd pool set-quota {pool-name} [max_objects {obj-count}] 
    	[max_bytes {bytes}]
    #命令举例:
    ceph osd pool set-quota rbd max_objects 10000
    
  4. 删除存储池

    在ceph.conf配置文件添加如下内容

    [global]
    .......
    mon_allow_pool_delete = true
    

    使用ceph-deploy推配置给所有节点

    ceph-deploy --overwrite-conf config push
    cephnode1 cephnode2  cephnode3
    

    重启ceph-mon服务

    systemctl restart ceph-mon.target
    
    #执行删除pool命令
    ceph osd pool delete {pool-name} [{pool-name} --yes-i-really-really-mean-it
    #命令举例:
    ceph osd pool delete kube kube --yes-i-really-really-mean-it
    
  5. 重命名存储池

    ceph osd pool rename {current-pool-name} {new-pool-name}
    
  6. 查看存储池统计信息

    rados df
    
  7. 给存储池做快照

    ceph osd pool mksnap {pool-name} {snap-name}
    
  8. 删除存储池的快照

    ceph osd pool rmsnap {pool-name} {snap-name}
    
  9. 获取存储池选项

    ceph osd pool get {pool-name} {key}
    
  10. 调整存储池选项

    ceph osd pool set {pool-name} {key} {value}
    #size:设置存储池中的对象副本数,详情参见设置对象副本数。仅适用于副本		存储池。
    #min_size:设置 I/O 需要的最小副本数,详情参见设置对象副本数。仅适用		于副本存储池。
    #pg_num:计算数据分布时的有效 PG 数。只能大于当前 PG 数。
    #pgp_num:计算数据分布时使用的有效 PGP 数量。小于等于存储池的 PG 数。
    #hashpspool:给指定存储池设置/取消 HASHPSPOol 标志。
    #target_max_bytes:达到 max_bytes 阀值时会触发 Ceph 冲洗或驱逐对象。
    #target_max_objects:达到 max_objects 阀值时会触发 Ceph 冲洗或驱逐对象。
    #scrub_min_interval:在负载低时,洗刷存储池的最小间隔秒数。如果是 0 ,		就按照配置文件里的 osd_scrub_min_interval 。
    #scrub_max_interval:不管集群负载如何,都要洗刷存储池的最大间隔秒数。		如果是 0 ,就按照配置文件里的 osd_scrub_max_interval 。
    #deep_scrub_interval:“深度”洗刷存储池的间隔秒数。如果是 0 ,就按照配		置文件里的 osd_deep_scrub_interval 。
    
  11. 获取对象副本数

    ceph osd dump | grep 'replicated size'
    

用户管理

Ceph 把数据以对象的形式存于各存储池中。Ceph 用户必须具有访问存储池的权限才 能够读写数据。另外,Ceph 用户必须具有执行权限才能够使用 Ceph 的管理命令。

  1. 查看用户信息

    #查看所有用户信息
    ceph auth List
    #获取所有用户的key与权限相关信息
    ceph auth get clIEnt.admin
    #如果只需要某个用户的key信息,可以使用pring-key子命令
    ceph auth print-key clIEnt.admin 
    
  2. 添加用户

    ceph auth add clIEnt.john mon 'allow r' osd 'allow rw pool=liverpool'
    ceph auth get-or-create clIEnt.paul mon 'allow r' osd 'allow rw pool=liverpool'
    ceph auth get-or-create clIEnt.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
    ceph auth get-or-create-key clIEnt.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key
    
  3. 修改用户权限

    ceph auth caps clIEnt.john mon 'allow r' osd 'allow rw pool=liverpool'
    ceph auth caps clIEnt.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
    ceph auth caps clIEnt.brian-manager mon 'allow *' osd 'allow *'
    ceph auth caps clIEnt.ringo mon ' ' osd ' '
    
  4. 删除用户

    ceph auth del {TYPE}.{ID}
    #其中, {TYPE} 是 clIEnt,osd,mon 或 mds 的其中一种。{ID} 是用户的名		字或守护进程的 ID
    

常见错误操作

@H_881_3301@1
health: HEALTH_WARN
1 daemons have recently crashed

#ceph报守护程序最近崩溃了的解决方法
ceph health detail
#新的崩溃可以通过以下方式列出
ceph crash ls-new
#有关特定崩溃的信息可以通过以下方法检查
ceph crash info <crash-ID>
#可以通过“存档”崩溃(可能是在管理员检查之后)来消除此警告,从而不会生成		此警告
ceph crash archive <crash-ID>
#所有新的崩溃都可以通过以下方式存档
ceph crash archive-all
#通过ceph crash ls仍然可以看到已存档的崩溃
可以通过以下方式完全禁用这些警告
ceph config set mgr/crash/warn_recent_interval 0

@H_881_3301@2
health: HEALTH_WARN
mons are allowing insecure global_ID reclaim

ceph health detail
ceph config set mon auth_allow_insecure_global_ID_reclaim false

@H_881_3301@3
health: HEALTH_WARN
application not enabled on 1 pool(s)

ceph health detail
ceph osd pool application enable rbd rbd

@H_881_3301@4
HEALTH_WARN
Degraded data redundancy: 187/561 objects degraded (33.333%),43 pgs degraded,160 pgs undersized; OSD count 2 < osd_pool_default_size 3; mons are allowing insecure global_ID reclaim

认3副本没满足

ceph共享节点扩容

节点扩容

@H_881_3301@扩容mon

  1. 环境准备

    硬件配置:2C4G
    另外每台机器最少挂载三块硬盘

  2. 关闭防火墙:

    systemctl stop firewalld
    systemctl disable firewalld
    
  3. 关闭selinux:

    sed -i 's/enforcing/Disabled/' /etc/selinux/config
    setenforce 0
    
  4. 关闭NetworkManager

    systemctl disable NetworkManager
    systemctl stop NetworkManager
    
  5. cephnode1操作机上主机名与IP对应关系

    vim /etc/hosts
    192.168.66.10 cephnode1 
    192.168.66.11 cephnode2
    192.168.66.12 cephnode3
    
  6. 设置文件描述符

    echo "ulimit -SHn 102400" >> /etc/rc.local
    vim /etc/security/limits.conf
    *       soft    nofile  655360
    *       hard    nofile  655360
    root    soft    nofile  655360
    root    hard    nofile  655360
    *       soft    core    unlimited
    *       hard    core    unlimited
    root    soft    core    unlimited
    
  7. 内核参数优化

    vi /etc/sysctl.conf
    #仅在内存不足的情况下--当剩余空闲内存低于vm.min_free_kbytes limit时,使用交换空间。
    vm.swappiness = 0
    #单个进程可分配的最大文件
    fs.nr_open=2097152
    #系统最大文件句柄数
    fs.file-max=1048576
    #backlog 设置
    net.core.somaxconn=32768
    net.ipv4.tcp_max_syn_backlog=16384
    net.core.netdev_max_backlog=16384
    #TCP Socket 读写 Buffer 设置
    net.core.rmem_default=262144
    net.core.wmem_default=262144
    net.core.rmem_max=16777216
    net.core.wmem_max=16777216
    net.core.optmem_max=16777216
    net.ipv4.neigh.default.gc_stale_time=120
    #TIME-WAIT Socket 最大数量、回收与重用设置
    net.ipv4.tcp_max_tw_buckets=1048576
    net.ipv4.tcp_tw_reuse=1
    net.ipv4.tcp_tw_recycle=1
    #TCP 连接追踪设置
    net.nf_conntrack_max=1000000
    net.netfilter.nf_conntrack_max=1000000
    net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
    
    # FIN-WAIT-2 Socket 超时设置
    net.ipv4.tcp_fin_timeout=15
    net.ipv4.ip_forward = 1 
    kernel.pID_max=4194303
    
    sysctl -p
    
  8. 同步网络时间修改时区

    yum -y install chrony
    vim /etc/chrony.conf
    systemctl restart chronyd
    systemctl enable chronyd
    chronyc sources
    
  9. 安装createrepo和epel源(传软件包\安装包到服务器上)

    yum install  createrepo -y
    yum install epel-release -y
    yum install lttng-ust -y
    
  10. 编辑yum源文件

    vim /etc/yum.repos.d/ceph.repo 
    [Ceph]
    name=Ceph packages for $basearch
    baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/$basearch
    gpgcheck=0
    priority=1
    
    [Ceph-noarch]
    name=Ceph noarch packages
    baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/noarch
    gpgcheck=0
    priority=1
    
    [ceph-source]
    name=Ceph source packages
    baseurl=http://192.168.0.6/ceph/rpm-nautilus/el7/SRPMS
    gpgcheck=0
    priority=1
    
    #执行
    yum makecache
    
  11. 软件包\安装包到服务器

    yum -y install ceph
    ceph -v
    

@H_881_3301@cephnode1操作节点上把新加mon加入集群

for i in 13 14; do ssh-copy-ID root@192.168.66.$i; done
cd /my-cluster/
vim ceph.conf
mon_initial_members = cephnode1, cephnode2, cephnode3, cephnode4, cephnode5
mon_host = 192.168.66.10,192.168.66.11,192.168.66.12,192.168.66.13,192.168.66.14
public_network = 192.168.66.0/24
#配置文件推送到各各节点
ceph-deploy --overwrite-conf config push 
cephnode1 cephnode2 cephnode3 cephnode4 cephnode5
ceph-deploy mon add cephnode4  --address 节点ip
ceph-deploy mon add cephnode5 --address 节点ip

@H_881_3301@cephnode1操作节点上安装Ceph Cli方便执行一些管理命令
如前所示,我们执行admin的命令,要提供admin的key(–keyring ceph.clIEnt.admin.keyring)以及配置文件(-c ceph.conf)。在后续的运维中,我们经常 需要在某个node上执行admin命令。每次都提供这些参数比较麻烦。实际上,ceph 会认地从/etc/ceph/中找keyring和ceph.conf。因此,我们可以把 ceph.clIEnt.admin.keyring和ceph.conf放到每个node的/etc/ceph/。ceph-deploy可 以 帮做这些

ceph-deploy admin cephnode4 cephnode5

@H_881_3301@cephnode1操作节点上部署监控配置mgr,用于管理集群

ceph-deploy mgr create cephnode4 cephnode5

@H_881_3301@cephnode1操作节点上部署mds(CephFS)

ceph-deploy mds create cephnode4 cephnode5

@H_881_3301@cephnode1操作节点上添加osd(添加的磁盘必须是没有被处理过的裸盘)

ceph-deploy osd create --data /dev/sdb cephnode4
ceph-deploy osd create --data /dev/sdc cephnode4

ceph-deploy osd create --data /dev/sdb cephnode5
ceph-deploy osd create --data /dev/sdc cephnode5

@H_881_3301@检查状态

ceph osd tree

@H_881_3301@查看Ceph集群概况

ceph -s

喜欢的亲可以关注点赞评论哦!以后每天都会更新的哦!本文为小编原创文章文章中用到的文件安装包等可以加小编联系方式获得;
欢迎来交流小编联系方式VX:CXKlittlebrother 进入运维交流群

总结

以上是编程之家为你收集整理的ceph分布式存储全部内容,希望文章能够帮你解决ceph分布式存储所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

Swift文章

最正确的方法就是去编译后的包里查看。步骤:1、先运行一下项目。2、找到编译后的目录。有两种方法:直接访问/通过XCode进入(1)直接访问编译后的文件路径:/Users/用户名/Library/Developer/Xcode/DerivedData/工程名-sdsdfsfdsfdsdfsf/Build/Products,文件下面有XXX-iphoneos,XXXX-iphonesimulator样式的文件夹。选择符合我们运行设备和版本的文件夹,点击进入。(2)可以通过Xco.
前言在iOS原生开发的时候,凡是涉及到运行项目之后Xcode提示Build target Runner-Log,是不是每次看到这种报错提示就觉得眼前一黑,头皮发麻?其实也没我说的那么夸张,但是有时候遇到这种问题确实比较费头发。本篇文章就来分享一个常见的问题,但是该问题解决起来不复杂,分享出来,方便后期查阅使用。重现报错提示具体在Xcode中的报错提示如下所示:Showing Recent Messagesdiff: /Users/admin/Documents/WorkSpac
本文将会给出2022年软件行业的编程语言、薪水、就业以及技术的深度分析数据全文较长,建议收藏之后,慢慢看文章目录一、最受欢迎的语言 二、最值得学习的语言 三、薪水/工资分析 四、就业状况 五、协作工具数据 六、网络框架分析 七、数据库排名软件开发行业正在全球范围内快速发展。因此,重要的是要掌握最流行的编程语言,以便在这个竞争激烈的行业中建立前途似锦的职业生涯。您可能不必掌握我们今天讨论的所有语言,但您的简历中掌握的语言越多,在 2022 年和未来几年内,就越有客户和开.
~/Library/Developer/Xcode/iOS Device Logs清空 Products~/Library/Developer/Xcode/ProductsXcode 12 及之后版本 还有3个占用内存的文件分别是:第一名:iOS.simruntime 10.29 GB (iOS 日常开发需要使用,勿删)第二名:watchOS.simruntime 7.05 GB (不做 watch 开发可以删除)第三名:tvOS.simruntime 5.39 G
Swift与OC的混编可以总结出以下几种场景OC&amp;Swift Mixed In The Same TargetProject中OC 调用 SwiftPod中OC 调用 SwiftProject中Swift 调用 OCPod中Swift 调用 OCOC&amp;Swift Mixed In The Different TargetOC Project 调用 Swift PodSwift Project 调用 OC PodOC Pod 调用 Swift PodSwift
最近数据结构实践课经常需要进行二进制文件读写,总结出以下经验:1. 读写二进制文件最好加上ios::binary2. 二进制文件用fstream读写时既可以输入又可以输出,此模式下可以实现只修改文件部分内容例如,我创建了含有100个数的二进制文件data_unsorted.dat,生成结果如下:写入如下代码(ios::in不能少) file.open("data_unsorted.dat", ios::binary | ios::in | ios::out); in.
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注