====== 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/]]