Controle em Tempo de Execução#

Para iniciar o Angie, use o systemd com o seguinte comando:

$ sudo service angie start

É recomendado verificar a sintaxe da configuração antecipadamente. Veja como:

$ sudo angie -t && sudo service angie start

Para recarregar a configuração:

$ sudo angie -t && sudo service angie reload

Para parar o Angie:

$ sudo service angie stop

Após a instalação, execute o seguinte comando para garantir que o Angie esteja funcionando:

$ curl localhost:80

Nota

Os métodos para executar a versão de código aberto do Angie podem variar dependendo do método de instalação.

O Angie possui um processo mestre e vários processos trabalhadores. O processo mestre é responsável por ler e avaliar a configuração e manter os processos trabalhadores. Os processos trabalhadores lidam com o processamento real das requisições. O Angie usa um modelo baseado em eventos e mecanismos dependentes do SO para distribuir eficientemente as requisições entre os processos trabalhadores. O número de processos trabalhadores é definido no arquivo de configuração e pode ser fixo para uma determinada configuração ou ajustado automaticamente com base no número de núcleos de CPU disponíveis (veja worker_processes).

Quando configurado, o Angie também descarregará certas zonas de memória compartilhada (atualmente, a keys_zone em proxy_cache_path) para o disco antes de sair, para que um processo mestre recém-iniciado possa restaurá-las com desempenho melhorado. Se a restauração falhar devido a uma mudança no tamanho da zona, incompatibilidade de versão binária ou outras razões, o Angie registrará um alerta (failed to restore zone at address) e não usará o mecanismo de restauração de zona.

Usando Sinais#

O Angie também pode ser controlado usando sinais. Por padrão, o ID do processo do processo mestre é escrito no arquivo /run/angie.pid. Este nome de arquivo pode ser alterado no momento da configuração ou em angie.conf usando a diretiva pid. O processo mestre suporta os seguintes sinais:

TERM, INT

Desligamento rápido

QUIT

Desligamento gracioso

HUP

Recarregar configuração, atualizar fuso horário (apenas para FreeBSD e Linux), iniciar novos processos trabalhadores com a configuração atualizada, desligar graciosamente os processos trabalhadores antigos

USR1

Reabrir arquivos de log

USR2

Atualizar o arquivo executável

WINCH

Desligamento gracioso dos processos trabalhadores

Você pode enviar sinais usando kill:

$ sudo kill -QUIT $(cat /run/angie.pid)

Processos trabalhadores individuais também podem ser controlados usando sinais, embora isso seja opcional. Os sinais suportados são:

TERM, INT

Desligamento rápido

QUIT

Desligamento gracioso

USR1

Reabrir arquivos de log

WINCH

Terminação anormal para depuração (requer que debug_points esteja habilitado)

Alterando Configuração#

Para que o Angie releia o arquivo de configuração, um sinal HUP deve ser enviado ao processo mestre. O processo mestre primeiro verifica a validade da sintaxe e então tenta aplicar a nova configuração, que inclui abrir novos arquivos de log e sockets de escuta. Se a aplicação da nova configuração falhar, o processo mestre reverte as mudanças e continua operando com a configuração antiga. Se a aplicação for bem-sucedida, o processo mestre inicia novos processos trabalhadores e envia mensagens aos processos trabalhadores antigos, solicitando que eles desliguem graciosamente. Os processos trabalhadores antigos fecham seus sockets de escuta e continuam a atender clientes existentes. Depois que todos os clientes foram atendidos, os processos trabalhadores antigos são desligados.

O Angie rastreia mudanças de configuração para cada processo. Os números de geração começam em 1 quando o servidor é iniciado pela primeira vez. Esses números são incrementados a cada recarga de configuração e são visíveis nos títulos dos processos:

$ sudo angie
$ ps aux | grep angie

    angie: master process v1.10.2 #1 [angie]
    angie: worker process #1

Após uma recarga de configuração bem-sucedida (independentemente de haver mudanças reais), o Angie incrementa o número de geração para processos que receberam a nova configuração:

$ sudo kill -HUP $(cat /run/angie.pid)
$ ps aux | grep angie

    angie: master process v1.10.2 #2 [angie]
    angie: worker process #2

Se quaisquer processos trabalhadores de gerações anteriores continuarem a operar, eles se tornarão imediatamente visíveis:

$ ps aux | grep angie

    angie: worker process #1
    angie: worker process #2

