代理 Elasticsearch 服务:INFINI Gateway VS Nginx

INFINI Gateway 简介

INFINI Gateway 是一款面向 Elasticsearch 的高性能应用网关,专为提升 Elasticsearch 集群的性能、安全性和可管理性而设计。它作为 Elasticsearch 的前置网关,能够处理所有客户端请求,并将其转发到后端的 Elasticsearch 集群,同时提供丰富的功能来优化请求处理和管理。此外还支持代理 Opensearch、Easysearch 服务。

Nginx 简介

Nginx 是一个高性能的 HTTP 和反向代理服务器,以其高并发处理能力、低内存消耗和稳定性著称,广泛应用于 Web 服务器、负载均衡和反向代理等场景。在 Elasticsearch 的使用场景里,也有小伙伴使用 Nginx 来代理 Elasticsearch 的服务,利用 Nginx 的负载均衡能力,将请求转发到多个 Elasticsearch 节点。

这两个软件都能代理 Elasticsearch 服务,但是他们有什么区别?我们来一起分析分析。

负载均衡

Elasticsearch 是分布式系统,提倡使用 round-robin 方式将请求发送到多个节点。不管是 Nginx 还是 INFINI Gateway 都默认使用 round-boin 方式转发请求,也都支持 weighted round-robin(加权轮询)方式进行请求转发,这点两者相当。

节点自动更新

Elasticsearch 集群可能会遇到添加、删除节点的情况,代理程序能否感知 Elasticsearch 节点的变化将变得非常关键。

在 Nginx 中,所有转发节点的 IP 地址都必须写入到配置文件中。如果 Elasticsearch 集群加入了新的节点进行请求处理,则需要 Nginx 编辑配置文件把新节点的 IP 地址加入其中,然后重启或重载 Nginx 服务,才能将请求分发到新的节点。反之如果有节点下线,也要编辑 Nginx 配置文件并重载服务。

INFINI Gateway 是面向 Elasticsearch 设计的应用网关,具有后端节点发现和更新的功能,能够感知 Elasticsearch 集群节点加入、离开的情况。开启节点发现和更新功能后,Gateway 会定期自动更新节点列表,将请求均匀转发到列表中的节点。可参考之前的博客开启节点自动更新。

⚠️ 注意:INFINI Gateway 默认后端节点发现和更新的功能为关闭状态。

定向转发请求

使用 Elasticsearch 集群的场景多种多样,如果想对转发的节点做进一步控制,可能需要根据不同条件进行节点筛选:

  • IP 地址
  • 节点角色
  • 节点标签

Nginx

Nginx 支持根据 IP 地址进行转发的,将需要转发的节点 IP 地址写入配置文件即可。

plain 复制代码
 upstream es-cluster {
   server 192.168.56.102:9200;
   server 192.168.56.102:9201;
   server 192.168.56.102:9202;
 }

但不支持按节点角色、节点标签进行筛选,因为 Nginx 中并没有这种概念。

INFINI Gateway

INFINI Gateway 支持按 IP 地址进行筛选:

  • 不开节点发现:只转发到配置文件指定的节点(IP 地址)
  • 开启节点发现:转发到所有发现的节点
plain 复制代码
flow:
  - name: cache_first
    filter:
      - elasticsearch:
          elasticsearch: prod
          refresh:
            enabled: true
            interval: 30s
          filter:
            hosts:
              exclude:
                - 192.168.3.201:9200
              include:
                - 192.168.3.202:9200
                - 192.168.3.203:9200

此外 Gateway 还支持通过节点角色、节点标签筛选转发节点。

plain 复制代码
flow:
  - name: cache_first
    filter:
      - elasticsearch:
          elasticsearch: prod
          refresh:
            enabled: true
            interval: 30s
          filter:
            tags:
              exclude:
                - temp: cold
              include:
                - disk: ssd
            roles:
              exclude:
                - master
              include:
                - data
                - ingest

多种筛选条件可以同时使用,详细信息请查看官方文档

作者:杨帆,极限科技(INFINI Labs)高级解决方案架构师、《老杨玩搜索》栏目 B 站 UP 主,拥有十余年金融行业服务工作经验,熟悉 Linux、数据库、网络等领域。目前主要从事 Easysearch、Elasticsearch 等搜索引擎的技术支持工作,服务国内私有化部署的客户。

相关推荐
数据库砖家11 分钟前
YashanDB 知识库|轻松打通多库数据,YashanDB DBLink 使用指南!
数据库
二进制_博客13 分钟前
高德MCP制作旅游攻略
数据库·旅游
数据库砖家13 分钟前
YashanDB 知识库|如何用闪回功能救回误删的数据?全流程实战演示
数据库
数据库砖家17 分钟前
YashanDB 知识库|手把手教你回收表空间,释放磁盘的正确姿势!
数据库
一只栖枝22 分钟前
关于OCP认证:有Oracle和MySQL两种
数据库·mysql·oracle·开闭原则·数据管理·ocp认证
小Tomkk35 分钟前
StarRocks SRCA 考试心得总结
数据库·数据库 starrocks·srca
千千寰宇44 分钟前
[数据库/SQL] 浅谈DDL、DSL、DCL、DML、DQL
数据库
爱编程的小新☆1 小时前
【MySQL】数据类型和表的操作
java·数据库·mysql
聪明的墨菲特i3 小时前
SQL进阶知识:七、数据库设计
数据库·sql·mysql·oracle·db2·数据库设计·范式
APItesterCris4 小时前
Flutter 移动端开发:集成淘宝 API 实现商品数据实时展示 APP
大数据·数据库·flutter