solaris

You are currently browsing articles tagged solaris.

Enterprise DB

Un sostituto per Oracle Database, che spero abbia un buon futuro. Enterprise DB nasce dalle ceneri di PostgreSQL, si può dire che sia il successore. Multipiattaforma, si annuncia come compatibile quasi totalmente con Oracle.

Io ero curioso. L’ho installato su una zona di solaris (solaris zones) e ho provato ovviamente la versione Sparc 64bit. Sono stato obbligato a installare le libgcc e le libiconv che sono scaricabili facilmente dal sito di SunFreeware. L’installazione è durata qualcosa come 40 secondi, solo il tempo di risponde a poche domande. Una volta installato viene eseguito da solo e lo stesso install crea lo script shell per lo startup automatico.

Non ho avuto modo di testare le prestazioni e la sua funzionalità. Lo farò a breve. Facendo un rapido ‘ps -ef’ è comunque leggerissimo… chissà se a oracle dispiace!

Tags: , , , , ,

Dopo VMWare, è il caso di iniziare a provare lo zones di solaris. Zones è un tool, un software, una collection di comandi, non come definirla bene, inclusa ovviamente in Solaris 10. Zones va a nozze con i nuovi hardware Sun multicore, questo perchè, come sulle versioni ESX di vmware, c’è la possibilità di controllare le risorse hardware in modo molto preciso, quindi si può, su un Sun T2000 con 8 core, creare 2 zone che usano 2 core, e tre zone con un core ciascuno.

Zones è configurabile in due modi diversi: nel primo caso la zona creata in realta condivide col sistema base alcune directory, in particolare /usr /lib /sbin /platform . Questo fa si che lo spazio disco occupato dalla zona sia di poco più di 100 mega. La zona infatti ha riservate /etc e /var.

I comandi da imparare sono zonecfg, zoneadm, zlogin.

Creiamo la nostra zona:

# zonecfg -z zonaditest
zonaditest: No such zone configured
Use ‘create’ to begin configuring a new zone.
zonecfg:small-zone> create
zonecfg:small-zone> set autoboot=true
zonecfg:small-zone> set zonepath=/export/zonaditest
zonecfg:small-zone> add net
zonecfg:small-zone:net> set address=192.168.1.101
zonecfg:small-zone:net> set physical=hme0
zonecfg:small-zone:net> end
zonecfg:small-zone> info
zonepath: /export/zonaditest
autoboot: true
pool:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
net:
address: 192.168.1.101
physical: hme0
zonecfg:small-zone> verify
zonecfg:small-zone> commit
zonecfg:small-zone> exit

Analizziamo. Abbiamo lanciato il comando zonecfg per configurare la zona. Il sistema ci ha detto che la zona non esiste e inizia la configurazione ex-novo. In realtà è tutto abbastanza chiaro. Il parametro create verrà ripreso successivamente perchè merita il disco sull’argv -b che permette di create una zona senza inherit-pkg con la global zone.

Se volessimo creare una zona a se stante, senza inhinerit packages, dovremmo agire così:

# zonecfg -z zonaditest2
zonaditest2: No such zone configured
Use ‘create’ to begin configuring a new zone.
zonecfg:small-zone> create -b
zonecfg:small-zone> set autoboot=true
zonecfg:small-zone> set zonepath=/export/zonaditest2
zonecfg:small-zone> add net
zonecfg:small-zone:net> set address=192.168.1.102
zonecfg:small-zone:net> set physical=hme0
zonecfg:small-zone:net> end
zonecfg:small-zone> info
zonepath: /export/zonaditest2
autoboot: true
pool:
net:
address: 192.168.1.102
physical: hme0
zonecfg:small-zone> verify
zonecfg:small-zone> commit
zonecfg:small-zone> exit

Come prima, l’unica differenza è l’argv -b nel comando create. Una zona senza inhinerit packages occupa però molto di più, nel mio caso 3giga, diciamo 2/3 dello spazio occupato dal vostro sistema solaris base.

Solaris crea in /etc/zones dei profili xml per ogni zona. Prendiamo la zonaditest2:

# cat /etc/zones/zonaditest2.xml
< ?xml version=”1.0″ encoding=”UTF-8″?>
< !DOCTYPE zone PUBLIC “-//Sun Microsystems Inc//DTD Zones//EN” “file:///usr/share/lib/xml/dtd/zonecfg.dtd.1″>

< zone name=”zonaditest2″ zonepath=”/export/zonaditest2″ autoboot=”true”>
< network address=”192.168.1.102″ physical=”hme0″/>
< /zone>

