我已经建立了一个实验性的ceph集群--12个节点,50个mds,3个mons,3个md,我正在尝试运行一个samba网关。似乎在编写大量小文件时,桑巴的fsync()系统调用通常会阻塞,大概是在日志刷新间隔的频率上。我是一个开发人员,并不是一个真正的系统管理员,我希望了解一些关于如何将fsyncs的影响降到最低的背景知识。到目前为止,我已经从samba中删除了fsync调用,这在很大程度上是有帮助的,但是我仍然认为有很多小文件的性能应该会更好。电力损耗的完整性不是一个忧虑。此外,对于大文件,集群将饱和然后10G链接。我的日志磁盘肯定不是最优的--它们是机械磁盘,每个磁盘由几个osds共享。有什么办法可以防止写日记吗?在fsync上阻塞这么久?当下一个日志到达fsync调用时,Ceph是否在等待下一个日志提交?我真的没有ssd期刊的预算,所以尽量减少影响是唯一的选择。而且,对于ceph内核客户端,性能要比通过samba网关要好得多--因此这显然不受网络带宽的限制。
所使用的服务器是重新使用的旧计算节点:4xXeon5160,每个节点有16 4x,具有1G绑定网络接口,10G无限带用于集群网络。
每个OSD节点都有一个用于日志的本地10K SAS磁盘,多个OSD使用一个大型的Dell外壳,每个OSD模式在单个磁盘中使用。
暂停可以在零到大约5秒之间变化,这是日志刷新间隔,所以我猜它取决于fsync()相对于日志提交的挂起时间发生在哪里。
我还没有试过Bluestore,但如果/当它投入生产时,这将是未来的默认选择。
发布于 2021-05-04 14:30:34
当下一个日志到达fsync调用时,Ceph是否在等待下一个日志提交?
是的,主要是。但是,根据后端的不同,它的工作方式略有不同。
在FileStore下,有一个小的日志缓冲区可以充当一个小的写突发缓存,但它很小。是的,一旦它被填满,它就会阻塞整个集群或PG。
在BlueStore下,没有这样的缓冲区。是的,蓝宝石阻止每一次写到日刊-所有的期刊在PG。这就是BlueStore如何在IOPS和写作中保持非常一致和可预测的方式。在Bluestore下,您至少要将写前日志( WAL )移动到Enterprise,因为如果有足够的空间(您甚至不需要指定它们,只需指定WAL),BlueStore就会将Journal和DB移动到相同的WAL分区。
fsync但是在这个集群中真正的问题是,您正在使用次优化的HDD作为期刊,当它们被刷新时会阻塞非常慢的fsyncs。
即使是消费者级的SSD也有严重的问题,Ceph的fsync频率是日记/WAL,因为消费者SSD只有事务日志而没有真正的电源备份。
有大型电容器的企业SSD允许驱动器在停电后继续工作。因此,他们可以保证一个成功的写在一个权力损失事件.
另外的好处是企业级SSD通常忽略来自操作系统的fsync命令!因为它们可以保证写入的成功,所以它们会立即从操作系统返回fsync请求。
因此,当使用企业级SSD作为WAL/DB/Journal时,您将获得很大的性能提升。
在FileStore下,您将看到这些延迟消失,但您将看到不一致的缓存突发,然后返回。
这就是BlueStore进来的地方,因为BlueStore将保证一致的IOPS并全面写入。但是,您需要在企业SSD上使用WAL/DB/Journal来忽略这些fsync。
目前,英特尔的S3700s在二手市场上的售价约为40美元/ea。为解锁fsyncs带来的巨大性能收益而进行的微小投资。
Filestore将所有内容写入日志,并且只有当日志填充到配置的百分比时才开始将其刷新到数据设备。这非常方便,因为它使日志充当吸收随机写入突发的临时缓冲区。蓝光不能做同样的事情,即使你把它的WAL+DB放在SSD上。它也有一种叫做延迟写队列的日志,但是它很小(只有64个请求),并且没有任何类型的后台刷新线程。因此,您实际上可以增加延迟请求的最大数量,但是在队列填满之后,性能将下降,直到OSD重新启动。
和:https://docs.ceph.com/en/latest/rados/configuration/bluestore-config-ref/
BlueStore日志将始终放在可用的最快的设备上,因此使用DB设备将提供与WAL设备相同的好处,同时还允许将额外的元数据存储在那里(如果合适的话)。这意味着,如果指定了DB设备,但没有显式WAL设备,则WAL将被隐式地与速度更快的设备上的DB定位。
https://serverfault.com/questions/828858
复制相似问题