pure-authd и большая нагрузка

pure-authd очень удобный механизм для внешней аутентификации. Но при большой нагрузке это может стать реальной проблемой: он однопоточный. Да, он все запросы складывает в свой backlog, но легче от этого не становится. И вы можете ждать своей очереди на аутентификацию и минуту и две и больше. Но у большинства ftp-клиентов таймаут на аутентификацию стоит в 20 секунд, поэтому это не вариант на высоких нагрузках.

Но что же делать? Выход простой — паралелить pure-authd внешними средствами такими как haproxy/nginx. Ниже приведу настройки для обоих из них, но удобнее и быстрее всё-таки haproxy.

nginx

stream {
        upstream backend {
                server unix:/tmp/ftpd1.sock;
                server unix:/tmp/ftpd2.sock;
        }

        server {
                listen unix:/var/run/ftpd-nginx.sock;
                proxy_pass backend;
        }
}

haproxy

chroot /var/lib/haproxy
...
listen pure-auth
        bind /var/run/ftpd-haproxy.sock mode 666
        balance roundrobin
        mode tcp
        server ftp1 "unix@ftpd1.sock" check
        server ftp2 "unix@ftpd2.sock" check

При этом, сами советы ftpd1, ftpd2 должны быть в папке /var/lib/haproxy, иначе будете получать ошибку:


Socket error, info: "General socket error (No such file or directory)",

Либо, можете убрать опцию chroot и тогда пусть к сокетам можно давать полностью:

listen pure-auth
        bind /var/run/ftpd-haproxy.sock mode 666
        balance roundrobin
        mode tcp
        server ftp1 "/var/run/ftpd1.sock" check
        server ftp2 "/var/run/ftpd2.sock" check

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *