热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集成Ceph存储集群到OpenStack云平台中

Ceph是一个符合POSIX(PortableOperatingSystemforUNIX)、开源的分布式存储系统,依据GNU次通用公共许可而运行。该项目最初由SageWeill于2007年开发,该项目的理念是提出一个没有任何单点故障的集群,确保能够跨集群节点进行永久数据复制。与在

Ceph 是一个符合 POSIX (Portable Operating System for UNIX)、开源的分布式存储系统,依据 GNU 次通用公共许可而运行。该项目最初由 Sage Weill 于 2007 年开发,该项目的理念是提出一个没有任何单点故障的集群,确保能够跨集群节点进行永久数据复制。

与在任何经典的分布式文件系统中一样,放入集群中的文件是条带化的,依据一种称为 Ceph Controlled Replication Under Scalable Hashing (CRUSH) 的伪随机的数据分布算法放入集群节点中。

Ceph 是一种有趣的存储替代方案,这得益于它实现的一些概念,比如元数据分区,以及一种复制或放置组策略(将一系列对象聚合到一个分组中,然后将该分组映射到一系列对象存储后台进程 (OSD))。

这些特性支持自动扩展、恢复和自主管理集群,因为他们使用以下绑定(在不同的级别上)提供了与您的 Ceph 集群的交互方式:

Reliable Autonomic Distributed Object Store (RADOS) 网关是一种 RESTful 接口,您的应用程序可与其通信,以便将对象直接存储在集群中。

librados 库是一种访问 RADOS 的便利方式,它支持 PHP、Ruby、Java、Python 和 C/C++ 编程语言。

Ceph 的 RADOS 块设备 (RBD) 是一个完全分布式的块设备,它使用一个 Linux 内核和一个 Quick EMUlator (QEMU)/基于内核的虚拟机 (KVM) 驱动程序。

原生 CephFS 是一个分布式文件系统,全面支持 Filesystem in Userspace (FUSE)。

如 图 1 中所示,Ceph 生态系统可分解为 5 个组成部分:

librados 库

RADOS 网关

RBD

CephFS

集群中的各种节点

图 1. Ceph 生态系统
该图显示了 Ceph 的组成部分

Ceph 生态系统原生支持许多与其交互的方式,这使得在已运行的基础架构中集成它变得既轻松又便捷,即使它执行的是一个在统一项目文件中提供块和对象存储功能的复杂任务。

接下来我们来看一下组成 Ceph 的各个部分以及它们在 Ceph 中分别扮演的角色。

RADOS 对象存储

图 1 表明 RADOS 对象存储是存储集群的基础。对于通过众多客户端或网关(RADOSGW、RBD 或 CephFS)执行的每个操作,数据会进入 RADOS 或者可以从中读取数据。图 2 显示了 RADOS 集群,它包含两个后台守护进程:Ceph 对象存储后台进程 (OSD) 和维护集群映射的主要副本的 Ceph 监视器。

图 2. The RADOS 对象存储
该图显示了 RADOS 对象存储的组成部分

集群映射描述了对象块的物理位置,以及一个将设备聚合到物理位置的 “桶” 列表。该映射由 Ceph 的高级放置算法控制,该算法在物理位置上建模逻辑位置。图 3 描绘了集群内的 “池”,即存储对象的逻辑分区。每个池被动态映射到 OSD。

图 3. RADOS 位置分组
该图给出了 RADOS 位置分组算法

现在让我们看看第一组后台进程 OSD,然后再看看监视器,最后看看属于 CephFS 分布式文件系统的 Ceph 元数据服务器。

OSD

OSD 是访问文件系统并向其中写入数据的后台进程,它提供了通过集群网络访问文件系统的能力。要让集群正常运行,Ceph 开发人员建议使用 XFS(Silicon Graphics 日志文件系统)或 B 树文件系统 (Btrfs) 作为用于对象存储的文件系统。也可使用第 4 代扩展文件系统 (ext4),但它未提供 XFS 和 Btrfs 为 Ceph 提供的功能。

