@captainark wrote:
Hi !
I’ve been trying to load 100.000 distinct SSL certificates with HAProxy v1.8.13, to no avail.
My test server is a virtual machine with 4 vCPU and 8GB of RAM.
Here’s my configuration so far :
global daemon user haproxy group haproxy log 127.0.0.1 local0 log 127.0.0.1 local1 notice stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s stats maxconn 10 ca-base /etc/ssl/certs crt-base /etc/ssl/haproxy tune.ssl.default-dh-param 2048 ssl-default-bind-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS ssl-default-bind-options no-sslv3 no-tls-tickets ssl-default-server-ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS ssl-default-server-options no-sslv3 no-tls-tickets maxconn 100000 spread-checks 4 nbthread 4 defaults log global option httplog option dontlognull maxconn 100000 timeout client 60s timeout server 60s timeout queue 60s timeout connect 4s timeout http-request 5s option httpclose option abortonclose option forwardfor option httpchk GET / HTTP/1.0\r\nUser-agent:\ haproxy-httpchk retries 2 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend ft_frontend mode http bind 127.0.0.1:80 bind ::1:80 acl servers_down nbsrv(bk_backend) lt 1 monitor-uri /ping monitor fail if servers_down option http-server-close default_backend bk_backend frontend ft_frontends mode http bind 127.0.0.1:443 ssl crt /etc/ssl/haproxy bind ::1:443 ssl crt /etc/ssl/haproxy acl servers_down nbsrv(bk_backend) lt 1 monitor-uri /ping monitor fail if servers_down option http-server-close default_backend bk_backend backend bk_backend mode http balance roundrobin server www1 10.0.0.1:8080 check inter 5s maxconn 25000 server www2 10.0.0.1:8081 check inter 5s maxconn 25000 server www3 10.0.0.2:8080 check inter 5s maxconn 25000 server www4 10.0.0.2:8081 check inter 5s maxconn 25000
I’ve generated 100.000 self-signed SSL certificates using EasyRSA (2048 bits RSA), all of them stored in the
/etc/ssl/haproxy
folder.–
Here are the result I am seeing when I reload HAProxy :
- with 10.000 certificates
time service haproxy reload [ ok ] Reloading haproxy: haproxy. service haproxy reload 49,56s user 6,02s system 97% cpu 56,987 total
- with 20.000 certificates
time service haproxy reload [ ok ] Reloading haproxy: haproxy. service haproxy reload 94,24s user 9,59s system 99% cpu 1:44,11 total
- with 30.000 certificates
time service haproxy reload [ ok ] Reloading haproxy: haproxy. service haproxy reload 143,05s user 14,41s system 99% cpu 2:37,94 total
- with 40.000 certificates
time service haproxy reload [ ok ] Reloading haproxy: haproxy. service haproxy reload 190,40s user 23,97s system 96% cpu 3:41,17 total
- with 50.000 certificates
The process gets killed with an out of memory error.
–
The reload process seems to be pretty CPU heavy (100% usage during the whole reload process), but to only use one of the available vCPUs.
It would also seem HAProxy takes 5 more seconds to reload per 1.000 certificates I add. Is there any way to speed up the reload process ? I have not found anything regarding this in the documentation.
I’m also suprised to get an out of memory issue while loading ~400MB certificates. Am I missing something obvious ?
I also had a benchmark running during the reloads (1000 request per seconds towards the HAProxy internal monitoring URL I configured on /ping). No requests were lost during any of my tests, which is quite impressive !
Any help or tips would be appreciated !
Thanks !
Posts: 3
Participants: 2