У нас есть сервер proftpd (1.3.3g), работающий на centos6, который, когда кажется, что он обрабатывает около 150 запущенных процессов, блокируется и предотвращает дальнейшие подключения.
Сервер proftpd подключается к MYSQL для обработки аутентификации пользователя.
Я запустил параноидальный журнал proftpd и не вижу в нем сбоев, а также проверяю безопасный журнал на наличие сбоев входа без каких-либо проблем.
Мониторинг не показывает скачков ЦП / памяти / диска / сети в то время, когда он падает, просто кажется, что он блокируется, пока соединения снова не упадут. Машина должна поддерживать более 150 одновременных пользователей (E3-1271v3 32 ГБ RAM).
# This is a basic ProFTPD configuration file (rename it to
# 'proftpd.conf' for actual use. It establishes a single server
# 'proftpd.conf' for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# "nobody" and "ftp" for normal operation and anon.
ServerName "PROHIBITED FTP ACCESS"
DeferWelcome off
#ServerType standalone
# Globbing
UseGlobbing off
TransferLog /var/log/ftpxferlog
UseReverseDNS off
IdentLookups off
UseFtpUsers off
WtmpLog off
UseIPv6 off
# Restrict the range of ports from which the server will select when sent the
# PASV command from a client. Use IANA-registered ephemeral port range of
# 49152-65534
PassivePorts 49152 65534
Port 21
Umask 022
TimeoutLogin 120
TimeoutIdle 300
TimeoutNoTransfer 300
TimeoutStalled 300
# Default to show dot files in directory listings
ListOptions "-a +R" strict
# ListOptions "" maxdepth 3
# ListOptions "" maxdirs 10
ListOptions "" maxfiles 2000
AllowOverride off
# Set the user and group that the server normally runs as.
User www
Group www
# Set path locations
ScoreboardFile /var/run/proftpd.score
#DefaultRoot /data/filesroot/ftproot/pub
DefaultRoot /data/filesroot/ftproot
# Log formats
LogFormat default "%h %l %u %t \"%r\" %s %b"
#LogFormat anonymous "%h %l %u %t \"%r\" %s %b"
#LogFormat auth "%v [%P] %h %t \"%r\" %s"
#LogFormat write "%h %l %u %t \"%r\" %s %b"
# SQL authentication Dynamic Shared Object (DSO) loading
# See README.DSO and howto/DSO.html for more details.
<IfModule mod_dso.c>
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
LoadModule mod_ifsession.c
</IfModule>
# Global settings
<Global>
AuthOrder mod_sql.c
SQLEngine on
SQLAuthenticate users groups
SQLConnectInfo xxx@xxx:3306 USERNAME PASSWORD
SQLAuthTypes Backend
SQLUserInfo ftpusers username passwd uid gid NULL NULL
SQLDefaultHomedir /data/filesroot/ftproot/
RequireValidShell off
SQLGroupInfo ftpgroups groupname gid members
SQLDefaultGID 65533
SQLDefaultUID 65533
SQLMinID 350
ServerIdent on "FTP Server ready."
AllowOverwrite yes
IdentLookups off
DelayEngine off
# Logging
# file/dir access
#ExtendedLog /var/log/proftpd/access.log WRITE,READ
# Record all logins
#ExtendedLog /var/log/proftpd/auth.log AUTH
# Paranoia logging level....
#ExtendedLog /var/log/proftpd/paranoid.log ALL
</Global>
<Limit LOGIN>
Order allow, deny
DenyAll
</Limit>
# Deny writing to the base server...
<Directory /data/filesroot/ftproot/pub/*>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
<Limit WRITE>
DenyAll
</Limit>
<Directory />
HideNoAccess on
<Limit WRITE>
DenyAll
</Limit>
</Directory>
<VirtualHost xxx.xxx.xxx.xxx>
ServerAdmin xxx@xxx.com
ServerName "FTP"
DefaultRoot /data/filesroot/ftproot
SQLDefaultHomedir /data/filesroot/ftproot/
TransferLog /data/logs/ftp/files/files.xferlog
RequireValidShell off
AllowOverwrite on
AllowRetrieveRestart on
AllowStoreRestart on
MaxLoginAttempts 2
MaxClients 2000 "Sorry, maximum users reached."
MaxClientsPerUser 5
MaxHostsPerUser 2
# How quickly do we kick someone out?
TimeoutLogin 45
TimeoutIdle 15
TimeoutNoTransfer 300
# Port 21 is the standard FTP port.
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# Set the user and group that the server normally runs at.
User www
Group www
# Set Anonymous access controls
<Anonymous /data/filesroot/ftproot/pub>
User www
Group www
UserAlias anonymous www
RequireValidShell off
MaxClients 1
<Limit WRITE>
DenyAll
</Limit>
# Don't write anonymous accesses to the system wtmp file (good idea!)
WtmpLog off
</Anonymous>
</VirtualHost>
150 одновременных подключений кажутся очень маленькими для FTP-сервера. Любые идеи будут оценены
Проблема оказалась в том, что таблицы базы данных были MyISAM, а не InnoDB, поэтому, когда он был занят, блокировка всей таблицы вызвала каскадный эффект. изменение этих таблиц на INNODB решило проблемы, поскольку теперь блокируются только строки.