HAproxy 用于负载平衡 vsFTPd 服务器

HAproxy 用于负载平衡 vsFTPd 服务器

我已经成功使用 HAProxy 和 2 个正在运行的 FTP 服务器设置了负载平衡环境vsftpd。到目前为止,设置如下:

代理人:ftp00 | 192.168.2.135 (公共,et​​h0) | 10.11.130.1 (私有,eth1)
节点01:ftp01 | 10.11.130.140
节点02:ftp02 | 10.11.130.141


操作系统:CentOS 6.6
HA代理:版本 1.5.2 2014/07/12
vsftpd:版本 2.2.2


ftp00:/etc/haproxy/haproxy.conf

#---------------------------------------------------------------------
# GLOBAL CONFIG
#---------------------------------------------------------------------
global
    daemon
    log         127.0.0.1 local0 info
    log         127.0.0.1 local1 notice
    log         127.0.0.1 local5 debug
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

#---------------------------------------------------------------------
# DEFAULTS CONFIG
#---------------------------------------------------------------------
defaults
        log             global
        mode            tcp
        option          tcplog
        option          dontlognull
        retries         3
        option          redispatch
        option          tcpka
        maxconn         2000
        contimeout      5000

#---------------------------------------------------------------------
# POOL CONFIG
#---------------------------------------------------------------------
listen ftp-lb
        bind 192.168.2.135:21
        mode tcp
        option tcplog
        balance roundrobin
        server ftp01 10.11.130.140:21 weight 10 minconn 30 maxconn 1000 check
        server ftp02 10.11.130.141:21 weight 10 minconn 30 maxconn 1000 check

#---------------------------------------------------------------------
# HAPROXY DASHBOARD CONFIG
#---------------------------------------------------------------------
listen stats
    bind 192.168.2.135:81
    mode http
    stats enable
    stats refresh 30s
    stats show-node
    stats uri  /stats
    stats auth admin:password



ftp00:/etc/sysconfig/iptables找到[这里]

*nat
:PREROUTING ACCEPT [7:724]
:POSTROUTING ACCEPT [5:300]
:OUTPUT ACCEPT [5:300]
-A PREROUTING -d 192.168.2.135/32 -i eth1 -p tcp -m tcp --dport 12001:14000 -j DNAT --to-destination 10.11.130.140
-A PREROUTING -d 192.168.2.135/32 -i eth1 -p tcp -m tcp --dport 16001:18000 -j DNAT --to-destination 10.11.130.141
-A POSTROUTING -s 10.11.130.140/32 -o eth1 -j SNAT --to-source 192.168.2.135
-A POSTROUTING -s 10.11.130.141/32 -o eth1 -j SNAT --to-source 192.168.2.135
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [732:64731]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 81 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



ftp01:/etc/vsftpd/vsftpd.conf

#------------------------------------------
# GENERAL CONFIG
#------------------------------------------
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
pam_service_name=vsftpd

#------------------------------------------
# LOG CONFIG
#------------------------------------------
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES

#------------------------------------------
# USER WHITELIST
#------------------------------------------
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

#------------------------------------------
# PASSIVE MODE CONFIG
#------------------------------------------
#tcp_wrappers=YES
pasv_enable=YES
port_enable=YES
pasv_min_port=12001
pasv_max_port=14000
pasv_address=192.168.2.135
pasv_addr_resolve=NO
connect_from_port_20=YES

#------------------------------------------
# Added listen address for internal only
#------------------------------------------
listen=YES
listen_address=10.11.130.140

#-----------------------------------------
# BANNER CONFIG
#-----------------------------------------
banner_file=/etc/vsftpd/issue



ftp01:/etc/sysconfig/iptables

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 12001:14000 -j ACCEPT
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT



ftp02:/etc/vsftpd/vsftpd.conf

差额ftp01配置:

pasv_min_port=16001
pasv_max_port=18000

listen_address=10.11.130.141



ftp02:/etc/sysconfig/iptables

Same as **ftp01** with respective port ranges



所有节点:/etc/sysconfig/iptables-config

IPTABLES_MODULES="nf_conntrack_ftp"



SELinux在所有机器上都已停用。我已按照多个教程操作(例如, 和),但我仍然无法工作。我可以通过 HAproxy 负载平衡器 (设置为,并且也可以正常工作)passive mode登录 FTP 服务器,但它一直给我这个:roundrobin

220-***FTP SERVER CLUSTER NODE 02***
220
Name (192.168.2.135:root): root
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,2,135,67,94).
ftp: connect: Connection timed out
ftp>


由于我已经尝试了所有我能想到的方法以及几乎所有可以解决这个问题的方法,我有点沮丧。我的配置与教程中的配置完全相同,但就是不起作用。也许我错过了一些我还没有注意到的东西,所以任何帮助我都会非常感激!

至少端口号似乎是正确的。ftp02设置为使用16001 - 18000,并进入被动模式使用67*256 + 94 = 17246,这完全没问题。

答案1

根据我读过的有关被动 FTP LB 的 RH 文档,您可能需要启用内核模块

# modprobe ip_vs_ftp 

Red_Hat_Enterprise_Linux-6-Load_Balancer_Administration-en-US

为了启用被动 FTP 连接,请确保您已加载 ip_vs_ftp 内核模块,您可以通过在 shell 提示符下以管理用户身份运行 modprobe ip_vs_ftp 命令来执行此操作。

我还没有确认这一点,但很快就会深入研究这种类型的 HA ftp 服务,所以希望你的写作加上这个加载的模块是正确的!

答案2

这应该相当简单:

a) 您必须将被动模式 ip 配置为 x.135(您已完成)

b) 您必须限制 FTP 服务器上的端口范围(您已完成)

c) 您必须将 haproxy 绑定到所有相关端口(您的配置未显示这一点)执行此操作时,请小心从每个真实服务器中删除端口。

10.11.130.140:21

变成

10.11.130.140

您几乎肯定需要在 haproxy 配置中启用持久性/粘性...以及更长的超时时间 - 15 分钟?

但更重要的是,在测试时 - 完全关闭防火墙,测试您的 haproxy 配置是否从本地网络工作 - 一旦您满意,一切正常。然后开始配置防火墙。您真的需要在每个 FTP 服务器上进行本地状态检查吗?只需正确配置您的外部防火墙即可。

希望你能让它发挥作用。

相关内容