极限网关 INFINI Gateway 从 0 到 1:简单易懂的入门教程
前言
大家好,今天我们来聊聊「极限网关」(Gateway)。
它是一个轻量级、高性能、面向 Elasticsearch 代理的网关服务,既能代理请求,也能做一些高级功能(比如缓存、负载均衡、限流等)。
如果你是技术小白,看完这篇文章,能够快速学会如何安装、启动、配置以及验证极限网关,让它帮你把后端的 Elasticsearch 代理得又稳、又快、又灵活。
1. 什么是极限网关?
先用一句话解释一下:极限网关就是在你的 Elasticsearch 和客户端(浏览器、应用程序等)之间加了一个“中间人”,它会截获请求并进行各种处理,然后再把结果返回给客户端。
通过它,我们能做到以下好处:
请求转发:把所有对 Elasticsearch 的请求先经过网关,再发给后端的 Elasticsearch。
权限控制:可以很轻松地在网关层面做权限认证、白名单或其他安全策略。
数据缓存:常见的搜索请求,可以在网关侧做缓存,提高响应速度,减轻后端压力。
负载均衡:如果你有多台 Elasticsearch 节点,可以让网关帮忙做负载均衡,甚至可以自动发现新增或离线节点。
日志与监控:统一处理和采集日志,为后续分析提供数据。
如果你还不是很了解这其中的价值,你可以先记住:加了网关后,“强”就完事了。
当你需要做一些“全局控制”的功能时,再来翻翻本文,你就能更好地体会到网关的威力。
2. 安装网关
极限网关支持各种主流操作系统(Linux、Mac、Windows),安装包体积很小,没有额外依赖,安装起来非常简单。
2.1 自动安装
在 Linux 或 Mac 系统的命令行里,可以一键下载和安装:
curl -sSL http://get.infini.cloud | bash -s -- -p gateway
执行后,会自动下载最新版本并解压到 /opt/gateway
目录下。
如果你想指定版本号或自定义安装目录,可以用一下可选参数:
-v [版本号]
:指定安装的版本号,默认拉取最新版本-d [安装目录]
:指定安装目录,默认/opt/gateway
示例:
# 指定安装目录为 /usr/local/gateway
curl -sSL http://get.infini.cloud | bash -s -- -p gateway -d /usr/local/gateway
2.2 手动安装
我自己的实测安装方式是手动安装。
如果你不想使用脚本,可以直接去官方的发布页面下载对应操作系统平台的压缩包,然后解压到你喜欢的目录下。
解压后,你会看到一个 bin
文件夹,其中包含 gateway
可执行文件。
官方下载地址:https://release.infinilabs.com/gateway/stable/
2.3 Docker 容器部署
如果你的环境喜欢使用 Docker 来跑服务,极限网关也可以在容器中运行。只要写个简单的 Dockerfile 或者直接用已有的镜像,把配置映射进去就可以了。这里就不展开细说,有需要的可以查看官方文档。
本文没有涉及 Docker 部署。
3. 验证安装
安装完成后,我们可以执行以下命令来验证一下:
# 进入到解压目录
./gateway-linux-amd64 -v
如果能看到类似下面的输出,就说明安装成功,没毛病:
[GATEWAY] A light-weight, powerful and high-performance search gateway, open-sourced under the GNU AGPLv3.
[GATEWAY] 1.28.1#1978, 2025-01-24 18:12:34, 2025-12-31 10:10:10, 93fd9e32500a, 8ecefd18d9eb, c511f8f4cab9
4. 启动网关
在安装目录下,用管理员权限直接执行 gateway-linux-amd64 即可启动网关:
sudo ./gateway-linux-amd64
你会看到类似如下的启动日志:
___ _ _____ __ __ __ _
/ _ \ /_\ /__ \/__\/ / /\ \ \/_\ /\_/\
/ /_\///_\\ / /\/_\ \ \/ \/ //_\\\_ _/
...
[01-11 16:43:31] [INF] [api.go:255] api server listen at: http://0.0.0.0:2900
[01-11 16:43:31] [INF] [entry.go:262] entry [es_gateway] listen at: https://0.0.0.0:8000
[01-11 16:43:32] [INF] [app.go:254] gateway now started.
这些日志表示网关已经启动了,并在 0.0.0.0:8000
和 0.0.0.0:2900
上监听请求(一个是代理端口,一个是管理 API)。
配置非常重要,配置在第 8 部分详细解读。先配置好,才能启动!
5. 访问网关
如果你想确认能不能正常代理 Elasticsearch,可以用浏览器或其他 HTTP 工具(如 curl
)访问 http://<网关地址>:8000
。
如果后续配置了具体的后端 Elasticsearch 地址,那么通过这个端口访问,就相当于访问后端的 Elasticsearch。
6. 停止网关
想停止的话,直接按下 Ctrl+C
就能让网关退出:
^C
[GATEWAY] got signal: interrupt, start shutting down
[01-11 16:44:41] [INF] [app.go:303] gateway now terminated.
[GATEWAY] 1.0.0_SNAPSHOT, uptime: 1m10.550336s
Thanks for using GATEWAY, have a good day!
7. 以系统服务运行
自行参考如下步骤验证即可。
如果你想把网关跑在后台,当一个系统服务(非常适合生产环境),可以用如下命令:
# 安装为系统服务
./gateway -service install
# 启动服务
./gateway -service start
如果不想用了,可以用:
./gateway -service stop
./gateway -service uninstall
如果你需要在同一台机器上跑多个网关实例,可以自定义服务名:
sudo SERVICE_NAME=mygw ./gateway -service install
sudo SERVICE_NAME=mygw ./gateway -service start
...
8. 配置网关
如前所述,这是关键!没有配置的话,前面第4部分可能启动不起来。
极限网关的配置文件默认叫做 gateway.yml
,放在执行目录下。它能控制网关的大部分行为,包括监听地址、路由逻辑、后端 Elasticsearch 集群信息等。
8.1 命令行参数
执行 ./gateway --help
能看到常用的参数:
-config string
:指定配置文件位置(默认是当前目录下的gateway.yml
)-debug
:启用调试模式-log string
:指定日志级别(trace/debug/info/warn/error)
常见用法示例:
./gateway -config /etc/gw/gateway.yml -log debug
8.2 配置示例
在 gateway.yml
中,你最少需要配置以下几个核心部分:
entry(入口)、
router(路由)、
flow(流程)、
elasticsearch(后端资源)。
我们可以先看一段简单示例:
entry:
- name: es_gateway
enabled: true
router: default
network:
binding: 0.0.0.0:8000
router:
- name: default
default_flow: cache_first
flow:
- name: cache_first
filter:
- get_cache:
- elasticsearch:
elasticsearch: prod
- set_cache:
elasticsearch:
- name: prod
enabled: true
endpoint: http://192.168.3.201:9200
discovery:
enabled: true
refresh:
enabled: true
basic_auth:
username: elastic
password: pass
需要我们修改配置为:
entry:
- name: es_gateway
enabled: true
router: default
network:
binding: 0.0.0.0:8000
router:
- name: default
default_flow: cache_first
flow:
- name: cache_first
filter:
- get_cache:
- basic_auth:
valid_users:
elastic: changeme
- elasticsearch:
elasticsearch: prod
- set_cache:
elasticsearch:
- name: prod
enabled: true
endpoint: https://0.0.0.0:9200
discovery:
enabled: true
refresh:
enabled: true
basic_auth:
username: elastic
password: changeme
下面我们一条条说清楚:
8.2.1 Entry —— 对外暴露的“入口”
entry:
- name: es_gateway
enabled: true
router: default
network:
binding: 0.0.0.0:8000
name
:自定义名字,比如es_gateway
。enabled
:是否启用。router
:关联到我们后面定义的路由规则,这里指定为default
。network.binding
:本地监听的地址和端口。这里用0.0.0.0:8000
表示接受所有网卡 IP 的 8000 端口连接。(由于我是云服务器,所以配置 0.0.0.0,读者朋友根据自己网络状态可以配置内网 ip 地址)
8.2.2 Router —— 请求“转发”与“流量”走向
router:
- name: default
default_flow: cache_first
name
:路由名称,这里叫default
。default_flow
:表示默认走哪个流程,这里是cache_first
(后面会定义流程)。
当请求通过 Entry 进来后,会先看这是哪个 router,然后 router 会告诉它,走哪条 flow(流)来进行处理。
8.2.3 Flow —— 请求的处理“流水线”
flow:
- name: cache_first
filter:
- get_cache:
- elasticsearch:
elasticsearch: prod
- set_cache:
name
: 这里叫cache_first
,表示我们想先查缓存,再不行再去 Elasticsearch,然后再写回缓存。filter
:就是一个个处理单元,按顺序执行。
这里的三个过滤器:
get_cache:
:如果命中缓存,就直接返回,不往下执行了。elasticsearch:
:如果没有缓存,就把请求转发给后端 Elasticsearch,elasticsearch: prod
表示用下面定义的名字为prod
的 Elasticsearch 实例。set_cache:
:把结果保存到缓存里,方便下次使用。
8.2.4 Elasticsearch —— “后端资源”设置
elasticsearch:
- name: prod
enabled: true
endpoint: http://192.168.3.201:9200
discovery:
enabled: true
refresh:
enabled: true
basic_auth:
username: elastic
password: pass
name
: 后端集群名。你可以定义多个集群,比如prod
、staging
、test
等。endpoint
: Elasticsearch 的地址。basic_auth
: 如果 ES 需要用户名密码,这里可以配置。discovery.enabled: true
: 自动发现 ES 节点,更新健康状态。
9. 工作流程示意(Mermaid 图解)
为了让大家对整个流程有一个直观认识,我们用一张简化的图示意:
当客户端的请求来到网关(Entry),会先匹配对应的 Router;
Router 决定走哪条 Flow(这里就是
cache_first
);在 Flow 中,先尝试从缓存拿数据(
get_cache
);如果命中缓存,就直接返回给客户端;
如果没命中,就转发到后端的
elasticsearch(prod)
;拿到搜索结果后,还要执行
set_cache
,让下次查询可能走缓存;
最后把结果返回给客户端。
10. 小结
到这里,你已经基本了解了:
什么是极限网关:它就是个在 Elasticsearch 前加一层代理,能做各种功能(缓存、负载均衡、安全等)。
如何安装:自动脚本或手动下载,选择自己喜欢的方式即可。
如何启动和停止:直接
sudo ./gateway
或者使用-service
方式部署为系统服务。如何配置:编辑
gateway.yml
来设置入口、路由、流程以及后端资源,然后重启服务生效。
如果你想进一步“折腾”网关,比如给它加上多条路由、多种流量控制、日志收集、监控告警等高级功能,可以去翻阅更详细的官方文档或配置手册。
不过,就算是最简单的功能,你已经可以用极限网关轻松代理并缓存 Elasticsearch 的请求了。
扩展阅读
官方发布地址:https://release.infinilabs.com/
更多进阶配置,参考官方文档或功能手册
如果本文对你有所帮助,欢迎点赞收藏或分享给更多小伙伴。让我们一起用简单的方式,玩转搜索代理和网关技术!
极限网关——一个面向Elasticsearch的高性能应用网关
如何防止 Elasticsearch 服务 OOM ?极限网关来为你的 ES 服务保驾护航!
Elasticsearch 国产化替代方案之一 Easysearch 的介绍与部署指南
读者留言:有 Elasticsearch 国产化替代品吗?现在国产化不让用 ES 了......
Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解
Elasticsearch 性能测试工具 Loadgen 之 002——命令行及参数详解
Elasticsearch 性能测试工具 Loadgen 之 003——断言模式详解
Elasticsearch 性能测试工具 Loadgen 之 004——高级用法示例
更短时间更快习得更多干货!
和全球超2000+ Elastic 爱好者一起精进!
elastic6.cn——ElasticStack进阶助手
抢先一步学习进阶干货!