Como posso fazer pesquisas com mais frequência durante uma mudança de estado?

1

Estou usando o Monit para monitorar vários processos que precisam estar ativos e em execução como um grupo para que um site funcione corretamente. Para trazer ou derrubar o site, há uma ordem definida pela qual os processos devem ser iniciados ou interrompidos. As dependências são as seguintes. (Os nomes foram alterados para proteger os inocentes. Uso nomes mais descritivos na configuração real.)

  1. O serviço site depende de site.workerA , site.workerB e site-redis .

  2. Ambos os trabalhadores dependem de site-redis .

O site é sempre iniciado ou interrompido através do Monit para evitar a possibilidade de condições de corrida, ou o Monit trabalhando contra mim. (por exemplo, eu paro um serviço e a Monit continua a reiniciá-lo.)

O problema é que leva muito mais tempo do que o necessário para colocar todo o site em funcionamento. Se eu instruir a Monit para iniciar o site, uma vez que a Monit tenha percebido as dependências, a sequência de ações da parte da Monit é:

  1. Inicia site-redis .
  2. Acomoda por 2 minutos.
  3. Detecta que site-redis está em execução, portanto, inicie os dois trabalhadores.
  4. Acomoda por 2 minutos.
  5. Detecta que os trabalhadores e os redis estão em execução, portanto, inicie site .
  6. [dorme por 2 minutos]
  7. [Detecta que site está em execução.]

Eu entrei os dois últimos passos porque eles são praticamente irrelevantes, já que o site está efetivamente funcionando antes do último intervalo de 2 minutos.

O intervalo de 2 minutos é o intervalo de pesquisa padrão que o Monit usa para verificar os serviços. Eu sei que eu poderia reduzir esse intervalo para que esses serviços sejam sempre pesquisados com mais freqüência. Por exemplo, eu poderia fazer

check process site.workerB pidfile "/srv/site/var/run/site/site.workerB.pid"
    every [number] cycles
    ...

Eu também teria que mudar a duração do ciclo de polling para algo menor, de modo que um ciclo seja menor que 2 minutos.

No entanto, eu não quero que o Monit sempre pesquise esses serviços com mais freqüência. Eu gostaria que o Monit pesquisasse serviços apenas com mais frequência quando estivesse aguardando uma mudança de estado. Digamos que, se o Monit tiver iniciado um serviço e outro serviço depender dele, faça uma pesquisa em 5 segundo intervalo em vez de 2 minutos.

Eu não estou vendo nenhuma maneira de configurar o Monit para fazer isso, mas talvez eu tenha perdido alguma coisa.

Aqui está uma ilustração da minha descrição em prosa acima. Depois de remover coisas que não são pertinentes ao problema, a configuração do Monit é assim:

check process site-redis pidfile ".../site/redis.pid"
      group site
      start program = ...
      stop program = ...
      if does not exist then start

check process site pidfile ".../site/site.pid"
      group site
      depends on site.workerA, site.workerB, site-redis
      start program = ...
      stop program = ...
      if does not exist then start

check process site.workerA pidfile ".../site/site.workerA.pid"
      group site
      depends on site-redis
      start program = ...
      stop program = ...
      if does not exist then start

check process site.workerB pidfile ".../site/site.workerB.pid"
      group site
      depends on site-redis
      start program = ...
      stop program = ...
      if does not exist then start
    
por Louis 06.02.2018 / 16:49

0 respostas