--- title: "代理 Elasticsearch 服务:INFINI Gateway VS Nginx" date: 2025-03-22 lastmod: 2025-03-22 description: "文章对比了INFINI Gateway和Nginx作为Elasticsearch代理的性能和功能,指出两者都支持负载均衡,但INFINI Gateway能自动感知集群节点变化并支持按多种条件定向转发请求,而Nginx需手动更新配置且只能按IP地址转发。" tags: ["Easysearch", "Gateway", "Nginx"] summary: "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 简介 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 会定期自动更新节点列表,将请求均匀转发到列表中的节点。可参考之前的[博客](https://infinilabs.cn/blog/2025/restricting-requests-to-coordinating-nodes-in-es-with-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 ``` 多种筛选条件可以同时使用,详细信息请查看官方[文档](https://docs.infinilabs.com/gateway/v1.27.0/zh/docs/references/filters/elasticsearch/)。 有任何问题,欢迎加我微信沟通。 {{% load-img "/img/blog/banner/about_yangf.png" "" %}}