UDP 负载均衡
本文档将介绍如何配置 FGW 代理和负载均衡 TCP 流量。
介绍
FGW 的 UDP 负载均衡功能针对基于 UDP 协议的网络流量提供了负载均衡解决方案。UDP 作为一个轻量级的、无连接的协议,通常用于视频流、在线游戏、VoIP 等应用,其中快速传输比完整性或顺序更重要。FGW 通过其 UDP 负载均衡功能,能够确保这些应用的流量在多个服务器之间得到有效分配,从而提高性能和可靠性。
UDP 负载均衡的配置与 TCP 的类似。
FGW 的 UDP 负载均衡配置涉及指定要分配流量的 UDP 服务端口,以及确定如何将流量分配到后端服务器。
通过精确配置这些参数,可以确保 UDP 负载均衡既高效又可靠,满足高性能应用的需求。
前置条件
- Pipy(版本 >= 0.90.3-2)
- FGW Repo(版本 >= v1.0.0)
- 两个后端服务
在这篇文档里我们将使用 Pipy 来运行简单的 UDP 应用。
pipy -e "pipy().listen(8078, {protocol: 'udp'}).replaceData(data => (console.log(data.toString()), new Data('You are requesting port ' + __inbound.localPort + ' \n')))" &
pipy -e "pipy().listen(8079, {protocol: 'udp'}).replaceData(data => (console.log(data.toString()), new Data('You are requesting port ' + __inbound.localPort + ' \n')))" &
配置
- 要负载均衡 UDP 的请求,需要配置一个处理 UDP 协议的监听器,参考文档监听端口配置。
{
"Listeners": [
{
"Protocol": "UDP",
"Port": 8000
}
]
}
- 接下来要设置端口
8000
的路由规则,参考文档 UDP 协议端口号路由规则配置。
{
"RouteRules": {
"8000": {"backendService1":100}
}
}
- 配置后端服务,参考文档服务配置。后端服务的端点,配置为上面启动的两个 UDP 服务。
{
"Services": {
"backendService1": {
"Endpoints": {
"127.0.0.1:8078": {
"Weight": 100
},
"127.0.0.1:8079": {
"Weight": 100
}
}
}
}
}
- 针对 UDP 请求的负载均衡,使用的插件同样简单。仅需引入
UDPRoute
插件链和udp/forward.js
插件。完整的插件配置可以参考文档完整的插件配置。
{
"Chains": {
"UDPRoute": [
"udp/forward.js"
]
}
}
- 最后,可以得到完整的配置,替换 FGW 工程中的
pjs/config.json
。
{
"Listeners": [
{
"Protocol": "UDP",
"Port": 8000
}
],
"RouteRules": {
"8000": {
"backendService1": 100
}
},
"Services": {
"backendService1": {
"Endpoints": {
"127.0.0.1:8078": {
"Weight": 100
},
"127.0.0.1:8079": {
"Weight": 100
}
}
}
},
"Chains": {
"UDPRoute": [
"udp/forward.js"
]
}
}
- 测试
echo '' | nc -4u -w1 localhost 8000
You are requesting port 8079
echo '' | nc -4u -w1 localhost 8000
You are requesting port 8078
echo '' | nc -4u -w1 localhost 8000
You are requesting port 8079
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 November 29, 2023: add docs for fault injection and request mirror, fix typo (b53e400)