正文
从存储节点的物理分布上,要尽可能分散在不同的机柜中,避免因为单机柜掉电,影响存储对外提供服务;其次,存储节点应连接到同一层级的交换机上,链路越长,经过节点越多,出问题可能性越高,性能也越差。同时,要充分考虑存储的主要应用场景和平台,尽量将它们与存储放在同一C段,保证最优。第三,连接管道要足够粗,存储节点和交换机全部做成聚合,存储节点不同网卡不同端口捆绑成bond4模式,保证出现问题时不影响服务。交换机与之相连端口也需要做成捆绑,否则会形成回路,造成网络风暴。
如果希望增大存储吞吐量,还需要设置网络包的巨型帧。
项目可能出现的所有问题一定要扼杀在摇篮里,否则墨菲定律会被一次又一次被证明。
例如,网络连接为什么要用bond4模式,而没用bond1呢?在网络连接出现问题时,bond1模式在节点空载情况下,是不丢包的,但是在高负载情况下,一般会丢1-2个包,再加上软件系统出错进行纠正的时间,即使有应用系统的重试机制,SLO也是无法满足的,所以bond1是不够的。
在存储物理架构上,
存储集群实现了3(monitor)+N(OSD)+2(client)的建设形式,实现角色隔离,功能分离,互不影响。
3个monitor节点配置有monitor和mgr服务,作为存储的大脑和监控使用。在N(数量可以线性扩展,所以未明确)个OSD节点上进行了一些优化,首先是磁盘的IO调度策略上。
SSD磁盘采用NOOP IO调度策略,NOOP遵循先入先出(FIFO)原则,对请求进行了简单的队列处理,NOOP对bio进行了后向合并,最大程度保证相邻bio进行合并处理,提高了效率。
SAS磁盘采用默认的DeadLine IO调度策略,Deadline调度策略对读和写进行区分,执行FIFO策略,每个请求会被分配一个时间戳,在读优先的情况下,可以知道哪个写请求已经长时间没有被调度,进行优先调度,避免了写饿死的情况发生。
其次,基于存储的读写策略设置,我们进行了OSD硬盘类型的混插,SSD硬盘和SAS硬盘按照1:2的比例配置,保证每次读操作都落在性能较好的SSD硬盘上,同时每次写操作也会相应提高效率。