Nota

Não confunda o número de geração da configuração com um 'número de processo'; o Angie não usa numeração contínua de processos para fins práticos.

Rotacionando Arquivos de Log#

Para rotacionar arquivos de log, primeiro renomeie os arquivos. Em seguida, envie um sinal USR1 ao processo mestre. O processo mestre reabrirá todos os arquivos de log atualmente abertos e os atribuirá a um usuário sem privilégios sob o qual os processos trabalhadores estão executando. Após reabrir com sucesso os arquivos, o processo mestre fecha todos os arquivos abertos e notifica os processos trabalhadores para reabrirem seus arquivos de log. Os processos trabalhadores também abrirão os novos arquivos e fecharão os antigos imediatamente. Como resultado, os arquivos antigos ficam disponíveis para pós-processamento, como compressão, quase imediatamente.

Atualização de Executável em Tempo Real#

Para atualizar o executável do servidor, primeiro substitua o arquivo executável antigo pelo novo. Em seguida, envie um sinal USR2 ao processo mestre. O processo mestre renomeará seu arquivo atual com o ID do processo para um novo arquivo com o sufixo .oldbin, por exemplo, /usr/local/angie/logs/angie.pid.oldbin, e então iniciará o novo executável, que por sua vez inicia novos processos trabalhadores.

Note que o processo mestre antigo não fecha seus sockets de escuta e pode ser gerenciado para reiniciar seus processos trabalhadores se necessário. Se o novo executável não funcionar como esperado, você pode tomar uma das seguintes ações:

  • Envie o sinal HUP ao processo mestre antigo. Isso iniciará novos processos trabalhadores sem reler a configuração. Você pode então desligar todos os novos processos graciosamente enviando o sinal QUIT ao novo processo mestre.

  • Envie o sinal TERM ao novo processo mestre. Ele enviará uma mensagem aos seus processos trabalhadores, solicitando que saiam imediatamente. Se quaisquer processos não saírem, envie o sinal KILL para forçá-los a sair. Quando o novo processo mestre sair, o processo mestre antigo iniciará automaticamente novos processos trabalhadores.

Se o novo processo mestre sair, o processo mestre antigo removerá o sufixo .oldbin do nome do arquivo com o ID do processo.

Se a atualização for bem-sucedida, envie o sinal QUIT ao processo mestre antigo, e apenas os novos processos permanecerão.

Quando configurado, o Angie também descarregará certas zonas de memória compartilhada (atualmente, a keys_zone em proxy_cache_path) para o disco antes de atualizar, para que um processo mestre recém-iniciado possa restaurá-las com desempenho melhorado. Se a restauração falhar devido a uma mudança no tamanho da zona, incompatibilidade de versão binária ou outras razões, o Angie registrará um alerta (failed to restore zone at address) e não usará o mecanismo de restauração de zona.

Opções de Linha de Comando#

-?, -h

Exibe ajuda para parâmetros de linha de comando e sai.

--build-env

Exibe informações auxiliares sobre o ambiente de compilação e sai.

-c arquivo

Usa arquivo como o arquivo de configuração em vez do arquivo padrão.

-e arquivo

Usa arquivo como o arquivo de log de erro em vez do arquivo padrão. O valor especial stderr especifica a saída de erro padrão.

-g diretivas

Aplica diretivas de configuração global adicionais, por exemplo: angie -g "pid /var/run/angie.pid; worker_processes `sysctl -n hw.ncpu`;".

-m, -M

Exibe uma lista de módulos integrados (-m) ou integrados e carregados (-M) e sai.

-p prefixo

Usa o caminho prefixo especificado para angie (o diretório onde os arquivos do servidor estão localizados; o padrão é /usr/local/angie/).

-q

Exibe apenas mensagens de erro se -t ou -T estiver definido; caso contrário, não tem efeito.

-s sinal

Envia um sinal para o processo mestre: stop, quit, reopen, reload, e assim por diante.

-t

Testa o arquivo de configuração e sai. O Angie verifica a sintaxe da configuração, incluindo recursivamente os arquivos mencionados nela.

-T

Igual ao -t, mas também exibe o resumo da configuração na saída padrão após incluir recursivamente todos os arquivos mencionados na configuração.

-v

Exibe a versão do Angie e sai.

-V

Exibe a versão do Angie, versão do compilador, tempo de compilação e os parâmetros de compilação usados, e sai.