在本示例中,XFS 部署在所有存储节点上。图 4 演示了 Ceph OSD 如何与物理存储交互。

图 4. RADOS OSD
该图给出了 RADOS OSD 监视器

在 RADOS 集群中,Ceph 监视器后台进程 (ceph-mon) 位于 OSD 旁边。监视器是一些后台进程,客户端通过与这些后台进程进行通信来操作存储在集群中的数据。这是 Ceph 提出的一种创新方法:无需联系一个管理数据集群访问的集中的元数据服务器,这些轻量型后台进程向客户端提供集群映射,并处理与外部应用程序的所有通信。

ceph-mon 还管理集群中的数据一致性。监视器根据 Paxos 协商协议来进行操作,运行至少 3 个 ceph-mon 实例是您的集群设置的前提条件。

图 5 给出了客户端通过监视器后台进程与集群交互的图像。

图 5. RADOS 监视器
该图显示了 RADOS 监视器后台进程

Ceph 使用的最后一个堆栈是 Ceph 元数据服务器,它通过 ceph-mds 后台进程公开,该后台进程存储了 CephFS 的元数据。

该元数据与您在其他文件系统中看到的元数据相同,这些元数据包括文件所有者、时间戳、权限等。元数据后台进程公开了一个符合 POSIX 的分布式文件系统,并将元数据存储在 RADOS 中。

请注意,元数据服务器本身并没有为客户端提供文件;这消除了集群中的任何单点故障。

图 6 显示了 ceph-mds 在使用 CephFS 时所扮演的角色。

图 6. Ceph 元数据服务器
该图显示了 Ceph 元数据服务器 CRUSH 算法

Ceph CRUSH(Controlled Replication Under Scalable Hashing)是一个负责集群中的数据放置和检索的算法。存储客户端和 OSD 都使用 CRUSH 算法来执行数据放置和分布计算,没有依赖于可能会在集群中引入单点故障的中央查找表。通过这种方式,CRUSH 减轻了集群工作负载,将工作分配给客户端和集群中的 OSD。

考虑到该算法的性质,数据位置可由客户端本身明确地计算,这能够消除维护集群对象的高度可用的位置映射的需求。换句话说,您的集群需要的负载比经典集群要少一些。

拓扑结构和基础架构感知是 CRUSH 的另一个创新功能。从逻辑上讲,OSD 嵌套在一个组件分层结构中,比如机架或交换机,这使得根据客户端亲和度来隔离故障硬件区域或分区成为可能。CRUSH 映射描述了 OSD 和客户端计算的对象位置;它由轻量型的节点监视器(ceph-mon 后台进程)维护,该进程的惟一工作就是在基础架构更改时调整和传播该映射。这种类型的可扩展模型与经典的数据集群模型是相反的:客户端通常仅请求数据,而集群执行所有复杂的位置计算。最后,元数据由元数据服务器处理并由客户端访问。

下一节提供在正运行的 OpenStack 云中的 CephFS 使用和集成的示例。第一部分介绍如何将 CephFS 部署为您实例的共享存储;第二部分介绍 Glance 镜像服务在 RADOS 中原生地放置和检索镜像的方式。

使用 CephFS 作为云中的共享实例存储

得益于 Ceph 的众多网关,您可以通过许多方式轻松地集成 Ceph 集群。例如:

您可以使用 Ceph 作为使用原生 CephFS 的实例目录的后端。

或者支持您的 Glance 镜像存储库(Ceph 现在集成为 Glance 的一个管道)。

甚至使用 Ceph 作为您的永久性卷后端的强大而又可靠的基础(也可以实现原生集成)。

Ceph 社区在该技术的透明集成上取得了巨大成就,这使得 Ceph 不仅能够保护您的云数据,还能够提供类似的管理解决方案,为管理员提供了设计创造性的实现的机会,但又不会牺牲性能和遇到潜在的不稳定性,因为 Ceph 的设计不允许出现单点故障。

