我正在研究构建系统日志/日志记录基础架构,并正在思考一些架构最佳实践。从本质上讲,我发现系统日志系统需要支持两个相互冲突的工作负载:
- 日志收集。潜在的海量数据流需要快速写入磁盘并建立索引。
- 日志查询。日志可以通过日期、来源等固定字段以及文本搜索进行查询。
假设我现在想将其保留在一台服务器上,最佳的磁盘/系统设置是什么?我应该使用 SSD 还是 ramdisk 来减轻一些处理负担?一些磁盘在条带中,一些在 raid5 中?
我特别关注带有 ElasticSearch/MongoDB 的 Graylog2
答案1
首先,我认为它有助于定义日志的价值,例如,如果这是高容量的财务交易日志,您可以选择具有大量电池支持的缓存的非常高端的 raid 控制器和具有标记写入或 NCQ 的高端磁盘。
在一般情况下,ZFS 文件系统非常有用,您可以自由使用 HDD 来获得其提供的廉价容量,然后在需要时添加 SSD 作为读取缓存(ZFS 中的 L2 ARC 缓存)。如果写入成为瓶颈,您可以将 SSD 用于 ZIL(实际上是 ZFS 中的写入缓存)。好消息是,这一切都很有效,根据我的经验,效果也非常好。
为了进一步解决相互冲突的工作量问题,像 Cassandra 这样的产品(还有许多其他选择)拥有一种架构,可以巧妙地以有效的方式解决这些要求。