Pular para o conteúdo principal

Gerenciamento de Nodes

Este documento descreve como gerenciar nodes backend no edgeProxy usando os comandos do Taskfile.

Visão Geral

O edgeProxy descobre backends dinamicamente a partir do banco de dados SQLite routing.db. O banco é replicado em todos os POPs via sistema de replicação built-in (SWIM gossip + QUIC transport). Você pode gerenciar nodes usando os comandos do Taskfile.

Schema do Node

Cada node backend possui os seguintes atributos:

CampoTipoDescrição
idTEXTIdentificador único (ex: sa-node-1)
appTEXTNome da aplicação (padrão: myapp)
regionTEXTRegião geográfica (sa, us, eu, ap)
wg_ipTEXTEndereço IP WireGuard
portINTEGERPorta do backend (padrão: 8080)
healthyINTEGERStatus de saúde (0=não saudável, 1=saudável)
weightINTEGERPeso no balanceamento (maior = mais tráfego)
soft_limitINTEGERMáximo preferido de conexões
hard_limitINTEGERMáximo absoluto de conexões
deletedINTEGERFlag de soft delete (0=ativo, 1=deletado)

Comandos

Adicionar um Node

task node-add -- <id> <region> <wg_ip> [port] [weight]

Exemplos:

# Adicionar node com valores padrão (port=8080, weight=1)
task node-add -- sa-node-2 sa 10.50.1.2

# Adicionar node com porta customizada
task node-add -- us-node-2 us 10.50.2.2 9000

# Adicionar node com porta e peso customizados
task node-add -- eu-node-2 eu 10.50.3.2 8080 3

Remover um Node (Soft Delete)

Marca o node como deletado sem removê-lo do banco. O node pode ser restaurado depois.

task node-remove -- <id>

Exemplo:

task node-remove -- sa-node-2

Deletar um Node (Permanente)

Remove permanentemente o node do banco de dados.

task node-delete -- <id>

Exemplo:

task node-delete -- sa-node-2

Habilitar um Node

Define healthy=1 e deleted=0, tornando o node disponível para tráfego.

task node-enable -- <id>

Exemplo:

task node-enable -- sa-node-1

Desabilitar um Node

Define healthy=0, impedindo que tráfego seja roteado para este node.

task node-disable -- <id>

Exemplo:

task node-disable -- sa-node-1

Definir Peso do Node

Ajusta o peso no balanceamento de carga. Peso maior significa que o node recebe mais tráfego em relação aos outros.

task node-weight -- <id> <weight>

Exemplo:

# Dar a este node 3x mais tráfego
task node-weight -- sa-node-1 3

Definir Limites de Conexão

Configura limites soft e hard de conexões para um node.

  • soft_limit: Quando atingido, o balanceador começa a preferir outros nodes
  • hard_limit: Máximo absoluto de conexões; novas conexões são rejeitadas
task node-limits -- <id> <soft_limit> <hard_limit>

Exemplo:

task node-limits -- sa-node-1 200 500

Comandos de Visualização

Mostrar Todos os Nodes

task db-show

Mostrar Apenas Nodes Saudáveis

task db-healthy

Algoritmo de Balanceamento

Ao selecionar um backend, o edgeProxy usa um sistema de pontuação:

score = region_score * 100 + (load_factor / weight)

onde:
region_score = 0 (região do cliente = região do backend)
= 1 (backend na mesma região do POP)
= 2 (fallback para outras regiões)

load_factor = conexões_atuais / soft_limit

weight = peso configurado do backend (maior = preferido)

O backend com menor pontuação é selecionado, respeitando:

  • Apenas backends saudáveis (healthy = 1)
  • Backends abaixo do hard_limit
  • Backends com soft delete são excluídos (deleted = 0)

Atualizações Dinâmicas

O edgeProxy recarrega o routing.db periodicamente (padrão: a cada 5 segundos). Mudanças nos nodes entram em efeito automaticamente sem reiniciar o proxy.

Para alterar o intervalo de reload:

export EDGEPROXY_DB_RELOAD_SECS=10

Boas Práticas

  1. Use soft delete (node-remove) antes de deletar permanentemente para permitir recuperação
  2. Desabilite nodes durante manutenção ao invés de removê-los
  3. Defina pesos apropriados baseado na capacidade do node
  4. Configure limites para prevenir sobrecarga durante picos de tráfego
  5. Monitore nodes saudáveis com task db-healthy antes de deployments