![2 个 FTP 服务器之间的负载平衡](https://linux22.com/image/800062/2%20%E4%B8%AA%20FTP%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1.png)
我正在尝试在 2 台服务器之间平衡 ftp 负载。目前有 2 台服务器指向 ftp.domain.com,第二台服务器在技术上用于容错,但我想平衡 2 台服务器之间的流量。我该如何实现?我想制作一个简单的脚本,将用户从 ftp.domain 重定向到 01.ftp.domain 和 02.ftp.domain 等,但问题是 FTP 应用程序不读取页面,因此如果用户尝试登录 ftp.domain,它不会将他们重定向到任何地方。
答案1
要平衡服务器负载,您应该同时考虑命令和数据通道。要平衡命令通道负载,我建议您使用 HAProxy。如果您使用它,您应该在/etc/haproxy/haproxy.cfg
以下内容中指定:
listen ftp-lb00
bind IP:21
mode tcp
option tcplog
balance leastconn
server ftp-serv00 192.168.1.1:21 check
server ftp-serv01 192.168.1.2:21 check
此处的 IP 是公共 IP,而连接随后会重定向到 192.168.1.0/24 网络。您还应该在 中定义 NAT 转发iptables
。有关执行此操作的说明,您可以在此处查看已接受的答案 (如何使用 iptables 进行端口转发?)。
要执行数据通道的负载平衡,您应该以 root 身份在终端中运行以下命令
iptables -A POSTROUTING -s 192.168.1.1/32 -o eth1 -j SNAT --to-source IP
iptables -A POSTROUTING -s 192.168.1.2/32 -o eth1 -j SNAT --to-source IP
这些设置适用于所谓的主动数据通道。有关被动数据通道情况下的设置和更详细的说明,请参阅本文 (https://gist.github.com/erkie/922996a2ec4125d79c7f8772cda328ce)。