Questa e` la situazione, due apparati, ognuno composto da due server (a1 e a2, b1 e b2), a1 fa girare il software e a2 il database, in caso succeda qualche cosa a questi due keepalive effettua lo switch su b1 e b2.

I due server montano tre export NFS (p1, p2, p3) da tre NAS diversi. I server usano una distribuzione GNU/Linux.

I NAS montano una distribuzione GNU/Linux. Le share sono montate senza particolari parametri.

Il software si occupa anche del monitoraggio. Il problema avveniva quando una delle export scompariva, a quel punto il monitoraggio del software rilevava la perdita di tutte le share, non solamente di una. Qualsiasi operazione che richiedesse un accesso alla export rimaneva appesa a tempo indeterminato in attesa di una risposta da parte del server NFS.

NFS puo` essere montato in due modi, hard o soft, nel primo caso il client accoda le richieste verso il server NFS e le tiene in attesa sino a quando il il server non torna a rispondere, nel secondo caso dopo un certo lasso di tempo o numero di tentativi viene ritornato un errore al client. La modalita` di mount di default, nel caso non si indichi diversamente, e` hard, questo pero` blocca il sistema in attesa di una risposta che non arrivera` mai.

Il primo tentativo che ho fatto e` stato quello di montare le share utilizzando la modalita` soft. Il comportamento e` cambiato, le operazioni rimanevano "appese" solamente per il tempo indicato come timeout, poi tornavano a rispondere. Nel caso del software questo significava che comunque per qualche secondo ogni tanto anche le share non in errore venivano indicate come non presenti sino a quando non scadeva il timeout.

Quindi neanche questa soluzione era accettabile.

Nelle varie ricerche ho anche scoperto che quando va in stallo una handle NFS non ci sono sistemi per eliminarla, tranne il riavvio del sistema, una cosa ovviamente non accettabile.

Allora mi sono inventato un barbatrucco abbastanza sporco.

Ho creato uno script caricato in backgroung che verificasse il funzionamento della export, in caso di problemi lo script scatena una procedura per evitare il blocco del sistema e il comportamento "strano" del software.

In pratica una volta che lo script verifica che il server NFS non risponde piu` crea un’interfaccia virtuale sul client, gli attribuisce lo stesso indirizzo IP del server NFS, crea la directory di appoggio, crea una export con lo stesso nome, attiva il demone NFS e monta la export sovrapponendola a quella non piu` funzionante.

Ovviamente l’obienzione potrebbe essere che il software potrebbe iniziare a scrivere sulla nuova export, ma cosi` non e` in quanto c’e` un controllo che impedisce di usare un volume che non abbia una determinata quantita` di spazio a disposizione.

Usando questo sistema sporco e cattivo ho risolto un problema che rischiava di diventare una vera spina nel fianco.

As veduma!