构建基于JuiceFS的Milvus集群

250 阅读6分钟

DZone>大数据专区>构建基于JuiceFS的Milvus集群

构建基于JuiceFS的Milvus集群

本文介绍了什么是JuiceFS,如何建立一个基于JuiceFS共享文件存储的Milvus集群,以及用户使用该方案可以期待的性能。

jingjing jia user avatar通过

贾晶晶

-

Changjian Gao user avatar通过

高长健

-

21年9月30日 - 大数据区 -回顾

喜欢 (1)

评论

保存

鸣叫

1.28K浏览次数

加入DZone社区,获得完整的会员体验。

免费加入

开源社区之间的合作是一件神奇的事情。充满激情、智慧和创造力的志愿者不仅使开源解决方案不断创新,他们还努力将不同的工具以有趣和有用的方式结合起来。世界上最流行的矢量数据库Milvus和专为云原生环境设计的共享文件系统JuiceFS,就是在这种精神下被它们各自的开源社区联合起来的。本文解释了什么是JuiceFS,如何建立一个基于JuiceFS共享文件存储的Milvus集群,以及用户使用该解决方案可以期待的性能。

什么是****是JuiceFS?

JuiceFS是一个高性能、开源的分布式POSIX文件系统,它可以建立在Redis和S3之上。它是为云原生环境设计的,支持管理、分析、归档和备份任何类型的数据。JuiceFS通常用于解决大数据挑战,构建人工智能(AI)应用程序,以及日志收集。该系统还支持多个客户端之间的数据共享,并可直接作为Milvus的共享存储使用。

在数据及其相应的元数据分别被持久化到对象存储和Redis之后,JuiceFS作为一个无状态的中间件。数据共享是通过使不同的应用程序通过标准文件系统接口无缝对接来实现的。JuiceFS依赖于Redis,一个开源的内存数据存储,用于元数据存储。使用Redis是因为它保证了原子性并提供高性能的元数据操作。所有数据都通过JuiceFS客户端存储在对象存储中。架构图如下。

JuiceFS的整体架构。

建立一个基于JuiceFS的Milvus集群

用JuiceFS构建的Milvus集群(见下面的架构图)通过使用Mishards(一个集群分片中间件)分割上游请求,将请求层叠到其子模块。当插入数据时,Mishards将上游请求分配给Milvus写节点,后者将新插入的数据存储在JuiceFS中。当读取数据时,Mishards通过Milvus读取节点将数据从JuiceFS加载到内存中进行处理,然后收集并返回上游子服务的结果。

用JuiceFS构建的Milvus集群的架构。

步骤1:启动MySQL服务

在集群的任何节点上启动MySQL服务。详情请见用MySQL管理元数据

第2步:创建一个JuiceFS文件系统

出于演示目的,使用预编译的二进制JuiceFS程序。为你的系统下载正确的安装包,并按照JuiceFS快速入门指南了解详细的安装说明。要创建一个JuiceFS文件系统,首先设置一个Redis数据库用于元数据存储。建议对于公共云的部署,你将Redis服务托管在与应用程序相同的云上。此外,为JuiceFS设置对象存储。在这个例子中,使用了Azure Blob Storage;但是,JuiceFS几乎支持所有的对象服务。选择最适合你场景需求的对象存储服务。

配置完Redis服务和对象存储后,格式化一个新的文件系统并将JuiceFS挂载到本地目录。

1 $  export AZURE_STORAGE_CONNECTION_STRING="DefaultEndpointsProtocol=https;AccountName=XXX;AccountKey=XXX;EndpointSuffix=core.windows.net"
2 $ ./juicefs format \
3     --storage wasb \
4     --bucket https://<container> \
5     ... \
6     localhost test #format
7 $ ./juicefs mount -d localhost ~/jfs  #mount
8

如果Redis服务器没有在本地运行,用以下地址替换localhost:redis://<user:password>@host:6379/1

当安装成功后,JuiceFS返回共享存储页面**/root/jfs**。

步骤3:启动Milvus

集群中的所有节点都应该安装Milvus,并且每个Milvus节点都应该被配置为有读或写权限。只有一个Milvus节点可以被配置为写节点,其余的必须是读节点。首先,在Milvus系统配置文件server_config.yaml中设置sectionclustergeneral 的参数。

章节 cluster

参数描述配置
enable是否启用集群模式true
roleMilvus部署角色rw/ro

general

参数参数描述配置
meta_uri用于元数据存储的URI,使用MySQL(用于Milvus Cluster)。格式:mysql://<username:password>@host:port/databasemysql://root:milvusroot@host:3306/milvus

在安装过程中,配置的JuiceFS共享存储路径被设置为**/root/jfs/milvus/db**。

1 sudo docker run -d --name milvus_gpu_1.0.0 --gpus all \ 
2 -p 19530:19530 \ 
3 -p 19121:19121 \ 
4 -v /root/jfs/milvus/db:/var/lib/milvus/db \  #/root/jfs/milvus/db is the shared storage path 
5 -v /home/$USER/milvus/conf:/var/lib/milvus/conf \ 
6 -v /home/$USER/milvus/logs:/var/lib/milvus/logs \ 
7 -v /home/$USER/milvus/wal:/var/lib/milvus/wal \ 
8 milvusdb/milvus:1.0.0-gpu-d030521-1ea92e 
9

安装完成后,启动Milvus并确认它被正确启动。最后,在集群中的任何一个节点上启动Mishards服务。下面的图片显示了Mishards的成功启动。欲了解更多信息,请参考GitHub教程。

性能基准

共享存储解决方案通常由网络附加存储(NAS)系统实现。常用的NAS系统类型包括网络文件系统(NFS)和服务器信息块(SMB)。公共云平台通常提供与这些协议兼容的管理存储服务,如亚马逊弹性文件系统(EFS)。

与传统的NAS系统不同,JuiceFS是基于用户空间的文件系统(FUSE)实现的,所有数据的读写都直接在应用端进行,进一步减少了访问延迟。JuiceFS还有一些其他NAS系统所没有的独特功能,如数据压缩和缓存。

基准测试显示,JuiceFS比EFS具有重大优势。在元数据基准测试中(图1),JuiceFS的每秒I/O操作数(IOPS)比EFS高10倍。此外,I/O吞吐量基准(图2)显示JuiceFS在单任务和多任务的情况下都优于EFS。

图1.元数据基准测试

图2.顺序读/写基准

此外,基准测试显示了首次查询检索时间,或将新插入的数据从磁盘加载到内存的时间。基于JuiceFS的Milvus集群平均只有0.032秒,表明数据从磁盘加载到内存几乎是瞬间完成的。在这项测试中,使用100万行128维矢量数据以1到8秒的间隔分批插入,测量首次查询检索时间。

JuiceFS是一个稳定可靠的共享文件存储系统,建立在JuiceFS上的Milvus集群同时提供高性能和灵活的存储容量。

了解更多关于Milvus的信息

Milvus是一个强大的工具,能够为大量的人工智能和矢量相似性搜索应用提供动力。要了解更多关于该项目,请查看以下资源。

  • 阅读我们的博客
  • Slack上与我们的开源社区进行互动。
  • GitHub上使用或贡献于世界上最流行的矢量数据库。
  • 用我们新的训练营快速测试和部署AI应用。

主题。

数据共享、 分片、 分布式、 协作、 大数据、 人工智能、 中间件、 EFS、 juicefs、 milvus

经贾晶晶许可,发表于DZone。点击这里查看原文。

DZone贡献者所表达的观点属于他们自己。

DZone上的热门文章


评论

大数据 合作伙伴资源