Jobs de Cron de Alta Disponibilidade

4

Informações

No momento, estamos no processo de criação de um cluster de alta disponibilidade para o NGINX (no Centos 7) que executa o PHP. A maior parte da configuração foi mapeada e deve funcionar bem em um ambiente de cluster.

Infelizmente, a única coisa que não conseguimos resolver com o cluster é cron jobs (os cron jobs executam o código PHP). Tanto quanto eu saiba, cron jobs são executados em cada host individualmente. Isso significa que nós:

  1. Não há um ambiente de alta disponibilidade completo em que, após uma falha no servidor, outro servidor assume o controle e tudo ainda funciona como antes (embora mais lento) .
  2. Executamos cada trabalho cron e salvamos um resultado em um banco de dados para determinar se ele já foi executado ou não. Esta não é uma solução viável, pois alguns de nossos cron jobs podem levar horas para serem executados - e eles precisam ser realizados antes do próximo dia útil.
  3. Encontramos algum tipo de solução que permite que as tarefas agendadas de alta disponibilidade sejam executadas.

Pesquisa

Veja como a solução 3 nos ajudaria a manter um ambiente de alta disponibilidade, ou seja, o método preferido . Infelizmente, não estamos muito familiarizados com algumas dessas soluções e, portanto, busco sua especialização para nos ajudar a encontrar uma solução apropriada para as nossas necessidades. Nós não estamos muito familiarizados com máquinas Linux (o ambiente inteiro é o Windows além dos servidores NGINX) e sabemos pouco sobre como trabalhar com essas máquinas (embora tenhamos conseguido descobrir isso até agora).

Opções

  1. Dkron
    • Esta solução parece oferecer uma configuração simples e parece ser um produto decente
  2. Chronos
    • Isso usa vários outros utilitários para operar, incluindo um banco de dados real (não ideal, mas poderia funcionar)
  3. Rundeck
    • Parece oferecer muitas funcionalidades e, potencialmente, o melhor produto desta lista
  4. Rcron
    • Eu realmente não sei muito sobre isso, exceto que é baseado em Golang.
  5. Script personalizado: Como aumentar a disponibilidade de cronjobs?
    • Esta é uma abordagem "se tudo mais falhar" se nada mais funcionar ...
  6. Outras opções ??? - Por favor, forneça outras opções, se você encontrar algumas e eu vou incluí-las aqui

Perguntas

  1. Quais são suas opiniões ou recomendações de especialistas para as diferentes opções?
  2. Quais são algumas das suas experiências usando as diferentes opções (prós / contras)?
  3. Quais opções você consideraria usar em nossa infraestrutura? (se informações adicionais sobre nossa infraestrutura forem necessárias, por favor me avise)

Notas

Qualquer ajuda sobre isso é muito apreciada.

Sei que esta pergunta foi feita antes , embora pareça bastante desatualizados (2011) e muitas novas soluções foram criadas desde então.

    
por ctwheels 28.07.2017 / 21:50

2 respostas

3

Por que não sua opção (2), mas ela cria um sinalizador enquanto está sendo executada. As tarefas cron iniciarão em todas as máquinas, com pequenas variações de tempo locais, o que significa que uma delas cria a bandeira primeiro; os outros, em seguida, ver a bandeira é definida e socorrer, enquanto o primeiro é executado até a conclusão.

Você precisará prestar atenção à atomicidade da configuração / verificação do sinalizador (o NFS também é uma opção aqui, com um arquivo de bloqueio), embora, para manter isso no mínimo, também possa haver algum valor

  • colocando um pequeno sono aleatório no início de cada trabalho cron para exibi-los um pouco ou
  • variam os horários de início de qualquer trabalho em pelo menos 1 minuto entre os servidores, por exemplo, o servidor 1 inicia o trabalho às 7:02, o servidor 2 às 7:03; normalmente o servidor 1 fará todo o trabalho, mas se estiver em baixo, o servidor 2 não verá nenhum sinal quando começar às 7:03.
por 29.07.2017 / 10:02
1

Eu uso Jenkins para gerenciar cerca de 140 scripts programados.

O Jenkins não foi feito para o servidor como substituto do cron, é para integração contínua, mas você pode gerenciar quase tudo com ele.

Aqui estão algumas pessoas que têm sucesso (assim como eu) movendo os trabalhos do cron para o Jenkins

Aqui um bom comparativo entre Jenkins e cron

    
por 28.07.2017 / 22:55