· stunnel ulimit systemd

stunnel with ulimit

배경

그림과 같이 L4 에 2대의 Swift proxy server 를 바인딩 한 환경에서 https 서비스를 제공하기 위해 L4 에서 SSL Offloading 설정을 했다.

swift cluster architecture

이슈

속도 문제를 해결하기 위해서 swift proxy server 에서 SSL 처리를 시도해 보았다. SSL termination 을 위해서 nginx 와 stunnel 을 시험해 보았다.

시험방법

시스템 리소스를 적게 사용하는 stunnel 로 채택!!

stunnel

설치 # ./configure –prefix=/usr/local/stunnel –disable-libwrap –with-threads=pthread # make # make install

stunnel.conf

setuid = www-data
setgid = www-data
pid = /var/run/stunnel/stunnel.pid
;chroot = /var/run/stunnel

; error
debug = 3
output = /var/log/stunnel/stunnel.log

; Protocol version (all, SSLv2, SSLv3, TLSv1)
sslVersion = all

fips = no

[swiftproxy]
accept = 0.0.0.0:443
connect = 127.0.0.1:80
TIMEOUTidle = 600
cert = swift-proxy.crt
key = swift-proxy.nopass.key

process limits

swift 사용량이 늘다보니 아래와 같은 log 가 확인되었다.

2016.04.05 12:33:34 LOG3[13353638]: remote socket: Too many open files (24)

stunnel process 의 limits 확인

# cat /proc/$(cat /var/run/stunnel/stunnel.pid)/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             192299               192299               processes
Max open files            1024                 4096                 files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       192299               192299               signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

/etc/security/limits.conf 를 수정해도 프로세스를 기동할 때 적용이 되지 않는다. 적용하려면 init script or service file 을 수정해주면 된다.

init

/etc/init.d/stunnel

...
DEFAULTPIDFILE=/var/run/stunnel/stunnel.pid
DAEMON=/usr/local/stunnel/bin/stunnel
NAME=stunnel
DESC="SSL tunnels"
OPTIONS=""
ENABLED=0
RLIMITS="-n 32000"
...
systemd

/etc/systemd/system/multi-user.target.wants/stunnel.service

[Unit]
Description=SSL tunnel for network daemons
After=syslog.target

[Service]
LimitNOFILE=32000
ExecStart=/usr/local/stunnel/bin/stunnel /usr/local/stunnel/etc/stunnel/stunnel.conf
Type=forking

[Install]
WantedBy=multi-user.target

적용후

# cat /proc/$(cat /var/run/stunnel/stunnel.pid)/limits
...
Max open files            32000                32000                files

에피소드

참고