代理 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 等搜索引擎的技术支持工作,服务国内私有化部署的客户。

相关推荐
heart000_137 分钟前
MySQL事务与锁机制详解:确保数据一致性的关键【MySQL系列】
数据库·mysql
一眼青苔42 分钟前
MySQL 如何判断某个表中是否存在某个字段
数据库·mysql
西柚小萌新1 小时前
【大模型:知识图谱】--3.py2neo连接图数据库neo4j
数据库·知识图谱·neo4j
wangfenglei1234561 小时前
mybatis打印完整的SQL,p6spy
数据库·sql·mybatis
__风__1 小时前
PostgreSQL ERROR: out of shared memory处理
数据库·postgresql
占星安啦2 小时前
一个html实现数据库自定义查询
java·前端·javascript·数据库·动态查询
天空之城夢主2 小时前
MySQL 全量、增量备份与恢复
数据库·mysql·oracle
Elastic 中国社区官方博客2 小时前
连接关键点:使用 ES|QL 联接实现更丰富的可观测性洞察
大数据·数据库·sql·elasticsearch·搜索引擎·全文检索
元闰子2 小时前
AI Agent需要什么样的数据库?
数据库·人工智能·后端
什么都想学的阿超2 小时前
【PostgreSQL 02】PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来
数据库·postgresql·json