当前位置: 首页 > 科技观察

Curve文件存储在Elasticsearch冷热数据存储中的应用实践

时间:2023-03-13 00:31:38 科技观察

了解更多开源内容请访问:开源基础软件社区https://ost.51cto.comElasticsearch广泛应用于生产环境.本文介绍一种基于网易书扇开源Curve文件存储的方法,实现Elasticsearch存储成本、性能、容量、运维等方面的显着提升。ES使用CurveFS的四大好处1.CurveFS提供的成本优势为了高可靠,如果ES使用本地磁盘,一般会使用两份,也就是说存储1PB的数据需要2PB的物理空间。但是,如果使用CurveFS,由于CurveFS的后端可以连接S3,可以使用对象存储提供的EC能力,既保证了可靠性,又减少了副本数,从而达到了目的降低成本。以目前网易对象存储上主流的EC20+4使用方式为例,这种使用方式相当于1.2副本。所以以ES需要1PB空间为例,那么使用CurveFS+1.2副本对象存储只需要1.2PB空间,相比本地盘2个副本可以节省大约800TB的容量,成本优化效果非常显着。2、CurveFS提供的性能优势如下。以下面描述的使用场景为例。与ES原来使用S3插件进行快照传输存储的方式相比,每次操作都需要恢复索引。以100G的日志索引为例。此外,还会有传输时间。restore的恢复速度如果是100M,需要300多秒。现实情况是,在写入密集型集群上,这样的操作可能需要几个小时。在使用CurveFS后的新模式中,基本上只需要解冻冻结的索引,让对应节点的ES加载对应的元数据到内存中执行索引即可。只需要30秒左右,比直接使用S3存储冷数据有一个数量级的下降。3、CurveFS提供的容量优势本地磁盘的容量是有限的,但CurveFS的空间容量可以在线无限扩展。同时降低了本地存储的维护成本。4、CurveFSES提供的易运维优势使用本地磁盘,采用S3插件方式。当需要扩容或异常节点恢复时,需要增加人力运维成本。CurveFS在实施之初的目标之一就是易于运维,因此CurveFS可以实现数条命令的快速部署和故障的自愈能力。另外,如果ES使用CurveFS,实现了存储和计算的分离,进一步减轻了ES用户的运维负担。背景选择CurveFS的原因:生产环境中有大量场景使用ES作为文档和日志存储的后端,因为ES优秀的全文检索能力可以大大简化相关系统设计的复杂度在许多情况下。更常见的场景比如日志存储,链路跟踪,甚至监控指标都可以用ES来完成。本地盘转MinIO为了符合国内法律约束,线上系统需要按要求存储6个月到1年不等的系统日志,主要用于国内保险、金融合规等场景。根据内部管理的服务器数量,纯syslog每天需要1T的日志存储空间。根据目前手头5台12盘位4T硬盘的服务器,最多只能存储200多天,无法满足1年的日志存储需求。需要。针对ES使用本地磁盘无法满足存储容量需求的情况,网易ES底层存储此前推出了基于S3的存储方案,以减少存储空间消耗。如下图所示,ES配合minio压缩数据存储空间。比如100G的日志,在ES中,由于可靠性要求,需要双副本,会占用200G的空间。ES在索引分片的时候会周期性的转存到minio仓库中。MinIO到CurveFS的解决方案一定程度上缓解了存储空间的资源问题,但在实际使用中还是感觉很不方便。运营和维护成本。ES节点升级时需要额外卸载安装S3插件,有一定的运维成本。性能瓶颈。随着私有化的Minio桶中数据量的增加,数据的存储和提取将成为稳定性的大问题。内部搭建的Minio集群在做数据恢复的时候,由于文件处理性能等因素,经常会遇到访问超时等场景,所以一直在关注是否有相关的系统可以提供更好的读写稳定性.经过多年的演进,S3协议已经成为对象存储的行业标准。很多人都想过将S3的存储能力以fuse的形式来使用。事实上,基于S3的文件系统有很多种,比如开源的s3fs-fuse、ossfs、RioFS、CurveFS等。经过实际研究和大量测试,基于Curve的性能(尤其是在元数据方面,CurveFS是基于RAFT共识协议自研的元数据引擎,其他没有元数据引擎的S3文件系统(如s3fs,ossfs))相比具有巨大的性能优势),易运维,稳定,Curve可以同时提供块存储和文件存储能力,加上Curve活跃的开源氛围,最终选择了CurveFS。CurveFS结合ES的实践CurveFS简介CurveFS是一个基于Fuse并兼容POSIX接口的分布式文件系统。数据增删改查请求,与数据集群交互,处理文件数据增删改查请求。元数据集群metaserver集群用于接收和处理元数据(inode和dentry)的增删改查请求。Metaserver集群的架构类似于CurveBS,具有高可靠性、高可用性、高扩展性的特点:MDS用于管理集群拓扑和资源调度。Metaserver是一个数据节点,一个metaserver对应管理一个物理磁盘。CurveFS使用Raft来保证元数据的可靠性和可用性。Raft复制组的基本单位是copyset。元服务器包含多个副本集复制组。数据集群datacluster用于接收和处理文件数据的增删改查。数据集群目前支持两种存储类型:支持S3接口的对象存储和CurveBS(开发中)。Curve除了同时支持文件存储和块存储,从上面的架构图也可以看出Curve的一个特点:CurveFS后端可以同时支持S3和Curve块存储。这样的特性使得用户可以选择性地将对性能要求高的系统的数据存储在Curve块存储后端,而对成本要求高的系统可以将数据存储在S3后端。ES使用CurveFSCurveFS定位于网易运维的云原生系统,部署简单快捷。使用CurveAdm工具,只需要几条命令就可以部署CurveFS环境。具体部署见[1][2];部署后效果如下图所示:在日志存储场景下,改造基于历史服务器在线改造。下图是一个在线日志的存储架构示例。node0到node5可以认为是热存储节点。机器都是12*4T,128G存储机型。每个节点运行3个ES实例,每个实例有32G内存,4个独立磁盘。node6到node8都是12*8T的存储模型,3台服务器运行一个Minio集群,每台机器上的ES实例不在本地写入数据。可以看出改造的主要重点是将node6改造为node8,三个节点进行ES配置改造。以node6节点的配置为例:cluster.name:ops-elknode.name:${HOSTNAME}network.host:[_local_,_bond0_]http.host:[_local_]discovery.zen.minimum_master_nodes:1action.auto_create_index:truetransport.tcp.compress:trueindices.fielddata.cache.size:20%path.data:/home/nbs/elk/data1/datapath.logs:/home/nbs/elk/data1/logs-/curvefs/mnt1xpack.ml启用:falsexpack.monitoring.enabled:falsediscovery.zen.ping.unicast.hosts:[“ops-elk1:9300”,“ops-elk7:9300”,“ops-elk7:9300”,“ops-elk8.jdlt”.163.org:9300"]node.attr.box_type:cold如配置所示,主要修改是将ES目录的数据存放调整为CurveFS的fuse挂载目录,然后添加node.attr的设置.box_type。分别在node6到node8上配置cold,在node1到node5上配置相应的属性为hot。所有节点配置完成后,会进行一轮滚动重启。除了ES设置的底层配置,很重要的一点就是调整index索引的设置。这件作品的设定并不困难。要点就是:设置索引对应的数据分配依赖和别名。设置相应的索引生命周期策略。实际上,新节点开启数据存储后,如果没有affinity设置,集群会立即开始relocating操作。因此建议在股票索引中加入routing.allocation.require设置,避免热点数据被分配到CurveFS存储节点。对于每天添加新索引,建议添加如下索引模板配置。{“模板”:{“设置”:{“索引”:{“生命周期”:{“名称”:“系统日志”,“rollover_alias”:“系统日志”},“路由”:{“分配”:{“需要":{"box_type":"hot"}}},"number_of_shards":"10","translog":{"durability":"async"}}},"aliases":{"syslog":{}},"mappings":{}}}这个索引模板设置的核心点:路由部分必须指定要写入热点数据节点的新索引。生命周期中的新rollover_alias设置。索引部分的生命周期是指索引的生命周期策略。需要注意的是,rollover_alias中的值必须与下面的别名定义对齐。冷数据的切换可以在kibana的index_lifecycle_management管理页面设置。对于上面的syslog场景,hot部分设置如下图,其余基本默认即可。在索引周期管理配置页面,除了可以设置热阶段,还可以设置热阶段。在warm阶段,可以进行shrink、forcemerge等操作。在日志存储场景中,我们直接实现从热到冷的处理逻辑。从技术上讲,对于日志存储类业务,底层索引一旦写入,数据就不会再被更改。设置索引副本数主要是为了应对分布式系统节点宕机等异常场景下的数据恢复。如果在存储层面有更可靠的方式,那么自然可以将es的副本数调整为0。因此,航研云计算存储团队研发的基于S3后端的存储文件系统CurveFS自然而然地进入了冷数据选择的视野。从技术上讲,内部S3存储是基于EC纠删码的实现。通过将ES的副本数减少到0,可以显着降低对存储空间的需求。后续规划经过与Curve社区小伙伴的沟通,社区在存储计算分离方向对CurveFS的后续规划如下:Curve文件存储后端全面支持Curve块存储,满足部分场景下的性能需求。预计2023年Q1发布。Curve文件存储支持生命周期管理,支持自定义数据冷热,按需将数据存储在不同的集群中。预计2023年Q2发布。Curve全面支持云原生部署。目前客户端已经支持CSI,预计2023年Q2发布集群部署支持。