热门标签 | 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

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

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

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


推荐阅读
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Bootstrap Paginator 分页插件详解与应用
    本文深入探讨了Bootstrap Paginator这款流行的JavaScript分页插件,提供了详细的使用指南和示例代码,旨在帮助开发者更好地理解和利用该工具进行高效的数据展示。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 如何精通编程语言:全面指南与实用技巧
    如何精通编程语言:全面指南与实用技巧 ... [详细]
  • 本文推荐了六款高效的Java Web应用开发工具,并详细介绍了它们的实用功能。其中,分布式敏捷开发系统架构“zheng”项目,基于Spring、Spring MVC和MyBatis技术栈,提供了完整的分布式敏捷开发解决方案,支持快速构建高性能的企业级应用。此外,该工具还集成了多种中间件和服务,进一步提升了开发效率和系统的可维护性。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • pypy 真的能让 Python 比 C 还快么?
    作者:肖恩顿来源:游戏不存在最近“pypy为什么能让python比c还快”刷屏了,原文讲的内容偏理论,干货比较少。我们可以再深入一点点,了解pypy的真相。正式开始之前,多唠叨两句 ... [详细]
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 近年来,区块链技术备受关注,其中比特币(Bitcoin)功不可没。尽管数字货币的概念早在上个世纪就被提出,但直到比特币的诞生,这一概念才真正落地生根。本文将详细探讨比特币、以太坊和超级账本(Hyperledger)的核心技术和应用场景。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • Python学习day3网络基础之网络协议篇
    一、互联网协议连接两台计算机之间的Internet实际上就是一系列统一的标准,这些标准称之为互联网协议,互联网的本质就是一系列网络协议。二、为什么要有互联网协议互联网协议就相当于计 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 深入解析 OpenCV 2 中 Mat 对象的类型、深度与步长属性
    在OpenCV 2中,`Mat`类作为核心组件,对于图像处理至关重要。本文将深入探讨`Mat`对象的类型、深度与步长属性,这些属性是理解和优化图像操作的基础。通过具体示例,我们将展示如何利用这些属性实现高效的图像缩小功能。此外,还将讨论这些属性在实际应用中的重要性和常见误区,帮助读者更好地掌握`Mat`类的使用方法。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
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社区 版权所有