Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NGINX Load Balancing

NGINX Load Balancing

For the recorded webinar, visit nginx.com/webinars.

When one server just isn’t enough, how can you scale out? In this webinar, you'll learn how to build out the capacity of your website. You'll see a variety of scalability approaches and some of the advanced capabilities of NGINX Plus.

NGINX Inc

March 19, 2014
Tweet

More Decks by NGINX Inc

Other Decks in Technology

Transcript

  1. About this webinar When one server just isn’t enough, how

    can you scale out? In this webinar, you'll learn how to build out the capacity of your website. You'll see a variety of scalability approaches and some of the advanced capabilities of NGINX Plus.
  2. What is NGINX? Internet N Web Server Serve content from

    disk Application Server FastCGI, uWSGI, Passenger… Proxy Caching, Load Balancing… HTTP traffic þ Application Acceleration þ SSL and SPDY termination þ Performance Monitoring þ High Availability Advanced Features: þ Bandwidth Management þ Content-based Routing þ Request Manipulation þ Response Rewriting þ Authentication þ Video Delivery þ Mail Proxy þ GeoLocation
  3. NGINX and NGINX Plus NGINX  F/OSS     nginx.org  

    3rd  party     modules   Large  community  of  >100  modules  
  4. NGINX and NGINX Plus NGINX  F/OSS     nginx.org  

    3rd  party     modules   Large  community  of  >100  modules   NGINX  Plus     Advanced  load  balancing  features   Ease-­‐of-­‐management   Commercial  support  
  5. Load-balancing Web Servers Internet N þ   Improved  Applica@on  Availability  

    þ   Management   þ   Increased  Capacity   þ   Advanced  techniques  e.g.  A|B  tes@ng   Why?   þ   DNS  Round  Robin   þ   Hardware  L4  load  balancer   þ   SoMware  Reverse  Proxy  LB   þ   Cloud  solu@on   How?  
  6. Three Load Balancing case studies Basic  Load  Balancing  with  NGINX

        When  you  need  more  control     Advanced  techniques   1 2 3
  7. 1. Basic Load Balancing •  Simple  scalability   – All  servers

     have  same  applica@ons/services   – Load-­‐balancer  extracts  op@mal  performance  
  8. Basic load balancing server {! listen 80;! ! location /

    {! proxy_pass http://backend;! }! }! ! upstream backend {! zone backend 64k;! ! server webserver1:80;! server webserver2:80; ! server webserver3:80;! server webserver4:80;! }!
  9. Basic load balancing •  Use  logging  to  debug:    “$upstream_addr”

      log_format combined2 '$remote_addr - $remote_user [$time_local] '! '"$request" $status $body_bytes_sent '! '"$upstream_addr"';!   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:56  +0000]  "GET  /  HTTP/1.1"  200  30  "127.0.1.1:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:56  +0000]  "GET  /favicon.ico  HTTP/1.1"  200  30  "127.0.1.2:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:57  +0000]  "GET  /  HTTP/1.1"  200  30  "127.0.1.3:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:57  +0000]  "GET  /favicon.ico  HTTP/1.1"  200  30  "127.0.1.4:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:57  +0000]  "GET  /  HTTP/1.1"  200  30  "127.0.1.1:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:57  +0000]  "GET  /favicon.ico  HTTP/1.1"  200  30  "127.0.1.2:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:58  +0000]  "GET  /  HTTP/1.1"  200  30  "127.0.1.3:80"   192.168.56.1  -­‐  -­‐  [09/Mar/2014:23:08:58  +0000]  "GET  /favicon.ico  HTTP/1.1"  200  30  "127.0.1.4:80"  
  10. Basic Load Balancing •  Round-­‐robin  is  the  default   – 

    Suitable  for  consistent  pages   •  Least  Connec@ons   –  Suitable  for  varying  pages   •  IP  Hash   –  Fixed  mapping,  basic  session   persistence   upstream backend {! server webserver1:80;! server webserver2:80;! }! upstream backend {! least_conn;! server webserver1:80;! server webserver2:80;! }! upstream backend {! ip_hash;! server webserver1:80;! server webserver2:80;! }!
  11. Managing the Upstream Group •  Direct  config  edi@ng:   – nginx

     –s  reload   – upstream.conf  file:   •  On-­‐the-­‐fly  Reconfigura@on      [NGINX  Plus  only]   upstream backend {! server webserver1:80;! server webserver2:80;! server webserver3:80;! server webserver4:80;! }! $ curl 'http://localhost/upstream_conf?upstream=backend&id=3&down=1'!
  12. 2. When you need more control… •  In  many  scenarios,

     you  want  more  control  over   where  traffic  is  routed  to:   –  Primary  and  secondary  servers  (aka  master/slave)   –  Transac@on  state  is  accumulated  on  one  server  
  13. Internet ‘Master’ and ‘Slave’ servers •  Wordpress  admin  traffic  (e.g.

     image  uploads)   N ‘Master’   ‘Slave’   Copy  image   uploads  from   master  to  slave  
  14. ‘Master’ and ‘Slave’ servers •  Wordpress  admin  traffic  (e.g.  image

     uploads)   N server {! listen 80;! ! location ~ ^/(wp-admin|wp-login) {! proxy_pass http://wpadmin;! }! }! ! upstream wpadmin {! server server1:80;! server server2:80 backup; ! }! ‘Master’   ‘Slave’  
  15. Session Persistence [NGINX Plus only] •  For  when  transac@on  state

     is  accumulated  on  one  server   –  Shopping  carts   –  Advanced  interac@ons   –  Non-­‐RESTful  Applica@ons   •  NGINX  Plus  offers  two  methods:     –  s@cky  cookie   –  s@cky  route   “Session  persistence  also   helps  performance”  
  16. A|B Testing Internet N ‘backends’  upstream  group   Test  

    server   95%   5%   Par@@on  traffic.       Send  5%  to  new  applica@on  instance  
  17. A|B Testing split_clients "${remote_addr}AAA" $servers {! 95% backends;! 5% 192.168.56.1:80;!

    }! ! server {! listen 80;! ! location / {! proxy_pass http://$servers;! ! }! }!
  18. Application Migration Internet N ‘backendsA’  upstream  group   ‘backendsB’  upstream

     group   Create  new  genera@on  of  applica@on   Migrate  users  from  old  to  new   Preserve  sessions,  no  interrup@ons  
  19. Application Migration map $cookie_group $group {! ~(?P<value>.+)$ $value;! default backendB;

    # The default upstream group! }! ! server {! listen 80;! ! location / {! add_header Set-Cookie "group=$group; path=/"! proxy_pass http://$group;! }! }!
  20. Three Load Balancing case studies Basic  Load  Balancing  with  NGINX

        When  you  need  more  control     Advanced  techniques   1 2 3
  21. Closing thoughts •  37%  of  the  busiest  websites  use  NGINX

      •  Check  out  the  load-­‐balancing  ar@cles  on  nginx.com/ blog   •  Future  webinars:  nginx.com/webinars   Try  NGINX  F/OSS  (nginx.org)  or  NGINX  Plus  (nginx.com)