watchdog

13.03.2006 14:41 | stanojr

Pred par dnami som zistil ze skoro vsetky moje masiny maju na doske watchdog (konkretne implmentovany cez nejaky Intel 82801 I/O Controller Hub, teda ICH5 a novsych)

No a co je to watchdog a naco sluzi ?
Je to nejaky hardwarovy casovac, ktory po uplynuti urcitej doby restartne masinu, tento casovac pomocou softwaru pravidelne resetujeme.
V pripade ze ho neresetneme do urcitej doby (v pripade vyssie spomenuteho i8xx_tco 30 sekund), tak restartne komp.

Na domacom pc je to v podstate blbost, ale ked mate stroj v serverovni a nahodou zamrzne, tak nemusite volat isp nech ho idu restarnut, stroj sa rebootne sam.
Stroj sa nemusi restartovat iba v pripade uplneho zamrznutia systemu, restartnut sa moze napr. pri zvyseni load averagu nad urcitu hodnotu, pripadne ked dojde pamet atd.
to je uz uloha toho softwaru, ci bude resetovat ten timer, alebo sa rozhodne pre reboot.

Konkretne linuxova implementacia funguje takym sposobom (pre vsetky watchdog drivery), ze software otvori /dev/watchdog a raz za x sekund tam zapise jeden znak (driver v kernely potom vyresetuje casovac)
V pripade ze zavrieme deskriptor, tak sa casovac nevypne, vypne sa iba v pripade ze posledny zapisany znak bude "V" (toto je konkerne i8xx_tco driver, pri ostatnych neviem)

Uplne najjednoduchsuia implementacia toho softu moze vyzerat takto (jedine co robi ze za x sekund posle nejaky znak, ked ho killneme pomocou SIGTERM, tak zapise znak "V" a ukonci sa, teda vypne sa ten casovac a masinu nerebootne), v pripade ze ho killneme pomocou SIGKILL, tak sa sice ukonci, ale stroj sa rebootne (lebo posledny znak nebol "V")

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
int fd;
void sigterm(int i) {
        if (write(fd, "V", 1)!=1) {
                perror("write");
        }
        exit (-1);
}
int main(int argc, const char *argv[]) {
        fd=open("/dev/watchdog",O_RDWR);
        if (fd==-1) {
                perror("open(/dev/watchdog)");
                exit(1);
        }
        signal(SIGTERM,&sigterm);
        daemon(0,0);
        while(1) {
                if (write(fd, "\0", 1)!=1) {
                        perror("write");
                }
                sleep(5);
        }
}

Na tejto adrese ftp://ibiblio.org/pub/Linux/system/daemons/watchdog/ , najdete software ktory toho vie viac (monitorovat load average, teplotu, pingovat ipcky, atd.)

No a ako rozbehat dirver v kernely ?
V pripade ze pouzivate kernel z distribucie, tak by malo stacit modprobe i8xx_tco, v pripade ze si kompilujete sami kernel, tak toto nastavenie najdete
pod device drivers->character devices->watchdog cards
Kernel po naloadovani tohto modulu alebo nabootovani by mal vypisat
i8xx TCO timer: initialized (0x0860). heartbeat=30 sec (nowayout=0)
Len na niektorych zakladnych doskach ale tento watchdog nefunguje a vypise "failed to reset NO_REBOOT flag, reboot disabled by hardware"
Potom jedine zostava kupit daku watchdog pci kartu, alebo pouzit softwarovy watchdog, ale ten nie je na 100% uspesny :)

    • remote reboot 15.03.2006 | 12:38
      Avatar blackhole   Návštevník

      Ja pouzivam okrem sw watchdoga aj taketo nieco ipt_SYSRQ
      , vcelku sikovny modul do iptables :)

      • parada, to vyzera zaujimavo 15.03.2006 | 13:15
        Avatar stanojr   Používateľ

        parada, to vyzera zaujimavo

        • a aj to funguje :) ale 15.03.2006 | 13:35
          Avatar blackhole   Návštevník

          a aj to funguje :) ale jedina podmienka je, aby kernel zil:-), ked aj ten skape tak to je v prdeli :)))

    • hmm zajimave asi do toho 18.03.2006 | 17:50
      Avatar blackhole   Návštevník

      hmm zajimave asi do toho pujdu :)

    • hmmmm 18.03.2006 | 17:51
      Avatar blackhole   Návštevník
      Riesit load, nedostatok pamate etc. tym, ze iniciujem restart servera, hm to si clovek v serioznom nasadeni dovolit nemoze. Skor lepsi priklad by to chcelo. Inak fajn clanok.
      • ono hlavne ide o to ze 18.03.2006 | 20:07
        Avatar stanojr   Používateľ

        ono hlavne ide o to ze normalne nemas vzdy po ruke cloveka
        ktory sedi pri servery 24 hodin a caka kym mu zavolas aby ho restartol, niektore serverhousingy funguju takym sposobom ze nemaju ani v zmluve restart do urciteho casu
        a par krat sa mi stalo ze bolo treba cakat vyse hodinu ked to bolo surne
        samozrejme ze to co si spomenul sa neda riesit tak ze mam f pici a necham server restartovat ked sa nieco dojebe, v podstate tu ide iba o restart masiny v tom najhorsom ked vsetko krachne, neda sa prihlasit ani cez ssh a tak
        co sposobilo potom problem je na adminovy aby poriesil tak aby sa to neopakovalo

      • nedostatok memory vie 19.03.2006 | 15:01
        Avatar blackhole   Návštevník

        nedostatok memory vie vyriesit aj kernel sam, ze bude zabijat procesy, uz som zazil taku vec:-), dokonca aj load cca 600-700 a tam pomohol len reboot...

      • ani nie 19.03.2006 | 19:41
        Avatar betmen   Používateľ
        staram sa o +- 30 strojov a ked raz za cas sa zahlti tak uz do takeho stavu ze s nim vela nenarobim (hlavne ked programerkovia sa rozhodnu ze otestuju nieco neotestovane na produkcnom stroji a server zabiju do pol minuty). takze si nemyslim ze je to neprakticke.
        ______________ kam by som chodil...na dvor
        • limity 19.03.2006 | 22:40
          Avatar blackhole   Návštevník

          a take ako limity na na userov?:-)

          • . 24.03.2006 | 13:55
            Avatar betmen   Používateľ
            limity su podla mna horsie riesenie ako napriklad tento watchdog. pri watchdogu system povie kedy ma dost a vyriesi to. pri limitoch ty hovoris kolko system zvladne a moze to zvladnut a nemusi. a system vie lepsie kedy ide zomriet ako limit
            ______________ kam by som chodil...na dvor
    • ping v tom softe 19.03.2006 | 19:37
      Avatar betmen   Používateľ
      ja som si zapol na skusku aj ping test v tom softe len dako nedostal reply tak som sa cudoval preco mi nejde server :D
      ______________ kam by som chodil...na dvor