流量控制秘籍:网络优化的终极指南-四层负载均衡器,支持动态配置
前言
在数字时代,网络流量管理是每个系统管理员和网络工程师的必备技能。流量控制不仅关系到数据传输的效率,更直接影响到用户体验和服务质量。
传输 (Convey)
四层负载均衡器,支持动态配置加载,具有代理、直通和直接服务器返回模式
特性
统计页面(位于 /stats),提供基本的连接/字节计数器和后端服务器池状态 动态重新加载后端服务器及其相关权重的配置。配置通过 .toml 文件加载(参见 sample.toml 获取完整示例)。 根据配置的间隔对后端服务器进行基于 TCP 的健康检查。如果服务器健康检查失败,它将自动从选择中移除,并在健康检查成功时重新添加。
代理特性
基于 [tokio] 的事件驱动 TCP 负载均衡器。 加权轮询负载均衡。如果要实现均匀轮询,只需省略权重或将其设置为相等。 TCP 连接终止
直通和直接服务器返回(DSR)特性
数据包转发(不终止 TCP) 最小内部连接跟踪 NAT
使用方法
Convey 0.3.5
使用方法:
convey
convey --config=<配置文件>
convey (-p | --passthrough) --config=<配置文件>
convey (-d | --dsr) --config=<配置文件>
convey (-p | --passthrough)
convey (-d | --dsr)
convey (-h | --help)
convey (-v | --version)
选项:
-h, --help 显示此屏幕。
-p, --passthrough 以直通模式运行负载均衡器(而不是默认的代理模式)
-d, --dsr 以直接服务器模式运行负载均衡器(而不是默认的代理模式)
--config=<配置文件> 配置文件位置 [默认 config.toml]。
-v, --version 显示版本。
直通模式
在直通模式下,我们需要在传达负载均衡器上设置一些 iptables 规则来处理来自客户端的入站数据包和来自后端负载均衡服务器的响应。由于 TCP 不会终止,我们需要确保操作系统不会对任何发往没有进程绑定的端口的数据包发送 RST。我们需要对从后端服务器返回的任何数据包做同样的处理。传达内部分配临时端口 32768-61000 来映射连接到客户端。
对于传达负载均衡器的直通模式
sudo iptables -t raw -A PREROUTING -p tcp --dport <负载均衡器端口> -j DROP
sudo iptables -t raw -A PREROUTING -p tcp --sport <后端服务器端口> --dport 33768:61000 -j DROP
运行命令:
sudo ./target/release/convey --passthrough --config=sample-passthrough.toml
DSR 模式
对于 dsr 模式,我们需要相同的 iptables 规则来处理入站数据包。来自后端负载均衡服务器的响应将直接发送到客户端。在这种模式下,传达负载均衡器上的“监听”端口必须与后端负载均衡服务器的监听端口匹配。
对于传达负载均衡器的 dsr 模式
sudo iptables -t raw -A PREROUTING -p tcp --dport <负载均衡器端口> -j DROP
在 dsr 模式下,后端服务器“参与”其中,它们必须直接将响应数据包发送给客户端。传达不执行任何封装,因此,例如 gre 隧道不是选项。相反,可以使用 [流量控制] 作为出口 NAT。
对于后端服务器的 dsr 模式
sudo tc qdisc add dev <本地接口> root handle 10: htb
sudo tc filter add dev <本地接口> parent 10: protocol ip prio 1 u32 match ip src <本地服务器 IP> match ip sport <监听端口> 0xffff match ip dst <负载均衡器 IP> action ok
sudo tc filter add dev <本地接口> parent 10: protocol ip prio 10 u32 match ip src <本地服务器 IP> match ip sport <监听端口> 0xffff action nat egress <负载均衡器 IP>
运行命令:
sudo ./target/release/convey --dsr --config=sample-passthrough.toml
代理
无需特殊设置
运行命令:
sudo ./target/release/convey --config=sample-proxy.toml
测试
运行测试的最简单方式是作为超级用户运行。这是因为一些测试会启动测试服务器以及一个传达负载均衡器实例。
sudo ~/.cargo/bin/cargo test
AF_XDP
feature/xdp
分支是一个使用 AF_XDP 在直通和 DSR 模式下进行负载均衡的工作进行中项目。目前它将被维护在一个单独的分支中,因为它需要内核版本 5.4 或更高。
构建
cargo build --release
附录
https://github.com/bparli/convey