如何基于Ceph设计与构建一套软件定义存储系统( 三 )


目前来看,块存储一般不使用纠删码机制 。
8) Cache Tiering
Ceph目前支持针对Pool的分层机制,即创建一个3备份的以SSD作为数据盘的缓存存储池,然后创建其他以HDD为数据盘,并且采用纠删码机制的数据存储池 。Ceph支持设置缓存池的数据更新到数据池的策略,包括基于相对或绝对的缓存数据量,以及数据的新旧程度 。
这种方式很好地结合了副本机制和纠删码机制的优点,但它通常需要复杂的配置以及额外的调优工作 。
9) Placement Group数目
PG数,即每存储池中哈希樋(Hash Buckets)的个数 。该值通常需要在创建池时指定,并且在存储池的生命周期内不可调整 。
如果PG数太大,则会导致更多的Peering,从而占用更多的资源 。如果太小,则会导致每个group里有过多的数据,会有过多的hotspots,而数据的条带化不够,从而导致过慢的recovery和re-balance 。
关于PG的一个大概的经验公式是:
PG数目的近数 = ((OSD的个数 * 100) / Replica的最大数) / Pool的个数
PG的数目 = 跟上述公式计算出的PG数目 的2的N次幂最接近的数
如果对结果不太确定,Ceph专门提供了一个网页,供精确计算PG时使用 。
https://ceph.com/pgcalc/
10) I/O调度:
通常情况下,SSD以及NVME盘选择使用NOOP 。NOOP实现了一个简单的FIFO队列,它像电梯的工作方法一样对I/O请求进行组织 。当有一个新的I/O请求到来时,它会将请求合并到最近的请求的后面,以确保访问同一介质 。
11)Ceph参数选择
参数调整应该是一个循环优化的过程,应当在性能调优的环境中进行 。以下是一些通用的配置,仅供参考 。
filestore_queue_max_ops = 65536
filestore_queue_max_bytes = 536870912
filestore_queue_committing_max_ops = 65536
filestore_queue_committing_max_bytes = 536870912
journal_queue_max_ops = 65536
journal_queue_max_bytes = 536870912
osd_client_message_cap = 65536
osd_client_message_size_cap = 536870912
ms_dispatch_throttle_bytes = 536870912
filestore_fd_cache_size = 4096 #默认256
filestore_fd_cache_shards = 256 #默认16
cephx_sign_messages = false #默认开启,如果对安全要求不高,可以关闭
12) BIOS
关闭服务器的C-State/P-State以及节电模式,打开CPU的Prefetch等功能,将服务器处于最高性能状态 。
设计和搭建软件定义存储系统是一件复杂的任务 。Ceph只是其中的一部分,它还与很多方面相关:服务器,硬盘,网络,Linux内核,文件系统 。因此,存储架构师需要结合业务需求,平衡各方面的需要,设计和构建一个高性能高可靠高可用易扩展的SDS系统 。
联系我们(微信):kinnah333
【如何基于Ceph设计与构建一套软件定义存储系统】

推荐阅读