导读 | 在规划Ceph分布式存储集群环境的时候,对硬件的选择很重要,这关乎整个Ceph集群的性能,下面梳理到一些硬件的选择标准,可供参考: |
1)CPU选择html
Ceph metadata server会动态的从新分配负载,它是CPU敏感性的,因此Metadata Server应该有比较好的处理器性能 (好比四核CPU). Ceph OSDs运行RADOS服务,须要经过CRUSH来计算数据的存放位置,replicate数据,以及维护Cluster Map的拷贝,所以OSD也须要合适的处理性能 Ceph Monitors 简单的维护了Cluster Map的主干信息因此这个是CPU不敏感的。linux
2)RAM选择网络
Metadata servers 以及Monitors 必须可以快速的提供数据,所以必须有充足的内存(e.g., 1GB of RAM per daemon instance). OSDs 在执行正常的操做时不须要过多的内存 (e.g., 500MB of RAM per daemon instance);可是 执行恢复操做时,就须要大量的内存(e.g., ~1GB per 1TB of storage per daemon). Generally, 并且是越多越好。分布式
3)Data Storage选择性能
规划数据存储时要考虑成本和性能的权衡。同时OS操做,同时多个后台程序对单个驱动器进行读写操做会显着下降性能。也有文件系统的限制考虑:BTRFS对于生产环境来讲不是很稳定,但有能力记录journal和并行的写入数据,而XFS和EXT4会好一点。操作系统
提示:不推荐单个磁盘的分区上运行多个OSD。不推荐单个磁盘的分区上运行一个OSD和一个监视器或元数据服务。线程
存储驱动器受寻道时间,访问时间,读取和写入时间,以及总吞吐量的限制。这些物理限制会影响整个系统的性能,尤为是在恢复过程当中。咱们建议为操做系统和软件使用专用的驱动器,而且为你在主机上运行每一个OSD守护分配一个驱动器。大多数“慢OSD”的问题的产生是因为在一个操做系统同一驱动器上运行多个OSDs和/或多个日志。设计
因为解决性能问题的一小部分的成本可能超过额外的磁盘驱动器的成本,所以你能够加快你的的集群设计规划,为了不OSD存储驱动器负荷太重。日志
在每一个硬盘驱动器上同时运行多个Ceph的OSD守护程序,可是这可能会致使资源争用,并下降总体吞吐量。你可能把日志和对象数据存储在相同的驱动器上,但这样可能会增长所花费在记录写入操做和发送ACK给客户端的时间。在CEPH能够ACK对于写入操做前,Ceph必须把操做写入到日志。server
BTRFS文件系统的日志数据和对象数据的同时能够写,而XFS和ext4的不能。Ceph的推荐作法,分开在单独的驱动器上运行操做系统,OSD数据和OSD日志。
4)固态硬盘选择
性能改进的机会之一是使用固态硬盘(SSD),以减小随机访问时间,读取等待时间,同时吞吐量加速。固态硬盘每GB的费用与硬盘驱动器相比每每超过10倍之多,但固态硬盘每每表现至少比硬盘驱动器快100倍的访问时间。
固态硬盘没有移动机械部件,因此他们不须要受同类型硬盘驱动器的限制。尽管固态硬盘有明显的局限性。重要的是考虑其连续读取和写入的性能。当存储多个OSDs的多个日志时,有400MB/s的顺序写入吞吐量的SSD的性能,相比机械盘120MB/s的顺序写入吞吐量,SSD更好、更快。
固态硬盘的OSD对象存储成本高昂,经过存储一个OSD的日志在一个单独的硬盘驱动器SSD和OSD的对象数据上时,OSDs上可能会看到一个显着的性能提高。OSD日志配置默认在/var/lib/ceph/osd/$cluster-$id/journal里。你能够挂载这个路径到SSD或SSD的分区上,将日志文件和数据文件分别存放在不一样的磁盘。
5)Networks选择
建议每台机器最少两个千兆网卡,如今大多数普通硬盘吞的吐量都能达到100MB/s,网卡应该能处理因此OSD硬盘总吞吐量,因此推荐最少两个千兆网卡,分别用于public network和cluster_network。集群网络(最好别链接到互联网)用于处理由数据复制产生的额外负载,而且有助于阻止拒绝服务攻击,拒绝服务攻击会干扰数据归置组,使之在OSD数据复制时不能回到active+clean状态。请考虑部署万兆网卡。经过1Gbps网络复制1TB数据耗时3小时,而3TB(一个典型的驱动配置)须要9小时,与之相反,若是使用10Gbps复制时间可分别缩减到20分钟和1小时。
在一个PB级集群中,OSD磁盘失败是常态,而非异常;在性价比合理的前提下,系统管理员想让PG尽快从degraded(降级)状态恢复到active+clean状态。采用10G网卡值得考虑使用。每一个网络的顶级机架路由器到核心路由器通讯应该有更快的吞吐量,例如,40Gbps~100Gbps。
6)其余注意事项:
能够在每台主机上运行多个OSD进程,但应该确保OSD硬盘的吞吐量总和不超过客户端读取或写入数据所需的网络带宽。也应该考虑在每一个主机上数据的存储率。若是一个特定的主机上的百分比较大,它可能会致使问题:为了防止数据丢失,会致使Ceph中止操做。
当每台主机上运行多个OSD进程时,还须要保证内核是最新的。 当每台主机上运行多个OSD进程时(如>20)会产生不少的线程,特别是进行recovery和relalancing操做。许多Linux内核默认线程限最大数量比较小(例如,32k的)。若是您遇到这方面的问题,能够考虑把kernel.pid_max设置的高一点。理论上的最大值为4,194,303。