OpenResty Edge TCP 负载均衡:无需修改 Nginx 配置代理 TCP 服务
OpenResty Edge 完全在 Admin 控制台中对 stream 层的 TCP 服务进行负载均衡——无需编写 stream{} 块,无需 upstream 或 proxy_pass 指令,无需修改 nginx 配置或重载。你只需创建一个 TCP(stream)应用,将它指向后端服务器的上游,OpenResty Edge 就会在其网关网络中代理这些连接。在本教程中,我们代理一台运行在 3307 端口的 MySQL 服务器,并通过一个 Edge 节点进行连接,验证代理是否生效。如果想查看完整、详细的操作过程,可以观看本文顶部的视频教程(Bilibili)。
这与 SNI Proxy 应用类型使用的是同一套 stream 层代理机制。
在 OpenResty Edge 中创建 TCP(Stream)应用
让我们转到 OpenResty Edge 的 Admin Web 控制台。这是我们控制台的样本部署。每个用户都有自己的本地部署。
这次我们将创建一个 Stream 类型的应用。进入 Stream 应用列表页,创建一个新的应用。
可以看到有两种类型的 Stream 应用: SNI Proxy 应用和 TCP 应用。
今天的主题是 TCP 应用。
SNI Proxy 应用会在另一个教程中介绍。
选择 TCP 类型。
我们需要为这个应用指定一个端口。
首先,我们需要将这个端口添加到 default 分区。
点击编辑 default 分区,添加一个新端口,输入 3307 作为端口号。
将端口类型设置为 TCP。
保存后,新的端口已经被添加到 default 分区,改动也在整个网关网络上自动发布。
回到新建应用的对话框,输入我们刚刚添加的端口,然后创建这个应用。
为 TCP 负载均衡添加上游和页面规则
转到 Upstreams 页面。
为我们的后端服务器创建一个新的上游,并给它起个名字,比如 tcp_backend。
这里需要输入后端服务器的 IP 地址。
我们已经在这个 IP 地址上准备了一个 MySQL 服务器。直接连接它可以确认它是可以访问的。
现在可以填写后端服务器的主机字段了。
输入端口号 3307。
将来我们可能会为这个上游添加更多的服务器。
保存这个上游。可以看到这个 tcp_backend 上游已经出现在列表中。
现在创建一个新的页面规则来使用这个上游。
添加一个代理目标。
选择我们刚刚创建的上游。
有多个均衡策略可供选择。由于我们的上游只有一个服务器,所以均衡策略并不重要——保持默认的 round-robin 策略即可。
创建这个页面规则。
可以在页面规则列表中看到新创建的代理页面规则。
最后一步是做新配置的发布,把我们刚才的改动推送到所有的网关服务器上。
发布!
改动现在已经同步到所有的网关服务器上了。可以看到,这个样本部署在网关网络中有 14 台服务器。
我们在整个网络中进行增量的配置同步,在请求粒度上实时更新配置。应用级别的配置更改都不需要服务器重载、重启或二进制升级,所以即使有很多不同的用户进行频繁的发布,它的可扩展性也很强。
测试 TCP 代理:通过 Edge 节点连接 MySQL
来看一下按集群分组的所有网关服务器,我们有一个位于美国的节点,其 IP 地址以 226 结尾。使用这个节点测试刚刚添加的代理。
现在我们把 MySQL 客户端连接到那个 Edge 节点的 3307 端口——用该节点的 IP 作为主机——并执行一条 select 查询。
不出所料,代理生效了!select 查询通过 Edge 节点返回了结果,就像直接访问后端服务器一样,MySQL 后端是可以访问的。
常见问题
如何在不修改 nginx 配置的情况下对 TCP 进行负载均衡?
在 OpenResty Edge 中,你在 Admin 控制台里创建一个 TCP(stream)应用,添加一个由后端服务器组成的上游,再关联一条代理到该上游的页面规则——无需手写 stream{} 块、upstream 定义或 proxy_pass 指令。发布这次改动后,它会被推送到每一台网关服务器,无需重载、重启或二进制升级。
可以通过 OpenResty Edge 代理 MySQL 数据库吗?
可以。在本教程中,后端是一台监听 3307 端口的 MySQL 服务器,OpenResty Edge 会将 TCP 连接代理到它。发布之后,把 MySQL 客户端连接到 Edge 节点的 3307 端口,就能像直接连接后端一样访问数据库。
TCP 应用和 SNI Proxy 应用有什么区别?
两者都是 OpenResty Edge 中的 stream 应用。TCP 应用在指定端口上代理原始 TCP 连接,如本文所示。SNI Proxy 应用则根据握手中的 SNI 主机名路由 TLS 流量;它在 SNI Proxy 应用教程中介绍。
一个 TCP 上游可以有多个后端服务器吗?
可以。本教程中的上游只有一个服务器,因此均衡策略无关紧要,但你可以添加更多服务器,并选择诸如 round-robin 的均衡策略。
关于 OpenResty Edge
OpenResty Edge 是一款专为微服务和分布式流量架构设计的全能型网关软件,由我们自主研发。它集流量管理、私有 CDN 构建、API 网关、安全防护等功能于一体,帮助您轻松构建、管理和保护现代应用程序。OpenResty Edge 拥有业界领先的性能和可扩展性,能够满足高并发、高负载场景下的苛刻需求。它支持调度 K8s 等容器应用流量,并可管理海量域名,轻松满足大型网站和复杂应用的需求。
如果你喜欢这个教程,请订阅这个博客网站和我们的 YouTube 频道 或 B 站频道。谢谢!
关于作者
章亦春是开源 OpenResty® 项目创始人兼 OpenResty Inc. 公司 CEO 和创始人。
章亦春(Github ID: agentzh),生于中国江苏,现定居美国湾区。他是中国早期开源技术和文化的倡导者和领军人物,曾供职于多家国际知名的高科技企业,如 Cloudflare、雅虎、阿里巴巴, 是 “边缘计算“、”动态追踪 “和 “机器编程 “的先驱,拥有超过 22 年的编程及 16 年的开源经验。作为拥有超过 4000 万全球域名用户的开源项目的领导者。他基于其 OpenResty® 开源项目打造的高科技企业 OpenResty Inc. 位于美国硅谷中心。其主打的两个产品 OpenResty XRay(利用动态追踪技术的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最适合微服务和分布式流量的全能型网关软件),广受全球众多上市及大型企业青睐。在 OpenResty 以外,章亦春为多个开源项目贡献了累计超过百万行代码,其中包括,Linux 内核、Nginx、LuaJIT、GDB、SystemTap、LLVM、Perl 等,并编写过 60 多个开源软件库。
关注我们
如果您喜欢本文,欢迎关注我们 OpenResty Inc. 公司的博客网站 。也欢迎扫码关注我们的微信公众号:
翻译
我们提供了英文版原文和中译版(本文)。我们也欢迎读者提供其他语言的翻译版本,只要是全文翻译不带省略,我们都将会考虑采用,非常感谢!






















































