Il cron cluster con un solo server si sovrappone consentito

Ho installato i bilanciatori di carico: lb1 (attivo) e lb2 (passivo), server web web1 : web1 (attivo), web2 (backup) e qualche database cluster. Entrambi i server web e le basi di dati sono A puntati al VIP dei bilanciatori di carico.

Entrambi i server web hanno la loro copia dei lavori di cron. Assumendo le seguenti attività:

 * * * * * echo $(hostname) >> crontab.txt 0 0 1 * * ~/bin/another/task 2>&1 

Con un certo algorithm di block random:

 lock_dir=~/.cronlock pid_file=~/.cronlock/pid if ( mkdir ${lock_dir} ) 2> /dev/null; then echo $$ > $pid_file trap 'rm -rf "$lock_dir"; exit $?' INT TERM EXIT # Crons rm -rf "$lock_dir" trap - INT TERM EXIT fi 

È sicuro di avere qualcosa di simile

 * * * * * ./lock_algorithm -f LOCK_FILE1 -c "echo $(hostname) >> crontab.txt" 0 0 1 * * ./lock_algorithm -f LOCK_FILE2 -c "~/bin/another/task 2>&1" 

Dove invio un nome di file di block "per-cron-command" e un command da eseguire?

Con "sicuro" voglio dire web1 o web2 functionrà, non entrambi.

E se ho bisogno di sovrapposizione cron (ad esempio: each minuto esegue un lungo task limitato al minuto corrente)? Come get il cron di web1 eseguendo nuovamente, supponendo che web1 è il "cron runner" attivo?

  • Posso recuperare un process nano da un terminal precedente?
  • Il drop-in di Systemd non crea il file PID
  • I file .pid sono affidabili per determinare se un process è in esecuzione?
  • sshd in esecuzione ma nessun file PID
  • Qual è il modo giusto di verificare se un PID è in esecuzione?
  • È normale che PID superi 65535?
  • come get il nome del file di process da PID in MacOS?
  • La directory in / var / run viene eliminata dopo il riavvio rigido
  • 2 Solutions collect form web for “Il cron cluster con un solo server si sovrappone consentito”

    Non sono sicuro se è ansible per te, ma qui è un'idea del mio:

    • Non sei sicuro di quale stack / software di cluster stai utilizzando, ma puoi introdurre il pacemaker e il corosync su web1 e web2 e utilizzare agenti di origine ocf per questo. Per darti un'idea, su cosa si tratta:

       primitive p_postfix ocf:heartbeat:postfix \ params config_dir="/etc/postfix" \ op monitor interval="10" primitive p_symlink ocf:heartbeat:symlink \ params target="/srv/postfix/cron" \ link="/etc/cron.d/postfix" \ backup_suffix=".disabled" \ op monitor interval="10" primitive p_cron lsb:cron \ op monitor interval=10 order o_symlink_before_cron inf: p_symlink p_cron colocation c_cron_on_symlink inf: p_cron p_symlink colocation c_symlink_on_postfix inf: p_symlink p_postfix 
    • Ciò che farà è il seguente:

      • Controllare se un file denominato postfix esiste già in /etc/cron.d .
      • Se lo fa, rinominilo a postfix.disabled (ricorda, cron ignora le definizioni dei lavori con punti nel nomefile).
      • (Re-) Crea la definizione del lavoro postfix come simbolo /srv/postfix/cron .
      • Riavviare cron quando è finito.
    • Questo esempio è fuori da un cluster attivo / passivo che esegue postfix . Cron get viene eseguito solo nel nodo attivo di postfix .

    • Potresti modificare questo per rimuovere il postfix e includere invece il tuo webserver.


    Modifica: se la suddetta è "troppo" per te, ecco un'altra idea: puoi impostare le statistiche HAProxy , get questo sito nello script, analizzarla e agire di conseguenza a seconda del nome host e dello stato emesso da HAProxy .

    Sembra che tu stai cercando di creare un semaforo che funziona attraverso i server. Mentre qualcuno ha cercato di build che non vedo che sia pronto per la produzione. Piuttosto che spingere la busta tecnologica, potrebbe essere utile ribuild il tuo problema in qualcosa che si adatta alla tecnologia disponibile.

    Il tuo sito web dispone di un database? Potresti usare questo per il cosorting.

    Altrimenti, come su un sistema di accodamento distribuito come kafka o 0mq?

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.