Я успешно настроил среду балансировки нагрузки, используя HAProxy и 2 запущенных FTP-сервера. vsftpd
. Вот как выглядит установка на данный момент:
Прокси: ftp00 | 192.168.2.135 (общедоступный, eth0) | 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 config:
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 отключен на всех машинах. Я следил за несколькими руководствами (например, этот, и этот), но я все равно не могу passive mode
работать. Я могу войти на FTP-серверы через балансировщик нагрузки HAproxy (для которого установлено значение 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
, что совершенно нормально.
На основании прочитанных мной документов RH, касающихся пассивного FTP LB, вам может потребоваться включить модуль ядра.
# modprobe ip_vs_ftp
Red_Hat_Enterprise_Linux-6-Load_Balancer_Administration-en-US
Чтобы включить пассивные FTP-соединения, убедитесь, что у вас загружен модуль ядра ip_vs_ftp, что можно сделать, выполнив команду modprobe ip_vs_ftp от имени администратора в приглашении оболочки.
Я не подтверждал это, но очень скоро буду погружаться в этот тип ftp-сервиса высокой доступности, так что надеюсь, что ваша запись плюс этот загруженный модуль верны!
Это должно быть довольно просто:
a) Вы должны настроить ip пассивного режима как x.135 (что вы и сделали)
б) Вы должны ограничить диапазон портов на ftp-сервере (что вы и сделали)
c) Вы должны привязать haproxy ко ВСЕМ соответствующим портам (ваша конфигурация этого не показывает). Будьте осторожны, чтобы удалить порт с каждого реального сервера, когда вы это делаете, т.е.
10.11.130.140:21
становится
10.11.130.140
Вам почти наверняка нужно включить сохранение / закрепление в конфигурации haproxy ... и более длительные таймауты - 15 минут?
Но что более важно при тестировании - выключите брандмауэр, полностью проверьте, работает ли ваша конфигурация haproxy из локальной сети - как только вы будете довольны, все работает. Затем приступайте к настройке брандмауэра. Вам действительно нужна локальная проверка состояния на каждом FTP-сервере? Просто правильно настройте внешний брандмауэр.
Надеюсь, у вас это сработает.