lunedì 27 ottobre 2008

Maledetto initiator ID aka "Scsi initiator ID is now 6"!!

Rifacendo un cluster con un vecchio JBOD scsi come shared storage, sono incorso in un conflitto di target ID nella catena scsi tra lo storage sharato e i due nodi.

In questo tipo di configurazione, uno dei due nodi va configurato ad hoc, agendo su alcuni parametri in OBP, in modo da evitare appunto conflitti.

Questo passaggio l'ho fatto già diverse volte, non tantissime, visto che per lo più capita di lavorare su devices fiber-channel, ma abbastanza da essere routine.

Si tratta di agire sulla variabile scsi-initiator-id di un nodo, portando il valore dal default (7) a 6, e poi inserire uno script in nvramrc, abilitandone l'uso mettendo a true use-nvramrc?. Questo in spiccioli aggira il conflitto tra gli HBA dei due nodi dandogli ID diversi, e poi al caricamento di Solaris, risetta in modo trasparente l'ID. Fatto.

Booto. Parte. Uno sfacelo. Decine di errori con molto poco senso, che tutto dicono, tranne quello che è ovvio (vabbè, l'ho esagerata, il loro senso lo hanno).

C'è da dire, che avevo già installato Solaris10 via flar sui nodi, e anche Sun Cluster che era in installmode, in attesa che designassi una DID come quorum.

Dopo un pò di riavvii stressanti e di set-defaults di OBP e rifacimento dei settaggi di cui sopra, mi illumino. Booto un solo nodo, lo booto -xvsr e osservo:
manca la dichiarazione "Scsi initiator ID is now 6". Viene bypassato, il trucco non viene implementato.

Disabilito il parsing di nvramrc settando a false "use-nvramrc?".
Ribooto ... nulla.
STOP-A brutale! Spengo lo storage. Do un reset-all. Ribooto.
Lo vedo: "Scsi initiator ID is now 6" !!
Poweroff ... accendo il JBOD ... accendo il nodo ... boot -v
Pare andare. Accendo l'altro nodo ... TUTTO OK!!!
Riabilito use-nvramrc? . Riavvio i nodi, tutto va.

Morale della favola:
le modifiche vanno implementate a storage spento (magari prima di installare Solaris, ma non è mandatorio come ho letto in alcuni documenti sull'argomento).
Dopo le modifiche è bene dare un reset-all. Provare che la configurazione venga usata. Spegnere e riavviare a storage acceso. Avviare l'altro nodo per avere conferma.

giovedì 16 ottobre 2008

SCSI Jbod in Sun Cluster

Si può definire questa guida un "cult" di Sun Cluster:

http://docs.sun.com/app/docs/doc/819-2995?l=en&q=sun+cluster+scsi_initiator_id&a=load

Ogni volta che vado a cercarla temo che possa essere stata rimossa. Descrive tra le altre cose come cablare un jbod scsi fisicamente e come settare OBP per far funzionare correttamente la catena scsi tra due nodi e uno o due vecchi storage scsi.

martedì 14 ottobre 2008

Hp-ux Fiber Channel Multipathing e StorageTek 6540

Ormai da tempo ho la possibilità di lavorare sul 6540, uno degli storage Midrange commercializzati da Sun. Il 6540 è il gemello del DS4800 di IBM, entrambi disegnati da Engenio, proprietà di LSI.
Ha due controllers con 4 porte 4 Gbit ciascuno. Con sistemi Sun SPARC e x64 il multipathing per lo spread e il failover del traffico viene gestito dallo Storagetek Traffic Manager, anche noto come MPXIO, disponibile in bundle su Solaris10 e scaricabile come pacchetto opzionale per le versioni precedenti.
Questo software è disponibile inoltre per Windows e Hp-Ux, tra gli altri, comunque a pagamento.
Hp-uX 11.31 ha un sistema di gestione del carico del traffico SAN nativo; non essendo disponibile il gestore Sun per questi sistemi abbiamo deciso di "give it a try".

Creare una LUN sul 6540 da mappare a un host Rx Integrity dotato di due HBA FC 4Gbit HP AB378-60101, al secolo QLogic ISP24xx, è procedura che segue parametri standard, se si eccettua che va selezionato "Hp-uX" come opzione Driver di Gestione SAN/Sistema Operativo. Naturalmente, sull'host non verrà presentato un singolo device logico virtuale come con mpxio, ma anzi, ben quattro path logici.

Quindi, se per una LUN lato host, su Solaris abbiamo qualcosa tipo:
c2 -> controller fisico 1
c3 -> controller fisico 2
c4 -> controller virtuale (quello a cui si fa riferimento nell'usare il volume)

Su Hp-uX con multipathing nativo avremo:
c2 -> controller fisico 1 controller A
c4 -> controller fisico 1 controller B
c6 -> controller fisico 2 controller A
c8 -> controller fisico 2 controller B

Comodo, vero?

I parametri di default lato host, in questo caso, non vanno bene. Le luns risultano pressochè inutilizzabili. L'algoritmo di bilanciamento di default è round-robin, ma l'implementazione pare incompatibile con l'array in questione, facendo risultare la user experience orribile; a quanto pare il problema sarebbe un continuo ping pong nell'inizializzazione della comunicazione tra target e initiator, che rende instabile e funzionante a singhiozzo l'I/O.

Tramite scsi_mgr, è possibile impostare parecchi parametri, tra cui anche l'algoritmo di bilanciamento. Una soluzione provata è stata quella di impostare la politica di bilanciamento dell'host come "usa il path più scarico". Questo ha fatto migliorare sensibilmente l'usabilità, ma risulta in una ennesima "incomprensione" tra host e storage, e quest'ultimo genera un warning ogni volta che l'host cambia il path in uso, essendo in disaccordo sul cambio di controller; viene effettivamente forzato e lo vede come un possibile problema.

Il 6540 lavora con la logica del preferred controller. Alla creazione del volume, esso gli assegna un preferred, che sarà la controller che cercherà di usare come primaria. Usando MPXIO, il sistema è in grado di comunicare e "collaborare" con lo storage per permettergli di seguire la sua logica di funzionamento. Il Native MP di Hp-uX 11i v3 non è in grado di seguire e collaborare a questa gestione dinamica, o per lo meno, non si accorda con lo storage per il cambio di path. Questo significa guai.
La soluzione in questo caso è stata forzare questo comportamento con una gestione manuale, individuando lato host il path corrispondente al preferred scelto dal 6540 e settandolo su Hp-uX come tale, stessa cosa per il secondario. Questo pare aver dato una configurazione funzionante, le prestazioni sembrano ok e nessun warning viene più generato.
Dai test eseguiti, ovvero, un reboot e la disconnessione fisica della fibra, sembra essere tutto ok.
Ovviamente, a ogni nuova lun creata si ripropone il problema di mappare correttamente sull'host i path primario e secondario come li sceglie lo storage.

Sarebbe interessante sapere come si sono "aggiustati" altri amministratori e avere qualche informazione in più sulla cosa. Sarebbe anche interessante vedere l'implementazione di mpxio su hp-ux.

UPDATE:In realtà sulla 11.31 esiste , il nuovo standard per la nomenclatura dei mass storage devices, che coesistendo col vecchio schema definito ora "legacy addressing", lo va a rimpiazzare e sarà l'unico metodo in una prossima release.

Sun T5440, piccoli servers crescono

Aumenta il numero di cpu nei sistemi della serie T di Sun. Si tratta di hardware equipaggiato con fino a 4 Cpu Niagara T2 con 8 cores per una frequenza di 1,4Ghz. Questi sistemi supportano fino a mezzo Tera di RAM; dalla T1000 equipaggiata con un Niagara T1 la potenza di questi sistemi con architettura sun4v sta crescendo esponenzialmente: era proprio quello che mancava e ciò che non mi ha permesso di considerare questo hardware appetibile per ambienti Enterprise fin'ora. L'aspetto è identico a quello degli x4500 equipaggiati con cpu AMD.


Mi chiedo se vedremo sistemi High-End con numero di cpu comparabili a quello delle attuali 20-25K, magari con il prossimo nato, Rock, che promette 16 core. Da una mail sulla mailing-list fm-discuss estraggo questi interessanti links, grazie a Scott Davenport:

For general information about the T5440:
http://www.sun.com/servers/coolthreads/t5440/
There's also a growing collection of T5440-realted blogs organized here:
http://blogs.sun.com/allanp/entry/sun_s_4_chip_cmt
http://blogs.sun.com/sdaven/entry/fma_for_t5440 has the FMA specifics.

domenica 12 ottobre 2008

Base10/16 e jumpstarting solaris da linux troubles

Jumpstart da rete, da ambiente misto, server Linux che installa un sistema Solaris 10 su SPARC. Sto rifacendo il clusterino di casa. Come sempre rinfresco i passi da eseguire scorrendo la guida che ho scritto qualche anno fa. Sta qui .

Tutto bene. Finchè non c'è da linkare inetboot con ln -s nominandolo coll'esadecimale del IP della macchina bersaglio.

Qui mi impanico come al solito ... non riesco mai a ricordare come si fà.
Ma alla fine ci arrivo.
Ecco:

Prendi IP, convertilo in forma binaria e da lì a esadecimale!! Ora so dove cercare quando dovrò rifarlo e mi sarò dimenticato; se non entra non entra disse Siffredi in qualche suo film (almeno presumo, mi pare una battuta abbastanza scontata).

Stavolta ho dovuto anche improvvisare passando a obp il kernel da caricare; pareva non essere in grado di trovarlo. Quindi /platform/sun4v/kernel/unix
Probabilmente un effetto collaterale di nfsv4? Indagherò.

Indagato:
apt-get install nfs-user-server

rimuove l'implementazione kernel-nfs e installa quella userspace. Ci avevo preso, era un problema legato a incompatibilità tra nfs4 Solaris e Linux a quanto pare. Basta riavviare il processo dall'inizio e questo va avanti trovandosi il kernel da caricare.

Altra cosa. Se si usa il Network Manager su Linux, è bene disattivarlo o configurarlo perchè l'interfaccia che serve i dati abbia indirizzamento statico per evitare scherzi tipo che tiri giù l'interfaccia.

Altro simpatico problema:
svc.configd: smf(5) database integrity check of:

/etc/svc/repository.db

failed. The database might be damaged or a media error might have
prevented it from being verified. Additional information useful to
your service provider is in:

/etc/svc/volatile/db_errors

The system will not be able to boot until you have restored a working
database. svc.startd(1M) will provide a sulogin(1M) prompt for recovery
purposes. The command:

/lib/svc/bin/restore_repository

Bla,Bla Bla ... il problema riguarda le opzioni di esportazione dei filesystems in /etc/exports.
La soluzione è esportare così:

/sol/Boot *(insecure,sync,ro,no_root_squash)
/vcdrom *(insecure,sync,ro,no_root_squash)

Ora dovrebbe andare.

Una descrizione di molti altri fastidiosi problemi incontrati in questo tipo d'installazione e relativa soluzione si trova qui

sabato 11 ottobre 2008

Listare i contenuti di un pacchetto

Hp-uX:
swlist | grep $nome_pacchetto
swlist -l file $nome_pacchetto

Solaris:
pkginfo|grep $nome_pacchetto
pkgchk -l $nome_pacchetto|grep Pathname

Debian:
dpkg -l|grep $nome_pacchetto
dpkg -L $nome_pacchetto

Gentoo:
qlist -I $nome_pacchetto
qfiles $nome_pacchetto

Red Hat:
rpm -qa|grep $nome_pacchetto
rpm -ql $nome_pacchetto

Blogger settings e migrazioni

Oggi, dopo molto tempo, qualcuno ha commentato un mio post. E' la seconda volta che succede ... evento raro.
Questo blog è pensato per me. Non ho mai inteso farne altro; ho comunque deciso di renderlo pubblico perchè possa
essere utile a chi cerca informazioni tecniche per risolvere un problema che io ho già visto e documentato qui.

C'è stato un problema, lo sfondo nero si mangiava il commento in quanto nel layout da cui son partito, il testo per i commenti
era il colore nero.

Sono quindi andato in Personalizza -> Layout -> Caratteri e colori, dove un editor WYSIWYG (che sta per What You See
Is What You Get) permette di cambiare parecchi elementi del layout. Sfortunatamente tra questi, il colore del testo dei commenti non c'era.

Quello che ho pensato è che probabilmente c'è un modo per inserire in questa pagina l'elemento, ma ho optato invece per un'altra strada.
Tra i sottomenù di Layout vi è Modifica HTML: qui è possibile modificare il layout direttamente mettendo mano al codice.

Ciò che cercavo è definito in:

.comment-body {
  font-size:100%;
  font-weight:normal;
  color: black;
}

Com'è ovvio basta cambiare color: da black a white.
Fatto!

Una cosa che mi manca, qui su Blogger, è qualsiasi forma di controllo sul DB. Soprattutto per farmi i miei backup ... questo è stato fatto tra le altre cose, sicuramente anche per rendere ostico migrare il blog. Ogni tanto penso di hostarlo su un mio sistema, ma, appunto, spostare i blogs è quasi impossibile, e l'unica soluzione che mi viene in mente è di fare un copia e incolla dal testo visibile direttamente dal browser.

Altre soluzioni?

venerdì 10 ottobre 2008

Hp-uX: installare multipli depot in un colpo solo

E' frustrante tornare agli anni 90 a volte ... è il feeling che sento quando mi sloggo da una sessione ssh su una 25K con Solaris 10u5 per loggarmi su un Integrity con Hp-uX 11.31 (11i v3). Sapore di terminale "vetusto".
Niente guerre di religione ... tanto che Solaris è better è un dato di fatto :)

Sto avendo a che fare con Hp-uX in questi giorni. Come tutte le cose poco conosciute può essere terribilmente ostico ... quindi un pò di pacchettini da metter su per rendere l'esperienza più piacevole è un must.

uX ha i depot: swinstall è il tool per gestire l'installazione. Dopo aver fatto la guerra son riuscito a installare i pacchetti necessari. Mi son trovato a dover ovviare al problema di non riuscire a installare i pacchetti in un colpo solo; uno alla volta è terribile, ci va un sacco di tempo.

Alla fine, con swcopy e uno scriptino che mi sono prodotto apposta ho automatizzato il processo. E' sufficiente copiare i depot gzippati scaricati dal repository dell'uni dello stato dello Utah e lanciare:

# depota_pota

All'inizio ho create /staff e /staff/depot /staff/archives /staff/old , non serve altro.
#!/bin/sh

PKG_DIR="staff";
OLD="old";
DEPOT="depot";

cd /${PKG_DIR};
if [ `ls /$PKG_DIR|grep *.depot.gz` ]; then
gunzip *
fi

if [ `ls /$PKG_DIR/$DEPOT|grep catalog` ]; then
mv /$PKG_DIR/$DEPOT/* /$PKG_DIR/$OLD/
fi

for i in *.depot
do
swcopy -s ${PWD}/$i \* @ /${PKG_DIR}/${DEPOT}
done
swinstall -s
/${PKG_DIR}/${DEPOT}

Dalla GUI si selezionano i pacchetti, si marcano con 'm' e dal menù Actions si seleziona Install ... avanti avanti avanti!!




Do you remember OBP? E le env settate secoli fa?

Quando tiri di nuovo fuori la vecchia Ultra10, sicuramente oltre a una versione vecchiotta di Solaris, le variabili d'ambiente di OBP saranno settate ad minchiam, o comunque diversamente da come ti servono.
In questo momento monitor e tastiera al boot sono useless, probabilmente input e output devices sono settate a ttya o ttyb; urge un reset.

E allora, spegni, con tastiera e monitor collegati riaccendi. Tieni premuto STOP+N

Come per magia il mitico banner appare... e tutto è fresco che sa quasi di fabbrica!

lunedì 6 ottobre 2008

LAOP: Php e Oracle su Linux

Smanettando con Oracle ho deciso di interfacciarmici con un linguaggio che già conosco e col quale ho realizzato qualche piccola applicazioncina, solitamente usando come backend mySQL.

L'installazione di Oracle su Debian 32bit, e successivo patching alla 10.2.0.4 è stato abbastanza painless. Ho scelto Oracle Database Enterprise Edition, anzichè Oracle XE, per il quale sono forniti binari pacchettizati deb; più che altro per uniformità con la versione che mi ritrovo in ambienti di produzione al lavoro. Tempo fa, lo avevo installato su un HP con Gentoo 64bit e fu dura; questa volta invece tutto liscio.
E' stato sufficiente esportare il display e lanciare la GUI d'installazione con un unico parametro:
#./runInstaller -ignoreSysPrereqs
Questo permette di poter installare senza che venga eseguito il check di sistema operativo e versione; infatti, se non è tra gli OSes supportati, l'OUI (Oracle Universal Installer) esce e quitta.
Per il patching da 10.2.0.1 a 10.2.0.4 è sufficiente fare la stessa cosa descritta qui sopra. Naturalmente ho omesso alcuni passi di preparazione dell'installazione tra cui la creazione dell'utente e l'impostazione dell'ambiente.

Per Apache e Php basta il solito apt-get install. Dopodichè consiglio di verificare che tutto funzioni mettendo il file index.php in /var/www con i contenuti che seguono:
phpinfo():
?>
Manca solo interfacciare PHP a Oracle. Per questo mi son rifatto a una procedura veloce e pulita, descritta sul sito morse.nl

In breve:
#apt-get install php5-dev php-pear
Il secondo fornisce il comando pecl da usare per installare l'estensione Oracle oci8. E' sufficiente passargli la $ORACLE_HOME quando verrà richiesto il PATH dove risiede l'Instantclient. Quest'ultimo sarebbe da installare precedentemente ai pacchetti qui sopra, nel caso la parte server di Oracle risiedesse su un'altro sistema.

Una piccola modifica ancora
#echo "extension=oci8.so" >> /etc/php5/apache2/php.ini
e siamo a posto. Restartando Apache e accedendo di nuovo alla index.php creata prima, è possibile vedere i riferimenti all'estensione oci8.

Questa è una delle possibili configurazioni per poter utilizzare un db Oracle come backend per PHP. Per altre possibilità e un mucchio di informazioni utili in 195 pagine, ci si può rifare al pdf:

The Underground PHP and Oracle Manual

venerdì 3 ottobre 2008

bashing: break e continue

Questi due comandi sono fondamentali nell'uso dei loops in uno script.
Break permette l'uscita da un loop al contrario di continue che salta alla prossima iterazione. Passandogli un parametro è possibile, nei nested loops, controllare di quanti cicli uscire (break), o quante iterazioni saltare all'interno dello stesso loop (continue).

Maggiori informazioni nella mitica Advanced Bash Scripting Guide (ABS), sempre sotto virtuale braccio quando mi trovo a scriptare.

Visite