[ ceph ] 基本介绍及硬件配置
1. Ceph简介
所有的 Ceph 存储集群的部署都始于一个个 Ceph节点、网络和 Ceph存储集群。Ceph 存储集群至少需要一个 Ceph Monitor、一个 Manager和一个Ceph OSD 守护进程。在运行 Ceph 作为文件存储时,还需要 Ceph 元数据服务。
Monitors:Ceph监视器(ceph-mon)维护集群状态的映射,包括监视器映射、管理器映射、OSD映射和 CRUSH 映射。这些映射是Ceph守护进程相互协调所需的关键集群状态。Monitor还负责管理守护进程和客户机之间的身份验证。为了冗余和高可用性,通常至少需要三个监视器。
Managers: Ceph管理进程(ceph-mgr)守护进程负责跟踪Ceph集群的运行指标和当前状态,包括存储利用率、当前性能指标和系统负载。Ceph Manager 守护进程还托管基于python的模块来管理和公开Ceph集群信息,包括基于web的Ceph dashboard 和 REST API 高可用通常需要至少两个管理器。
Ceph OSDs: 对象存储守护进程(ceph-osd)存储数据,处理数据复制,恢复,重新平衡并通过检查其他Ceph OSD 守护进程的心跳来为Ceph Monitor 和 Manager 提供一些监控信息,至少3 Ceph OSDs通常需要冗余和高可用性。
MDSs:Ceph元数据服务器(MDS,ceph-mds)Ceph元数据服务器允许POSIX文件系统用户执行基本命令(如ls、find等),而不会给Ceph存储集群带来巨大的负担。
Ceph将数据作为对象存储在逻辑存储池中,使用 CRUSH算法,Ceph计算哪个对象应该被放置到哪个PG里,并进一步计算哪个Ceph OSD守护进程应该存放PG,CRUSH 算法使Ceph存储集群能够动态伸缩、再平衡和恢复。
2. 硬件推荐
Ceph 被设计成在普通硬件上运行,这使得建立和维护PB级别的数据集群在经济上可行的。在规划硬件集群时,需要平衡许多考虑事项,包括故障域和潜在的性能问题。硬件规划应该包括在许多主机上分发Ceph守护进程和其他使用Ceph的进程。通常,建议在为该类型守护进程配置的主机上运行特定类型的Ceph守护进程。建议使用其他主机来处理利用你的数据集群的进程。
CPU
Ceph 元数据服务器对 CPU 敏感,它会动态地重分布它们的负载,所以你的元数据服务器应该有足够的处理能力(如 4 核或更强悍的 CPU )。Ceph 的 monitor 守护进程维护了 clustermap,它不给客户端提供任何数据,因此它是轻量级的,并没有严格的处理器要求。在大多数场景下,一个普通的单核服务器处理器就可以运行 Ceph monitor 服务。Ceph 的 OSD 运行着 RADOS 服务、用 CRUSH 计算数据存放位置、复制数据、维护它自己的集群运行图副本,因此 OSD 需要一定的处理能力(如双核 CPU )。监视器只简单地维护着集群运行图的副本,因此对 CPU 不敏感;但必须考虑机器以后是否还会运行 Ceph 监视器以外的 CPU 密集型任务。例如,如果服务器以后要运行用于计算的虚拟机(如 OpenStack Nova ),你就要确保给 Ceph 进程保留了足够的处理能力,所以我们推荐在其他机器上运行 CPU 密集型任务。
一个 Ceph OSD 守护进程需要相当数量的处理性能,因为它提供数据给客户端。要评估 Ceph OSD 的 CPU 需求,知道服务器上运行了多少 OSD 上非常重要的。通常建议每个 OSD 进程至少有一个核心。可以通过以下公式计算 OSD 的 CPU 需求:
((CPU sockets * CPU cores per socket * CPU clock speed in GHz )/ No.of OSD ) >= 1
比如:
Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz 6 core --> 1 * 6 * 2.40 = 14.4 适合多达 14 个 OSD 的 Ceph 节点
Intel(R) Xeon(R) CPU E5-2680 v3 @ 2.50GHz 12 core --> 1 * 12 * 2.50 = 30 适合多达 30 个 OSD 的 Ceph 节点
如果打算使用 Ceph 纠删码特性,最好能有一个更高性能的CPU ,因为运行纠删码需要更强的处理能力。
RAM 内存
元数据服务器和监视器必须可以尽快地提供它们的数据,所以他们应该有足够的内存,至少每进程 1GB 。 OSD 的日常运行不需要那么多内存(如每进程 500MB )差不多了;然而在恢复期间它们占用内存比较大(如每进程每 TB 数据需要约 1GB 内存)。通常内存越多越好。
网络
Ceph 是一个分布式存储系统,很大程度上依赖于底层的网络基础设施。要让Ceph集群变得可靠、高效,就得确保设计一个良好的网络。建议让所有的集群节点拥有两张冗余独立的网卡用于集群和客户端流量。
一个设计良好的Ceph集群使用两个物理隔离网络:一个是集群网络(内部网络),另一个是客户端网络(外部网络)。两个网络应该从服务器到网络交换机以及它们之间的一切环节都进行物理隔离,如下图:
数据存储
要谨慎地规划数据存储配置,因为其间涉及明显的成本和性能折衷。来自操作系统的并行操作和到单个硬盘的多个守护进程并发读、写请求操作会极大地降低性能。
重要提示:因为 Ceph 发送 ACK 前必须把所有数据写入日志(至少对 xfs 和 ext4 来说是),因此均衡日志和 OSD 性能相当重要。
硬盘驱动器
OSD 应该有足够的空间用于存储对象数据。考虑到大硬盘的每 GB 成本,我们建议用容量大于 1TB 的硬盘。建议用 GB 数除以硬盘价格来计算每 GB 成本,因为较大的硬盘通常会对每 GB 成本有较大影响,例如,单价为 $75 的 1TB 硬盘其每 GB 价格为 $0.07 ( $75/1024=0.0732 ),又如单价为 $150 的 3TB 硬盘其每 GB 价格为 $0.05 ( $150/3072=0.0488 ),这样使用 1TB 硬盘会增加 40% 的每 GB 价格,它将表现为较低的经济性。另外,单个驱动器容量越大,其对应的 OSD 所需内存就越大,特别是在重均衡、回填、恢复期间。根据经验, 1TB 的存储空间大约需要 1GB 内存。
提示:不顾分区而在当个硬盘上运行多个OSD 是不明智的!
提示:不顾分区而在运行了OSD的硬盘上同时运行监视器或元数据服务器也上不明智的!
存储驱动器受限于寻道时间、访问时间、读写时间、还有总吞吐量,这些物理局限性影响着整体系统性能,尤其在系统恢复期间。因此我们推荐独立的驱动器用于安装操作系统和软件,另外每个 OSD 守护进程占用一个驱动器。大多数 “slow OSD”问题的起因都是在相同的硬盘上运行了操作系统、多个 OSD 、和/或多个日志文件。鉴于解决性能问题的成本差不多会超过另外增加磁盘驱动器,你应该在设计时就避免增加 OSD 存储驱动器的负担来提升性能。
Ceph 允许你在每块硬盘驱动器上运行多个 OSD ,但这会导致资源竞争并降低总体吞吐量; Ceph 也允许把日志和对象数据存储在相同驱动器上,但这会增加记录写日志并回应客户端的延时,因为 Ceph 必须先写入日志才会回应确认了写动作。 btrfs 文件系统能同时写入日志数据和对象数据, xfs 和 ext4 却不能。
Ceph 最佳实践指示,你应该分别在单独的硬盘运行操作系统、 OSD 数据和 OSD 日志。
固态硬盘
一种提升性能的方法是使用固态硬盘( SSD )来降低随机访问时间和读延时,同时增加吞吐量。 SSD 和硬盘相比每 GB 成本通常要高 10 倍以上,但访问时间至少比硬盘快 100 倍。
SSD 没有可移动机械部件,所以不存在和硬盘一样的局限性。但 SSD 也有局限性,评估SSD 时,顺序读写性能很重要,在为多个 OSD 存储日志时,有着 400MB/s 顺序读写吞吐量的 SSD 其性能远高于 120MB/s 的。
重要提示:建议发掘 SSD 的用法来提升性能。然而在大量投入 SSD 前,我们强烈建议核实 SSD 的性能指标,并在测试环境下衡量性能。
正因为 SSD 没有移动机械部件,所以它很适合 Ceph 里不需要太多存储空间的地方。相对廉价的 SSD 很诱人,慎用!可接受的 IOPS 指标对选择用于 Ceph 的 SSD 还不够,用于日志和 SSD 时还有几个重要考量:
- 写密集语义: 记日志涉及写密集语义,所以你要确保选用的 SSD 写入性能和硬盘相当或好于硬盘。廉价 SSD 可能在加速访问的同时引入写延时,有时候高性能硬盘的写入速度可以和便宜 SSD 相媲美。
- 顺序写入: 在一个 SSD 上为多个 OSD 存储多个日志时也必须考虑 SSD 的顺序写入极限,因为它们要同时处理多个 OSD 日志的写入请求。
- 分区对齐: 采用了 SSD 的一个常见问题是人们喜欢分区,却常常忽略了分区对齐,这会导致 SSD 的数据传输速率慢很多,所以请确保分区对齐了。
SSD 用于对象存储太昂贵了,但是把 OSD 的日志存到 SSD 、把对象数据存储到独立的硬盘可以明显提升性能。 osd journal 选项的默认值是 /var/lib/ceph/osd/$cluster-$id/journal ,你可以把它挂载到一个 SSD 或 SSD 分区,这样它就不再是和对象数据一样存储在同一个硬盘上的文件了。
控制器
硬盘控制器对写吞吐量也有显著影响,要谨慎地选择,以免产生性能瓶颈。
其他注意事项
你可以在同一主机上运行多个 OSD ,但要确保 OSD 硬盘总吞吐量不超过为客户端提供读写服务所需的网络带宽;还要考虑集群在每台主机上所存储的数据占总体的百分比,如果一台主机所占百分比太大而它挂了,就可能导致诸如超过 full ratio 的问题,此问题会使 Ceph 中止运作以防数据丢失。
如果每台主机运行多个 OSD ,也得保证内核是最新的。
OSD 数量较多(如 20 个以上)的主机会派生出大量线程,尤其是在恢复和重均衡期间。很多 Linux 内核默认的最大线程数较小(如 32k 个),如果您遇到了这类问题,可以把 kernel.pid_max 值调高些。理论最大值是 4194303 。例如把下列这行加入 /etc/sysctl.conf 文件:
kernel.pid_max = 4194303
Ceph OSD 节点的密度也是影响集群性能、可用容量和 TCO(Total Cost of Ownership ,即总拥有成本)的一个重要因素。通常,大量的小容量节点 比 少量的大容量节点要好,但这并不是定论,应该选择适当的 Ceph 节点密度,使得三个节点容量小于总容量的 10%。例如:在一个 1PB的ceph集群中,应该避免使用 4 个 250TB 的 OSD 节点,因为每个节点占用了 25% 的集群容量。相反,可以使用 13 个 80TB 的 OSD节点,每个节点容量小于集群容量的 10%。
参考链接:
http://docs.ceph.org.cn/start/hardware-recommendations/
[ ceph ] 基本介绍及硬件配置的更多相关文章
- C#程序中获取电脑硬件配置信息的一种方法
本文介绍获取cpu信息和内存信息的方法,根据本文所举例的代码可以举一反三获取更多信息. 获取cpu名称的方法: public string GetCpuInfo() { ManagementObjec ...
- CEPH集群操作入门--配置
参考文档:CEPH官网集群操作文档 概述 Ceph存储集群是所有Ceph部署的基础. 基于RADOS,Ceph存储集群由两种类型的守护进程组成:Ceph OSD守护进程(OSD)将数据作为对象 ...
- kudu介绍及安装配置
kudu介绍及安装配置 介绍 Kudu 是一个针对 Apache Hadoop 平台而开发的列式存储管理器.Kudu 共享 Hadoop 生态系统应用的常见技术特性: 它在 commodity har ...
- 嵌入式Linux设备驱动程序:发现硬件配置
嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...
- 人机大战之AlphaGo的硬件配置和算法研究
AlphaGo的硬件配置 最近AlphaGo与李世石的比赛如火如荼,关于第四盘李世石神之一手不在我们的讨论范围之内.我们重点讨论下AlphaGo的硬件配置: AlphaGo有多个版本,其中最强的是分布 ...
- 如何查看LINUX 硬件配置信息
如何查看LINUX 硬件配置信息 在网上找了N久,发现了一篇不错的文档,转载一下: 1.查看机器所有硬件信息: dmidecode |more dmesg |more 这2个命令出来的信息都非常多,所 ...
- C/C++通过WMI和系统API函数获取获取系统硬件配置信息
转载:http://www.cnblogs.com/renyuan/archive/2012/12/29/2838716.html 转载:http://blog.csdn.net/jhqin/arti ...
- 【Spark学习】Apache Spark集群硬件配置要求
Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4135912.html 目录 存 ...
- LINUX查看硬件配置命令
LINUX查看硬件配置命令 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinf ...
随机推荐
- 图论 - 图的深度优先遍历c++实现
图的深度优先遍历c++实现 深度优先搜索 邻接矩阵的创建 int i, j, m, a, b; cin >> n >> m; //初始化二维矩阵 for (i = 1; i & ...
- rhel6.2配置在线yum源
由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源. 本文包括配置本地源及第三方源.第三方源包括:网易,epel, ...
- laravel 配置路由 api和web定义的路由的区别详解
1.路由经过中间件方面不同 打开kerenl.php就可以看到区别 protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware ...
- 分析脚本搭建docker环境:python, R
1. 搭建Anaconda Python3.6 FROM nvidia/cuda:8.0-cudnn6-devel-ubuntu16.04 MAINTAINER Tyan <tyan.liu.g ...
- spark运行时加载配置文件(hive,hdfs)
文章为转载,如有版权问题,请联系,谢谢! 转自:https://blog.csdn.net/piduzi/article/details/81636253 适合场景:在运行时才确定用哪个数据源 imp ...
- str = @"abc ""def"" ghi """"jkl"""" mn";
namespace ConsoleQuotes { class Program { static void Main(string[] args) { string str = @"abc ...
- QT工程中添加资源(简单明了)
1. 在工程文件下右击添加新文件 2. 在QT目录下选择QT Resource File 3. 填写资源名称 4. 点击完成就可以看到自己建立的资源了 5. 点击右键添加现有文件,找到自己要添加的资源 ...
- Problem 1 珠江夜游 (cruise .cpp)———2019.10.6
Problem 1 珠江夜游 (cruise.cpp)[题目描述]小 Z 放假后难得来一趟广州游玩,当然要吃遍广州各路美食小吃然后再到珠江新城看看远近闻名的小蛮腰啦!可当小 Z 一路吃吃吃以后,天渐渐 ...
- 洛谷P3834题解
若想要深入学习主席树,传送门. Description: 给定数列 \(\{a_n\}\) ,求闭区间 \([l,r]\) 的第 \(k\) 小的数. Method: 先对数据进行离散化,然后按照权值 ...
- Java解决java.io.FileNotFoundException: E:\work\work (拒绝访问。)
一.问题 在使用FileInputStream或FileOutputStream时会遇到如下问题1和问题2. 问题1: java.io.FileNotFoundException: .\xxx\xxx ...