代理 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 地址写入配置文件即可。

 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 地址)
  • 开启节点发现:转发到所有发现的节点
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 还支持通过节点角色、节点标签筛选转发节点。

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

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

大数据

search for(search for是什么意思)

2025-3-1 23:12:31

大数据

kafka如何实现分布式消息(kafka如何实现分布式消息处理图)

2025-3-1 23:12:33

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