zoukankan      html  css  js  c++  java
  • ceph学习

    一、ceph架构

    ceph生态系统分为四个部分:

    客户端:数据用户

    元数据服务器:缓存和同步分布式元数据

    对象存储集群

    架构

    ceph客户端

    ceph使用一个有趣的备选,而不是依赖分配选项(将磁盘上的块映射到指定文件的元数据)。

    Linux透视图中的一个文件会分配到一个来自元数据服务器的inode number(INO),对于文件这是一个唯一的标识符。然后文件被推入一些对象中(根据文件大小)。使用INO和Object Number,每个对象被分配一个对象ID(OID)。在OID上使用一个简单的哈希,每个对象被分配到一个放置组。放置组(PGID)是一个对象的概念容器。最后,放置组到存储设备的映射是一个伪随机映射,叫做Controlled Replication Under Scalable Hashing(CRUSH)的算法。这样一来,放置组(以及副本)到存储设备的映射就不用依赖任何元数据,而是依赖一个伪随机的映射函数。这种操作是理 想的,因为它把存储的开销最小化,简化了分配和数据查询。

    架构2

    ceph元数据服务器

    元数据服务器的工作就是管理文件系统的名称空间

    ceph监视器

    包含集群映射管理的监视器,当对象存储设备发生故障或者新设备添加时,监视器就检测和维护一个有效的集群映射

    ceph对象存储

    存储设备安全管理对象到块的映射

    另,

    查看日志:

    vim /var/log/ceph/ceph.log

    二、CRUSH算法

    CRUSH算法在一致性hash基础上很好的考虑了容灾域的隔离,能够实现各域的副本放置规则,例如:跨机房,机架感知等

    分布式块存储RBD、分布式对象存储RADOS GateWay

    RADOS采用强一致性设计,即Write-All-Read-One,读取效率高,工程难度低,适合读多写少的系统

    Write-All-Read-One的特点是必须等待所有的副本全部写入完毕才算是写入成功,实际上对系统硬件的可靠性要求较高,如果在写入过程中硬件发生故障,则写入过程会受影响,通常表现为卡顿,一般是数秒级,时间的长短和判断故障的机制,以及恢复过程中IO的处理策略相关。

    三、问题

    ceph osd dump | grep test-pool

    image

    通过查看pool的策略,从test-pool中看出副本策略为最大3副本,最小两幅本

    即:当一个磁盘损坏的时候,集群认为是健康的,还可以进行IO

    如果将最小副本设置为3,当一个磁盘损坏的时候,集群认为是不健康的,不能进行IO

    快照相关

    对image进行snapshot操作,以便将来可以随时恢复到当时状态

    libvirt

    libvirt大体就是一个中间层,与rbd配合使用的关系如下:

    libvirt-->qemu-->librbd-->librados-->osds

                                    |--->monitors

    四、硬件推荐

    1. ceph守护进程和其他进程恰当分布,推荐在一台机器上运行一种类型的守护进程
    把数据集群的进程(如OpenStack、CloudStack)安装在别的机器上
    2. cpu

    ceph元数据服务器对CPU敏感,会动态重分布它们的负载,需要足够的处理能力(4核或更强)

    ceph的osd运行着RADOS服务,CRUSH算法,需要一定的处理能力(双核)

    监视器运行着集群运行图的副本,对CPU不敏感,如果运行ceph集群以外的CPU密集型任务,就需要保留足够的能力。

    3.RAM

    元素据服务器和监视器必须尽快提供它们的数据,需要足够的内存,至少1G

    OSD日常运行不需要那么多内存,每进程500M差不多了;然而在恢复期间占用内存比较大,(每进程每TB数据需要约1G内存)。通常内存越多越好

    因为 Ceph 发送 ACK 前必须把所有数据写入日志(至少对 xfs 和 ext4 来说是),因此均衡日志和 OSD 性能相当重要。

    4.硬盘驱动器

    OSD应该有足够的空间用于存储对象数据,建议容量大于1TB的硬盘,单个驱动器容量越大,其对应的OSD所需内存就越大,特别是在重均衡、回填、恢复期间。

    Tip:不顾分区而在单个硬盘上运行多个OSD,这样不明智

    Tip:不顾分区而在运行了OSD的硬盘上同时运行监视器或元数据服务器也不明智

    推荐使用独立的驱动器用于安装操作系统和软件,另外每个osd占用一个驱动器

    建议将osd日志存储在ssd上

    Ceph 最佳实践指示,你应该分别在单独的硬盘运行操作系统、 OSD 数据和 OSD 日志。

    5.固态硬盘

    评估SSD 时,顺序读写性能很重要,在为多个 OSD 存储日志时,有着 400MB/s 顺序读写吞吐量的 SSD 其性能远高于 120MB/s 的。

    Important:我们建议发掘 SSD 的用法来提升性能。然而在大量投入 SSD 前,我们强烈建议核实 SSD 的性能指标,并在测试环境下衡量性能。

    把 OSD 的日志存到 SSD 、把对象数据存储到独立的硬盘可以明显提升性能。

    提升CephFS文件系统性能的一种方法是从CephFS文件内容里分离出元数据,ceph提供默认的metadat存储池来存储CephFS元数据,所以你不需要给CephFS元数据创建存储池,但是可以给他创建一个仅指向某主机SSD的CRUSH运行图。

    控制器

    控制器对写的吞吐量也有显著影响,要谨慎地选择,以免产生性能瓶颈

    其他注意事项

    你可以在一台机器上运行多个OSD,但是要确保硬盘总吞吐量不超过为客户端提供读写服务器所需的网络带宽;还要考虑每台主机上所存储的数据占总体的百分比,如果一台主机所占百分比太大而它挂了,就可能导致诸如full ratio的问题,此问题会使Ceph中止运作以防止数据丢失。

    OSD数量太多(如20个以上)的主机会派生出大量线程,尤其是在恢复和重均衡期间,很多linux内核默认的最大线程数较小(如32k个),可以将kernel.pid_max值调高些,理论值4194303,把下面行加入到 /etc/sysctl.conf 文件

    kernel.pid_max = 4194303
    网络

    建议每台机器最少两个千兆网卡,分别用于公网(前端)和集群网络(后端)

    五、操作系统推荐

    如果想在btrfs上运行Ceph,推荐使用一个最新的linux内核

  • 相关阅读:
    Zookeeper的功能以及工作原理
    高性能Server---Reactor模型
    python——PEP8 Python 编码规范整理
    python——数据结构之单链表的实现
    Git——使用gitignore建立项目过滤规则
    算法与数据结构——最大子序列和问题
    Django——Django,uwsgi Nginx组合建站
    使用Nginx+uWSGI+Django方法部署Django程序(下)
    使用Nginx+uWSGI+Django方法部署Django程序(上)
    Python——实现代理服务功能
  • 原文地址:https://www.cnblogs.com/panliu/p/4819263.html
Copyright © 2011-2022 走看看