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?

  • Come get il PID di un process avviato da / bin / su -c
  • Qual è la gamma di un PID su Linux e Solaris?
  • La port 80 viene utilizzata da SYSTEM (PID 4), che cosa è questo?
  • Il drop-in di Systemd non crea il file PID
  • Il PID di un process di figlio bash (imapsync) - come ottenerlo?
  • Come trovare il file .pid per un determinato process
  • Ridurre PID_MAX in modo sicuro
  • Possibile spedire il segnale di uccisione a tutti i processi con un dato ppid?
  • 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.