Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
5 décembre 2009 6 05 /12 /décembre /2009 22:33

 

Voilà qu'un beau matin, une node d'un cluster Oracle RAC décide de se tuer. Voiçi l'analyse postmortem qui a permis de détecter un problème de désynchronisation d'horloge (TOD & tick). On commence par ici ...

 

# cd /var/core/`hostname`
# file *.0
unix.0:         ELF 64-bit MSB executable SPARCV9 Version 1, UltraSPARC1 Extensions Required, statically linked, not stripped, no debugging information available 

vmcore.0:       SunOS 5.10 Generic_127127-11 64-bit SPARC crash dump from 'xxxxxx'

# mdb unix.0 vmcore.0
Loading modules: [ unix krtld genunix specfs dtrace ufs sd mpt px ssd fcp fctl md ip hook neti sctp arp usba zfs random ipc nfs sppp crypto cpc fcip logindmux ptm ] 

> ::panicinfo 
             cpu               17 
          thread      30009bf86c0 
         message forced crash dump initiated at user request 
          tstate       4400001600 
              g1                b 
              g2                0 
              g3          11ca714 
              g4              6e0 
              g5         88000000 
              g6                0 
              g7      30009bf86c0 
              o0          1211a68 
              o1      2a100a9b9e8 
              o2                1 
              o3                0 
              o4 fffffffffffffff5 
              o5             1000 
              o6      2a100a9b0b1 
              o7          1068368 
              pc          104980c 
             npc          1049810 
               y                0 

 > 30009bf86c0::thread -p 
            ADDR             PROC              LWP             CRED 
0000030009bf86c0      600b7cb50b8      600bab9af30      6009a003d98 

 > 600b7cb50b8::ps -ft 
S    PID   PPID   PGID    SID    UID      FLAGS             ADDR NAME 
R  29139  28993   1772   1772      0 0x4a004000 00000600b7cb50b8 /crs/10.2.0/bin/oprocd.bin run -t 1000 -m 500 -f 
        T     0x30009bf86c0 <TS_ONPROC> 

> 600b7cb50b8::walk thread |::findstack 
stack pointer for thread 30009bf86c0: 2a100a9b0b1 
  000002a100a9b161 kadmin+0x4a4() 
  000002a100a9b221 uadmin+0x11c() 
  000002a100a9b2e1 syscall_trap+0xac()

 

Le démon opcrod est à l'origine du suicide de la node (commande uadmin). Pour rappel le démon oprocd surveille le cluster RAC et réalise le fencing du cluster RAC (isolement primitif d'un noeud lors d'une défaillance de celui-ci). Lors de ce fencing, oprocd effectue des vérifications de fonctionnement, puis se fige. Si le réveil de l’oprocd n’a pas lieu avant une durée configurée, celui-ci procède au redémarrage du noeud du cluster.

 

Après une petite recherche, il s'agit d'un problème de TOD : bug suivant 6595936. L'ajout des deux paramètres suivants dans le fichier system a permis de corriger le problème définitivement.

 

# cat /etc/system
...
* Bug ID 6595936
set tod_broken = 1
set dosynctodr = 0
..


Partager cet article

commentaires