Abbastanza semplice. Il resto nella prossima parte.

Tags: , , , ,

Solaris ha un sistema particolare di Raid software, sicuro e raffinato. Potrebbe essere configurabile via SMC (Solaris Management Console) ma a mano è più facile e si fa prima.

Ovviamente valgono le regole base di tutti i raid: 2 dischi uguali e partizioni identiche. A differenza di Linux è necessario su Solaris lasciare una slice (tipicamente da 300/400 mb) per le informazioni relative al SVM Replica. Supponiamo quindi che il nostro disco sia così configurato:

slice 0 root
slice 1 swap
slice 3 var
slice 4 Kernel crash dump
slice 7 SVM Replica

Copiamo la tabella delle partizioni dal primo disco (c0t0d0) al secondo disco (c1t0d0)

# prtvtoc /dev/rdsk/c0t0d0s2 | fmthard -s – /dev/rdsk/c1t0d0s2

Ora dobbiamo creare il database per la replica, uno sul primo disco e uno sul secondo.

# metadb -a -f -c 2 c0t0d0s7
# metadb -a -c 2 c1t0d0s7

Una considerazione: il raid su Solaris non è mai un raid 1 puro, ma un raid 0+1, quindi è necessario prima attivsare un concat su ogni slice e poi fare il raid 1 delle partizioni in raid 0.

# metainit -f d10 1 1 c0t0d0s0
d10: Concat/Stripe is setup
# metainit -f d11 1 1 c0t0d0s1
d11: Concat/Stripe is setup
# metainit -f d13 1 1 c0t0d0s3
d13: Concat/Stripe is setup

Per il primo disco, e ora per il secondo:

# metainit -f d20 1 1 c1t0d0s0
d20: Concat/Stripe is setup
# metainit -f d21 1 1 c1t0d0s1
d21: Concat/Stripe is setup
# metainit -f d23 1 1 c1t0d0s3
d23: Concat/Stripe is setup

Adesso sempre con il comando metainit inizializziamo il raid 1 inserendo nel mirror solo le varie slice in raid 0 del primo disco:

# metainit d0 -m d10
d0: Mirror is setup
# metainit d1 -m d11
d1: Mirror is setup
# metainit d3 -m d13
d3: Mirror is setup

Utilizzamo il comando metaroot per specificare che il boot va fatto dal raid, mirror d0:

# metaroot d0

Ora dobbiamo modificare il file /etc/vfstab per fare in modoche il sistema monti le partizioni dal mirror e non singolarmente dal disco. Essenzialmente va modificato il device da montare, che non deve più essere il disco ma la posizione mirror del raid:

/dev/md/dsk/d1     –                             –          swap   –     no     -
/dev/md/dsk/d0     /dev/md/rdsk/d0     /          ufs     1     no     logging
/dev/md/dsk/d3     /dev/md/rdsk/d3     /var     ufs     1     no     logging

E’ arrivato il momento atteso. Fate il riavvio del vostro sistema. Incrociate le dita e sperate bene! Una volta fatto il riavvio non vi resta altro da fare che attaccare i raid 0 del secondo disco. Sempre con il comando metainit, come prima, fare:

#metattach d0 d20
#metattach d1 d21

#metattach d3 d23

Adesso il vostro sistema inizierà a mirrorare i dischi. Utilizzate il comando metastat per controllare lo stato del mirroring, in questo modo:

metastat d0

Dovreste ottenere un output simile a questo:

-bash-3.00# metastat d0
d0: Mirror
Submirror 0: d10
State: Okay
Submirror 1: d20
State: Okay
Pass: 1
Read option: roundrobin (default)
Write option: parallel (default)
Size: 14339072 blocks (6.8 GB)
d10: Submirror of d0
State: Okay
Size: 14339072 blocks (6.8 GB)
Stripe 0:
Device     Start Block  Dbase        State Reloc Hot Spare
c0t0d0s0          0     No            Okay   Yes

d20: Submirror of d0
State: Okay
Size: 14339072 blocks (6.8 GB)
Stripe 0:
Device     Start Block  Dbase        State Reloc Hot Spare
c1t0d0s0          0     No            Okay   Yes

Probabilmente voi leggerete Mirroring XX% nello stato del secondo Submirror.

Per ultimo, attivate, la slice di dump per i kernel crash:

# dumpadm -d /dev/dsk/c0t0d0s4

Fine.

Mi raccomando, leggetevi il capitolo Volume Management del Sun Administration Book. E cercate di non fare danni. I dati sono vostri. Un bel backup prima di iniziare.

Tags: , , , , ,