Milvus 实战 | 使用 Nginx 实现对 Milvus 的负载均衡

2021-04-26 15:01:01 浏览数 (1)

如今,互联网信息不断增加。为减小对服务器的压力,越来越多用户开始采用负载均衡机制以减小对服务器的压力。这种做法不但能够保证服务的可用性,还可以提升用户体验。本文将介绍如何通过使用 Nginx 实现对 Milvus 的负载均衡,从而提高服务器资源的使用效率和 Milvus 的可用性。

简介

1.1 Nginx

Nginx 是一款免费的开源、高性能 HTTP 服务器和反向代理服务器。Nginx 可以通过反向代理实现负载均衡的功能。该功能具备以下几个优点:

  • 转发功能:Nginx 会根据用户配置的策略将客户端请求转发到不同的服务器上, 减轻单台服务器压力,提高系统并发能力。
  • 故障转移:若配置的集群中有一台服务器出现了故障或者请求超时, Nginx 会将已经发送至该服务器的请求转发至另一台服务器。
  • 恢复添加:如检测到发生故障的服务器恢复工作,Nginx 自动将其添加到请求处 理队伍中。

1.2 Milvus

Milvus 是一款开源的分布式向量相似度搜索引擎。通过集成业界成熟的向量相似度搜索技术和大幅度优化高性能计算框架,Milvus 支持针对 TB 级向量的增删改操作和近实时查询,具有高度灵活、稳定可靠以及高速查询等特点。Milvus 集成了 Faiss、NMSLIB、Annoy 等广泛应用的向量索引库,提供了一整套简单直观的 API,用户可以针对不同场景选择不同的索引类型。

Milvus 适用于多种场景,与深度学习相融合的架构如下图所示:

采用 Milvus 的数据处理流程包括以下几个步骤:

  1. 与深度学习模型相结合,将非结构化数据转化为特征向量。
  2. 将特征向量存储到 Milvus 并建立索引。  
  3. 返回向量相似性搜索结果。  

实现方案

如下图所示,客户端将多个读请求发送给 Nginx。Nginx 根据在配置文件中设置的负载均衡策略,将请求按时间顺序逐一分配到不同的 Milvus 服务器中。Nginx 负载均衡策略还包含轮询方式、依据 ip 分配方式、权重方式等。用户可以根据实际场景选择相应的负载均衡策略。本教程采用轮询的策略。

2.1 安装 Nginx

1. Nginx 的安装包分为开发版、稳定版和过期版。本教程使用稳定版 Nginx 安装包。从 Nginx 官网(http://nginx.org/)下载安装包并解压。

2. 安装 C 依赖库、openssl 依赖库、pcre 依赖库和 zlib 依赖库。

3. 先配置 Nginx 的安装地址,将 Nginx 安装到指定路径下。

代码语言:javascript复制
代码语言:javascript复制
4. 编译 Nginx。
5. 安装 Nginx。			⚠️  如果没有权限,需要切换到 Root 权限6. 启动 Nginx。
代码语言:javascript复制



7. 检查 Nginx 是否启动成功:如果 Nginx 进程启动则说明 Nginx 启动成功了。

2.2 配置 Milvus 本教程中使用 Milvus 的版本为 1.0,安装方式参考 Milvus 官网。安装时,将所有设备中数据存储的位置都设置为共享存储的路径,如下图所示。 Milvus 官网:https://milvus.io/cn/docs/milvus_docker-gpu.md

Milvus 默认使用 SQLite 作为元数据后台管理服务,但是在生产环境中,需要使用 MySQL 管理元数据。MySQL 安装完成后,在 Milvus 的配置文件 server_config.yaml 中修改参数 meta_uri。 MySQL 管理元数据:https://milvus.io/cn/docs/v1.0.0/data_manage.md 服务器 1 的 IP 地址为 192.168.1.85 ,服务器 2 的 IP 地址为 172.16.10.1。在服务器 1 上安装 Milvus1 和 Milvus3。Milvus1 设置为只读 IP 地址 192.168.1.85:19537,Milvus3 设置为只写 IP 地址 192.168.1.85:19539。服务器 2 安装 Milvus2,将其设置为只读 IP 地址 172.16.10.1:19538 。server_config.yaml 配置文件中修改参数 enable 和 role,如下图所示。

其中参数 enable 表示是否设置为分布式模式。参数 role 表示 Milvus 是只读还是只写。参数 meta_uri 应修改为安装 MySQL 的设备地址,其余配置参照 Milvus 单机版的配置。 2.3 配置 Nginx 完成 Milvus 配置后,根据 Nginx 的配置文件路径,修改配置文件 Nginx.conf。 在配置文件的末尾添加如下代码:对 Milvus1 和 Milvus2 两个读节点进行轮询。 stream { log_format proxy '$remote_addr [$time_local] ' '$protocol $status $bytes_sent $bytes_received ' '$session_time "$upstream_addr" ' '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; # 日志格式配置 access_log /var/log/Nginx/access.log proxy ; open_log_file_cache off; #日志缓存设置,此处设置为禁用 server { listen 19585; #为监听的端口号不能和Milvus的端口号冲突 proxy_pass Milvus; } upstream Milvus { server 192.168.1.85:19537;#为Milvus1的Ip地址 server 172.16.70.1:19538;#为Milvus2的Ip地址 } } 注:如果是 gRPC client 调用 Nginx 的接口需要在 Nginx.conf 配置文件的server 部分进行修改,详见 GitHub 项目修改 Nginx 配置文件后,测试是否配置正确。停止 Nginx 服务并重新启动。多次运行 GitHub 项目(https://github.com/milvus-io/bootcamp/blob/1.0/solutions/nginx/Readme.md)中提供的脚本进行测试,并查看 Nginx 的日志文件。 Ngnix 日志查询结果如下图所示。Nginx 将请求分别分发给 Milvus1 和 Milvus2 这两个读节点。 总结 本文主要介绍了如何通过使用 Nginx 实现对 Milvus 的负载均衡。负载均衡机制能够有效应对单台服务器出现故障的情况。而且负载均衡机制根据用户配置的策略将请求转发到不同的服务器上,减轻单台服务器的压力,提升用户的体验。希望本文对大家有所帮助,如果想要了解更多 Milvus 的教程和应用场景,可以关注我们的微信公众号或者加入微信群中,期待与你的进一步交流! About Zilliz Zilliz 以重新定义数据科学为愿景,致力于打造一家全球领先的开源技术创新公司,并通过开源和云原生解决方案为企业解锁非结构化数据的隐藏价值。 Zilliz 构建了 Milvus 向量相似度搜索引擎,以加快下一代数据平台的发展。Milvus 目前是 LF AI & Data 基金会的孵化阶段项目,能够管理大量非结构化数据集。我们的技术在新药发现、计算机视觉、推荐引擎、聊天机器人等方面具有广泛的应用。 欢迎加入 Milvus 社区 github.com/milvus-io/milvus | 源码milvus.io | 官网zhihu.com/org/zilliz-11| 知乎zilliz.blog.csdn.net | CSDN 博客 space.bilibili.com/478166626 | Bilibili

0 人点赞