Ceph集群性能优化介绍

1.集群硬件配置

典型硬件资源配置建议:后端

组件 CPU 内存 网络 存储空间
Monitor 1vCore 2GB 1x 1GbE+ NICs 单个Mon 10GB+
OSD 1vCore BlueStore后端,单个OSD 至少3 GB。裸容量每增长1 TB,则内存相应增长1 GB 1x 1GbE+ NICs (建议10GbE+) 一个OSD 对应一块独立的硬盘
  • public network和cluster network 分开。
  • 操做系统、OSD data、OSD 日志分别使用独立的硬盘,使总体吞吐量最大化。
  • 通常,建议单OSD 分配4GB以上的内存,多小对象或有大对象场景下对性能有提高。不建议低于2GB。
  • 对于OSD 除显式分配的内存外,还会多约20%的额外内存开销,须要考虑到。

对于采用的BlueStore的Ceph,将SSD 用在合适的地方通常能够显著提高性能:缓存

  • OSD 日志建议使用SSD。若是采用bluestore,则建议裸容量配比—— block : block.db : block.wal = 100:1:1,后二者建议采用SSD或NVMe SSD。
  • 采用cache-tiering,其中cache pool 采用SSD。
  • CephFS 的metadata pool 采用SSD。
  • RGW index pool 采用SSD。

2.常见性能影响因素

集群性能评估

根据采用的硬件和集群规模,应当对集群有个大体的性能估算。集群性能影响因素主要有:硬盘(单个硬盘的性能和硬盘总数)、网络性能、内存和CPU。其中前两个是估算集群总体性能的主要因素,而根据场景,性能主要是IOPS和带宽。
通常:性能优化

  • 集群读取性能:
集群读取性能:W*n*μ,不管在FileStore仍是BlueStore下
其中,
W: 单块裸盘读带宽
n: OSD数量
μ: 损耗系数 通常为0.7~0.8
  • 集群写入性能:
集群写入性能:[(W*n)/WAF]*μ
W: 单块裸盘写入带宽
n: OSD数量
WAF: 写放大系数
μ: 损耗系数
X: 写入数据块大小(KiB)
N: 多副本Size大小
K: 纠删码K值
M: 纠删码M值
FileStore 5: 5KiB, FileStore中transaction元数据的数据量大小(推测值)
BlueStore 5: 5KiB, BlueStore中RocksDB的WAL数据大小(推测值)
BlueStore 20: 20KiB, BlueStore小文件写入时产生的Zero-filled数据块大小

通过对集群的性能评估,结合主要的影响因素,试着找出性能瓶颈的大方向。网络

常见性能优化点

排除硬件瓶颈的可能,则能够从常见的几项对照排查修改。性能

  • 存储池的PG 数是否合理:通常,集群PGs总数 = (OSD总数 * 100 / 最大副本数),具体可参考pgcal
  • 网络带宽、单盘性能是总体性能的基础,须要评估影响总体性能的瓶颈。
  • monitor 采用3或5个便可。因为须要再monitor之间作数据同步,过多的monitor 会影响性能。
  • 建议Ceph 集群和其余系统独立部署,以避免资源抢占影响性能,且混合部署影响troubleshooting。

3.使用Cache-tiering

使用缓存分层,能够根据需求在热层和冷层之间自动迁移数据,从而提升群集的性能。
采用的cache-tiering的前提是要搞清业务场景,由于cache-tiering 是工做负载相关的,不合适的场景匹配不合适的缓存模式(cache mode)反而会让总体性能降低。优化

  • write-back:Ceph 客户端写数据至cache tier,随后会将数据迁移至storage tier。客户端读取数据也是直接读取cache tier,若cache tier 没有会从storage tier 中获取并迁移至cache tier。客户端的读写始终不直接跟storage tier 关联。 这种模式适用于可变数据的存储访问。
  • readproxy:使用已存在与cache tier 内的对象, 若是cache tier 内无该对象则会将请求代理至storage tier。
  • readonly:cache tier 仅接受读操做,写操做都会指向storage tier,预读取的对象会被迁移至cache tier,必定条件下会被迁移出cache tier。这种模式不保证一致性,读取的数据多是过时的,适用于不变数据的存储访问。
  • none:彻底disable cache tiering。

cache-tiering 配置流程

首先,除storage pool 外,须要建立一个全SSD 的cache pool(经过修改 crushmap)。
根据实际场景:操作系统

  • 数据对象是更偏向不变对象仍是可变对象,决定采用什么缓存模式(cache-mode);
  • 根据客户端负载状况,设置和调整缓存池的参数(大小、数量等);
  • 其余诸如cache age、target size 等参数。

必要操做步骤:
1)关联cache pool 和后端存储池:ceph osd tier add代理

2)设置cache-mode:ceph osd tier cache-mode writeback日志

3)将原storage pool的流量指向cache pool:ceph osd tier set-overlaycode

4)必要的缓存阈值设置,全部的请求在达到target_max_bytes 或target_max_objects 设定值时会被阻塞

ceph osd pool set target_max_bytes {#bytes}
ceph osd pool set target_max_objects {#objects}

4.Damons 相关配置优化

常见配置优化项及建议值,根据实际场景可再作调整。
默认应将RGW Cache 和RBD cache打开。

OSD

osd_scrub_begin_hour = 1 #根据业务实际设置在非业务时间scrub
osd_scrub_end_hour = 5
osd_recovery_op_priority = 3
osd_client_op_priority = 63
osd_recovery_max_active = 10
osd_recovery_sleep = 0
osd_max_backfills = 10

RGW(对象存储)

rgw_cache_enabled = true # 开启RGW cache
rgw_thread_pool_size = 2000
rgw_cache_lru_size = 20000
rgw_num_rados_handles = 128

RBD(块存储)

rbd_cache_enabled = true # 开启RBD cache
rbd_cache_size = 268435456
rbd_cache_max_dirty = 134217728
rbd_cache_max_dirty_age = 5
相关文章
相关标签/搜索