本节描述了两种类型的实现:使用 CephFS 作为您的实例的后端以及 Ceph 与 Glance 的原生集成。对于本文,我假设您已有两个专用于 OpenStack 实例的服务器,并且两个服务器都能够挂载和同时访问 CephFS 磁盘。我还假设您已经有一个健康的、正在运行的 Ceph 集群。我的设置基于 Ubuntu Server Precise 12.04,但 CephFS 可用于许多 Linux 平台。

可在两个计算节点上运行以下命令,安装 CephFS 需要的组件如下:

sudo aptitude install ceph-fs-common ceph-fuse

所有依赖包都已安装。您需要一个 Ceph 管理员密钥(用于测试之用途),我使用了管理员帐户,但在生产环境中应创建一个专门的用户。要获取密钥,可运行以下命令:

sudo ceph-authtool --print-key /etc/ceph/keyring.admin
AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ

要停止节点上的计算服务,可运行以下命令:

sudo service nova-compute stop; sudo service libvirt-bin stop

将您的实例目录的内容复制到 CephFS 中,然后将它挂载到 nova-compute 所使用的位置:

sudo mount -t ceph ip-of-ceph-mon1:6789,ip-of-ceph-mon-X:6789:/ \
/mnt/ -o name=admin,secret=AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ==

如果对基础镜像使用 QEMU Copy On Write (Qcow2) 格式,那么可以使用以下命令:

mkdir /mnt/_base && for i in $( ls /var/lib/nova/instances/_base/); \
do sudo qemu-img covert -O qcow2 $i /mnt/_base/$i; done
sudo cp -r /var/lib/nova/instances/instance-* /mnt

现在可卸载 (/mnt) 并将 CephFS 卷重新挂载到正确的位置上:

sudo mount -t ceph ip-of-ceph-mon1:6789,ip-of-ceph-mon-X:6789:/ \
/var/lib/nova/instances/ -o name=admin,secret=AQDVGc5P0LXzIhAA5C020gbdrgypSFGUpG2cqQ==
sudo chown nova. /var/lib/nova/instances; \
service libvirt-bin start; service nova-compute start

瞧!您目前在两个计算节点之间已经拥有高度可用的共享存储,并且已经使得一些特性(比如迁移)或高可用性恢复场景成为可能。

下一节将介绍如何启动从第一个计算节点到第二个计算节点的迁移。

现在您已拥有实例的共享存储,可在节点之间启动一次实时迁移。如果希望减轻一个计算节点上的负载,迁移非常有用。


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 构建Filebeat-Kafka-Logstash-ElasticSearch-Kibana日志收集体系
    本文介绍了如何使用Filebeat、Kafka、Logstash、ElasticSearch和Kibana构建一个高效、可扩展的日志收集与分析系统。各组件分别承担不同的职责,确保日志数据能够被有效收集、处理、存储及可视化。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 深入理解一致性哈希算法及其应用
    本文详细介绍了分布式系统中的一致性哈希算法,探讨其原理、优势及应用场景,帮助读者全面掌握这一关键技术。 ... [详细]
  • 本文探讨了2012年4月期间,淘宝在技术架构上的关键数据和发展历程。涵盖了从早期PHP到Java的转型,以及在分布式计算、存储和网络流量管理方面的创新。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 本文探讨了大数据生态系统的构建,重点介绍其分布式存储和运算机制,并补充相关技术及应用场景。 ... [详细]
  • ZooKeeper集群脑裂问题及其解决方案
    本文深入探讨了ZooKeeper集群中可能出现的脑裂问题,分析其成因,并提供了多种有效的解决方案,确保集群在高可用性环境下的稳定运行。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 前言叨逼叨iOS上传文件,可能有很多第三方的框架之类的,比如AFN或者Alamofire之类的框架,但是今天要谈论的是原生的API是如何进行文件上传。兵 ... [详细]
author-avatar
手机用户2502903815
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有