====== Load Balance (Nginx) ====== ===== Upstream ===== Upstream é um "pool" onde são declarados o conjunto de servidores que recebem o balanceamento de carga. upstream pool-ufrj { server 192.168.0.1:80; server 192.168.0.2:80 weight=2; server 192.168.0.3:80 backup; server 192.168.0.4:80 down; } * ''weight'': Determina o peso do servidor no pool, diretamente proporcional a utilização. Quando não declarado, o valor é **1**. * ''backup'': Servidor do pool que entra em atividade quando os demais falham. * ''down'': Servidor declarado como desativado pelo pool. Ideal para manutenção. **Obs.:** Apenas o servidor de gere o balanceamento de carga precisa de IP público. ===== Session persistance (sticky) ===== **Obs.:** Este recurso não existe na versão em pacote do Nginx, portanto é necessário **recompilar** um Nginx com o módulo sticky O recurso **sticky** é útil quando queremos que as sessões sejam mantidas no load balance. O sticky prende as requisições do usuário no servidor que iniciou a sessão evitando perdas repentinas de sessão. Esta diretiva é aplicada dentro do bloco ''upstream''. Mais detalhes sobre esta diretiva veja [[https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng|AQUI]] (seção **Usage**) upstream pool-ufrj { sticky; [...] } **Sintaxe:** sticky [secure] [expires=t] [hash=h] * ''[secure]'': Session persistence apenas em HTTPS. * ''[expires]'': Tempo (t) de expiração do sticky de sessão * ''[hash]'': Determina o hash (h) criptográfico do cookie de sessão. Pode ser **md5** ou **sha1**. Quando não informado o padrão é **md5**. ===== Exemplo de VirtualHost utilizando Load Balance ===== upstream pool-ufrj { server 192.168.0.1:443 weight=2; # servidor01 server 192.168.0.2:443 weight=1; # servidor02 server 192.168.0.3:443 backup; # servidor03 } server { server_name meusite.ufrj.br listen 80; location / { proxy_pass https://pool-ufrj; index index.php index.html; } * O upstream é informado na diretiva ''proxy_pass'' ===== Fontes ===== * Upstream: [[http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream]] * Sticky: [[https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng]] * 3rd Party Modules: [[https://www.nginx.com/resources/wiki/modules/]]