„enterprise class load balancer“ - sebastian feldmann

48
Set up an „Enterprise Class Load Balancer“ with free software

Upload: others

Post on 16-Oct-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Set up an

„Enterprise Class Load Balancer“with free software

Page 2: „Enterprise Class Load Balancer“ - Sebastian Feldmann

About me

Sebastian Feldmann

Teamlead CHECK24.de

PHP since < 2000

@movetodevnull

https://phpbu.de sebastianfeldmann

Page 3: „Enterprise Class Load Balancer“ - Sebastian Feldmann
Page 4: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Why?

?

?

?

??

?

?

??

?

??

Page 5: „Enterprise Class Load Balancer“ - Sebastian Feldmann

High Availability&

Performance

Page 6: „Enterprise Class Load Balancer“ - Sebastian Feldmann

High Availability

Redundancy, redundancy, redundancy…

Page 7: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Performance

Scaling your application

Page 8: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Load BalancerInternet Web Servers

Setup

Page 9: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Load BalancerInternet

Software

EncryptionCaching

Load Balancing

Page 10: „Enterprise Class Load Balancer“ - Sebastian Feldmann

NGINXserver { listen 192.0.2.70:80; listen 192.0.2.70:443 ssl; server_name www.example.com;

ssl_certificate ssl/com.example.www.crt; ssl_certificate_key ssl/com.example.www.key;

location / { proxy_pass http://localhost:90; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Protocol $scheme; proxy_pass_header Set-Cookie; }}

Page 11: „Enterprise Class Load Balancer“ - Sebastian Feldmann

NGINX

location / { proxy_pass http://localhost:90; proxy_set_header Host $host; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Protocol $scheme; proxy_pass_header Set-Cookie;}

Page 12: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy

frontend fe.com.domain.www bind localhost:90 option httplog option http-server-close maxconn 20000 capture request header Host len 20 capture request header X-Forwarded-For len 15

default_backend be.com.domain.default

backend be.com.domain.default balance roundrobin server server1 192.168.0.11 server server2 192.168.0.12

Page 13: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Congratulations

Page 14: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Tuning

• Improve the setup

• Tuning the Operating System

• Tuning the Software

• Monitoring

Page 15: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Load BalancerInternet Web Servers

Setup

Page 16: „Enterprise Class Load Balancer“ - Sebastian Feldmann

DNS

www.domain.com. 600 IN A 192.0.2.70 www.domain.com. 600 IN A 192.0.2.71

Page 17: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Operating System

Page 18: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Network Redundancy

• SixPack configuration

• NIC bonding

Page 19: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Network Redundancy auto bond0 iface bond0 inet static address 192.0.2.70 netmask 255.255.255.0 network 192.0.2.0 broadcast 192.0.2.255 gateway 192.0.2.1 dns-nameservers 192.0.2.1 bond-slaves eth0 eth1 bond-mode 1 bond-miimon 100 bond-updelay 200 bond-downdelay 200

Page 20: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Network Tuning

time

band

wid

th

Page 21: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Network Tuning # recommended default congestion control is not reno net.ipv4.tcp_congestion_control=htcp # allow testing with buffers up to 64MB net.core.rmem_max = 67108864 net.core.wmem_max = 67108864

# increase Linux autotuning TCP buffer limit to 32MB net.ipv4.tcp_rmem = 4096 87380 33554432 net.ipv4.tcp_wmem = 4096 65536 33554432

# increase the length of the processor input queue # set at least as high as haproxy maxconn net.core.netdev_max_backlog = 30000

/etc/sysctl.conf

Page 22: „Enterprise Class Load Balancer“ - Sebastian Feldmann

NGINX

Page 23: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Encryption

SSL Labs (ssllabs.com)

Page 24: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Certificate

• Use SHA256 for the signature algorithm (not SHA1)

• Use a well known/trusted CA

• Make sure your cert and chain are in the correct order

Page 25: „Enterprise Class Load Balancer“ - Sebastian Feldmann

intermediate

Chain of trust

example.com

intermediate

root

Page 26: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Protocol Support

• Don’t use SSLv2 or SSLv3

• Use TLS

• For a perfect score use TLS 1.2 only

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Page 27: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Key Exchange

• Default Diffie-Hellman Key (weak)

• Create new key

• Use the generated key

ssl_dhparam ssl/dhparam.pem;

openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

Page 28: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Cipher Strength

• Forward Secrecy

• Set preferred ciphers

ssl_prefer_server_ciphers on;ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+...."

Page 29: „Enterprise Class Load Balancer“ - Sebastian Feldmann

SSL Stapling

• OCSP modification

• Part of the TLS handshake

• Revocation information

• Chain of trust including root certificate

ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate ssl/com.example.www.trusted.crt;

Page 30: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Encryption

SSL Labs (ssllabs.com)

Page 31: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Protocol Tuning

time

band

with

Page 32: „Enterprise Class Load Balancer“ - Sebastian Feldmann

SPDY & HTTP/2

time

band

with

Page 33: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Protocol Tuning

• Use HTTP/2 or SPDY

listen 192.0.2.70:443 ssl spdy;

listen 192.0.2.70:443 ssl http2;

NGINX 1.5.10 - 1.9.4

NGINX 1.9.5 - 1.10.*

Page 34: „Enterprise Class Load Balancer“ - Sebastian Feldmann

SPDY Support

caniuse.com

Page 35: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HTTP/2 Support

caniuse.com

1 - Partial support in IE11 refers to being limited to Windows 10.2 - Only supports HTTP/2 over TLS (https)3 - Partial support in Safari refers to being limited to OSX 10.11+

Page 36: „Enterprise Class Load Balancer“ - Sebastian Feldmann

SPDY or HTTP/2

Page 37: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Caching

proxy_cache_path /var/lib/nginx/cache levels=1:2 keys_zone=MYCACHE:10m inactive=10m max_size=1g;

server { location ~ ^/assets/ { proxy_cache MYCACHE; proxy_cache_key "$scheme$host$request_uri"; proxy_cache_valid 200 10m; proxy_no_cache $http_pragma $http_cache_control; expires 30d; ...

Page 38: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Stale is better than nothing

server { location ~ ^/html/ { ...

proxy_cache_use_stale error timeout http_500 http_502 http_503; ...

Page 39: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy

Page 40: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Checking Backends

backend be.com.domain.default ... option httpchk GET /health/check.html http-check disable-on-404

server server1 192.168.0.11 check server server2 192.168.0.12 check

Page 41: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy Monitoring

• Connect via socket

• Display html page

• Get data CSV

Page 42: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy: Socket

global stats socket /var/run/haproxy.sock mode 600 level admin stats timeout 2m

Page 43: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HATop

Page 44: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy: Stats Page

listen admin_stats 192.0.2.70:9090 stats uri /stats stats realm HAProxy\ Stats stats auth admin:superSecretPassword stats show-desc stats show-legends stats show-node stats refresh 15s

acl authorized_hosts src 192.168.0.33

tcp-request content accept if authorized_hosts tcp-request content reject

Page 45: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy: Stats Page

Page 46: „Enterprise Class Load Balancer“ - Sebastian Feldmann

HAProxy: Stats CSV

stats uri /stats/csv;csv

• Machine readable version

• Add ;csv

Page 47: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Recap

• Redundant Load Balancer

• Improved Network speed & redundancy

• Improved HTTPS performance & Caching

• HAProxy backend checking & monitoring

Page 48: „Enterprise Class Load Balancer“ - Sebastian Feldmann

Thank you

Sebastian Feldmann - sebastian-feldmann.info - @movetodevnull

https://joind.in/talk/a6aca