Qemu fsfreeze hook

Tratto da https://kb.kurgan.org/PVE

Uso di Qemu-agent

Abilitando l’agent nella configurazione della VM, e installando l’agent dentro la VM, è possibile gestire alcune funzioni di comunicazione fra host e guest. Una delle funzioni più comode è quella del freeze del file system nel momento in cui viene fatto uno snapshot (per esempio per i backup) per avere dei backup il più possibile congruenti. Per il file system, il semplice fatto di avere l’agente installato e abilitato è sufficiente. Per un database, tuttavia, è opportuno configurare uno script apposta.

Il pacchetto Debian da installare nel guest si chiama qemu-guest-agent

Qemu-agent e Mysql su guest Debian

Per fare interagire Mysql (o Mariadb) con qemu-agent occorre:

  • Installare il pacchetto dell’agent
  • Modificare il file di init /etc/init.d/qemu-guest-agent aggiungendo il parametro “-F” nella variabile DAEMON_ARGS, in queso modo: DAEMON_ARGS="-F"

  • Riavviare qemu-guest-agent
  • Creare la directory /etc/qemu

  • Creare la directory /etc/qemu/fsfreeze-hook.d

  • Creare lo script /etc/qemu/fsfreeze-hook, contenente quanto segue:

    #!/bin/bash
    
    # This script is executed when a guest agent receives fsfreeze-freeze and
    # fsfreeze-thaw command, if it is specified in --fsfreeze-hook (-F)
    # option of qemu-ga or placed in default path (/etc/qemu/fsfreeze-hook).
    # When the agent receives fsfreeze-freeze request, this script is issued with
    # "freeze" argument before the filesystem is frozen. And for fsfreeze-thaw
    # request, it is issued with "thaw" argument after filesystem is thawed.
    
    LOGFILE=/var/log/qga-fsfreeze-hook.log
    FSFREEZE_D=$(dirname -- "$0")/fsfreeze-hook.d
    
    # Check whether file $1 is a backup or rpm-generated file and should be ignored
    is_ignored_file() {
        case "$1" in
            *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave | *.sample)
                return 0 ;;
        esac
        return 1
    }
    
    # Iterate executables in directory "fsfreeze-hook.d" with the specified args
    [ ! -d "$FSFREEZE_D" ] && exit 0
    for file in "$FSFREEZE_D"/* ; do
        is_ignored_file "$file" && continue
        [ -x "$file" ] || continue
        printf "$(date): execute $file $@\n" >>$LOGFILE
        "$file" "$@" >>$LOGFILE 2>&1
        STATUS=$?
        printf "$(date): $file finished with status=$STATUS\n" >>$LOGFILE
    done
    
    exit 0
    
  • Creare lo script /etc/qemu/fsfreeze-hook.d/mysql-flush.sh contenente quanto segue (nota se occorre o meno inserire il parametro per la password nella variabile MYSQL_OPTS):

    #!/bin/bash
    
    # Flush MySQL tables to the disk before the filesystem is frozen.
    # At the same time, this keeps a read lock in order to avoid write accesses
    # from the other clients until the filesystem is thawed.
    
    MYSQL="/usr/bin/mysql"
    MYSQL_OPTS="-uroot" #"-prootpassword"
    FIFO=/var/run/mysql-flush.fifo
    
    # Check mysql is installed and the server running
    [ -x "$MYSQL" ] && "$MYSQL" $MYSQL_OPTS < /dev/null || exit 0
    
    flush_and_wait() {
        printf "FLUSH TABLES WITH READ LOCK \\G\n"
        trap 'printf "$(date): $0 is killed\n">&2' HUP INT QUIT ALRM TERM
        read < $FIFO
        printf "UNLOCK TABLES \\G\n"
        rm -f $FIFO
    }
    
    case "$1" in
        freeze)
            mkfifo $FIFO || exit 1
            flush_and_wait | "$MYSQL" $MYSQL_OPTS &
            # wait until every block is flushed
            while [ "$(echo 'SHOW STATUS LIKE "Key_blocks_not_flushed"' |\
                     "$MYSQL" $MYSQL_OPTS | tail -1 | cut -f 2)" -gt 0 ]; do
                sleep 1
            done
            # for InnoDB, wait until every log is flushed
            INNODB_STATUS=$(mktemp /tmp/mysql-flush.XXXXXX)
            [ $? -ne 0 ] && exit 2
            trap "rm -f $INNODB_STATUS; exit 1" HUP INT QUIT ALRM TERM
            while :; do
                printf "SHOW ENGINE INNODB STATUS \\G" |\
                    "$MYSQL" $MYSQL_OPTS > $INNODB_STATUS
                LOG_CURRENT=$(grep 'Log sequence number' $INNODB_STATUS |\
                              tr -s ' ' | cut -d' ' -f4)
                LOG_FLUSHED=$(grep 'Log flushed up to' $INNODB_STATUS |\
                              tr -s ' ' | cut -d' ' -f5)
                [ "$LOG_CURRENT" = "$LOG_FLUSHED" ] && break
                sleep 1
            done
            rm -f $INNODB_STATUS
            ;;
    
        thaw)
            [ ! -p $FIFO ] && exit 1
            echo > $FIFO
            ;;
    
        *)
            exit 1
            ;;
    esac
  • Rendere eseguibili da root i due script appena creati

Fatto questo, quando si lancia un backup il DB verrà flushato e lockato in scrittura per un secondo circa, il tempo di creare lo snapshot per il backup, poi verrà immediatamente sbloccato. Il risultato, nel log del guest, è una cosa tipo:

Jul 21 14:24:23 web1 qemu-ga: info: guest-fsfreeze called
Jul 21 14:24:23 web1 qemu-ga: info: executing fsfreeze hook with arg 'freeze'
Jul 21 14:24:23 web1 qemu-ga: info: executing fsfreeze hook with arg 'thaw'

andrea

PROXMOX Tablet Pointer vs vmMouse

Nelle macchine virtuali KVM di proxmox è prevista l’integrazione del mouse tramite la specifica voce nel pannello delle Opzioni.

proxmox options panel

Rimuovendo questa funzione nella console remota VNC si ha un fastidioso effetto di sdoppiamento del mose.

Il vantaggio della rimozione sta in un piccolo miglioramento delle performance, vedrete che una VM Windows a riposo consuma 3/4% di cpu mentre dopo la modifica il consumo scende all’1%.
Con molte macchine Windows virtualizzate la differenza di vede.

Per riallineare i mouse del client e della VM basta installare il driver per il mouse di vmWare qui:
Versione A (testata su windows XP 32 bit)
Versione B (testata su windows 2003 32bit)
Versione C (non testata)

La procedura per estrarre i drivers è la seguente.

Scaricate dal sito di vmWare il driver desiderato DA QUI.

Eseguite il comando per la scompattazione, ed esempio:

VMware-tools-9.4.10-2068191-i386.exe /A /P C:\Extract

Questo genererà una directory in C: che conterrà in VMWARE … Drivers anche i drivers per il mouse.

A questo punto basta togliere il supporto per il tablet da Proxmox e provvedere all’installazione dei drivers.

andrea

Stando alla documentazione la procedura ideale di migrazione di un’installazione Windows verso Proxmox (KVM) prevede l’utilizzo di Clonezilla, purtroppo la ISO di Clonezilla non parte sulle VM già virtualizzate con XEN rendendo necessario un cambio di strategia.

Avviamo una VM m minimale su XEN utilizzando la ISO di sysrescuecd e configurando come disco uno snapshot della vm originale ove sia stato installato preventivamente il mergeide.reg

A questo punto copiamo il partizionamento.
Possiamo usare sfdisk con netcat.

Sulla VM di destinazione digitare:

nc -l -p 1234 | sfdisk /dev/sda
Sulla VM di origine digitare:
sfdisk -d /dev/xvda | nc XX.XX.XX.XX 1234
dove XX.XX.XX.XX è l’indirizzo ip della macchina destinazione.
A questo punto è buona norma riavviare la VM destinazione.
Per copiare il filesystem NTFS procediamo con ntfsclone.
Sulla VM di destinazione digitare:
nc -l -p 1234 | ntfsclone -r -O /dev/sda1 -
Sulla VM di origine digitare:
ntfsclone -s -o - /dev/vxda1 | nc XX.XX.XX.XX 1234
La procedura non esce al termine automaticamente, resta come appesa, solitamente basta attendere un po’ affinchè si svuoti il buffer di copia, con un bmon si nota chiaramente quando la procedura smette di usare la rete. A quel punto si può interrompere con ctrl-c.

Può essere necessario ridimensionare il filesystem sfruttando il maggior spazio concesso dal nuovo hardware quindi qualora il disco della VMsia più grande di quello originario si può procedere così:
Ridimensionare la partizione numero 1 alla massima possibile con sfdisk:

echo ",+," | sfdisk -N1 /dev/sda
Ridimensionamento del filesystem tramite ntfsresize:
ntfsresize -x /dev/sda1
oppure
ntfsresize -s 100G /dev/sda1

Al termine il Windows tendenzialmente non parte.
Si utilizza quindi il CD originale per partire in modalità rescue e si digitano i comandi fixboot e fixmbr.
A questo punto si riavvia e Windows dovrebbe partire.
Nel caso si sia ridimensionata la partizione Windows effettuerà un controllo approfondito del filesystem.
Prima di installare gli eventuali drivers virtio è meglio disinstallare servizi relativi a Xen, VMWARE, etc che potrebbero entrare in conflitto con il nuovo sistema di virtualizzazione.

Test di velocità link Internet xDSL da console Linux

Spesso è utile valutare la velocità e la latenza di un link ad internet di un server Linux al quale non si ha accesso diretto tramite un desktop remoto. Tramite questo tool è possibile utilizzare l’infrastruttura geografica di Speedtest.net ed ottenere una valutazione oggettivamente valida.

# wget https://github.com/sivel/speedtest-cli/raw/master/speedtest.py --no-check-certificate
# chmod a+rx speedtest_cli.py
# ./speedtest_cli.py

Lo script in python si collega al nodo più prossimo ed effettua un test di upload, uno di download e riporta anche la latenza in millisecondi.

root@farm ~ # ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Hetzner Online AG (XX.XX.XX.XX)...
Selecting best server based on ping...
Hosted by Vodafone DE (Frankfurt) [100.73 km]: 6.358 ms
Testing download speed........................................
Download: 87.87 Mbit/s Testing upload speed..................................................
Upload: 66.08 Mbit/s

E’ possibile condividere il test aggiungendo –share al comando e si ottiene questo:

Speedtest CLI linux

Andrea Gagliardi – netlite.it

PROXMOX tips venet e /usr/portage

Tips per la personalizzazione di contenitori (CT) PROXMOX

Mount automatico di /usr/portage

Utilizzando Gentoo come distribuzione Linux all’interno dei contenitori OpenVZ può essere utile condividere tra i contenitori la /usr/portage/ in modo da poter sincronizzarla tramite la macchina host e ridurre drasticamente l’occupazione di spazio disco.
Per ottenere questo è possibile far svolgere queste operazioni ad ogni boot della VM creando o modificando tramite shell ed editor di testo lo script {VMID}.mount nella stessa directory dove è presente il file {VMID}.conf.
Spostiamoci quindi nella directory:

 cd /etc/pve/nodes/$(hostname -s)/openvz/ 

E creiamo (o modifichiamo) il file:

 vim {VMID}.mount 

Inserendo queste righe di codice:

#!/bin/bash
. /etc/vz/vz.conf
. ${VE_CONFFILE}
SRC=/var/lib/vz/portage
DST=/usr/portage
if [ ! -e ${VE_ROOT}${DST} ]; then
        mkdir -p ${VE_ROOT}${DST};
fi
mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}

Lo script è molto comprensibile e non contiene alcun riferimento alla singola macchina virtuale per cui è possibile copiarlo per ogni macchina Gentoo ospitata.
Al termine è necessario cambiare i diritti di esecuzione:

 chmod 700 {VMID}.mount 

Nel caso, ad esempio, di volere mantenere lo storage ed il sistema su supporto diversi per questioni di spazio o performance può essere utile aggiungere allo script il mount anche di questi mountpoint:

#!/bin/bash
. /etc/vz/vz.conf
. ${VE_CONFFILE}
SRC=/var/lib/vz/portage
DST=/usr/portage
if [ ! -e ${VE_ROOT}${DST} ]; then
        mkdir -p ${VE_ROOT}${DST};
fi
mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}
SRC=/storage/${VEID}/home
DST=/home
if [ ! -e ${VE_ROOT}${DST} ]; then
       mkdir -p ${VE_ROOT}${DST};
fi
mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}

Qusto permette di avere la home di ogni contenitore su di uno storage separato.
Utilizzo questo sistema, ad esempio, per avere lo storage su di un filesystem ZFS con compressione realtime attiva.

Utilizzo delle interfaccie veth al posto di venet

Può essere necessario utilizzare caratteristiche di rete che le interfaccie venet non forniscono (ad esempio ARP) QUI.
Seguendo quindi la guida QUI, dopo aver configurato tramite l’interfaccia web di PROXMOX la nuova scheda di rete questa risulta correttamente aggiunta al bridge di rete ma la VM può risultare isolata.

#!/bin/bash
. /etc/vz/vz.conf
. ${VE_CONFFILE}
SRC=/var/lib/vz/portage
DST=/usr/portage
if [ ! -e ${VE_ROOT}${DST} ]; then
        mkdir -p ${VE_ROOT}${DST};
fi
mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}
SRC=/storage/${VEID}/home
DST=/home
if [ ! -e ${VE_ROOT}${DST} ]; then
       mkdir -p ${VE_ROOT}${DST};
fi
mount -n -t simfs ${SRC} ${VE_ROOT}${DST} -o ${SRC}
IP="XX.XX.XX.XX"
/sbin/ip route del $IP dev vmbr0 2&gt;/dev/null
/sbin/ip route add $IP dev vmbr0 2&gt;/dev/null

Alla fine dello script si nota la rimozione e l’aggiunta di una rotta verso il bridge che ospita la VM con l’indirizzo XX.XX.XX.XX.
Lo script purtroppo contiene una configurazione specifica per cui è necessario modificarlo per utilizzarlo per altre VM.

Esecuzione comandi all’interno di un Contenitore (CT) OpenVZ

Per eseguire comandi in un contenitore OpenVZ è possibile utilizzare il comando:

# vzctl exec 103 /etc/init.d/sshd status
openssh-daemon is stopped
# vzctl exec 103 /etc/init.d/sshd start
Starting sshd: [  OK  ]

Andrea Gagliardi – netlite.it

Emerge spesso la necessità di clonare una macchina Windows esistente su hardware fisico, per utilizzarla poi come macchina virtuale su Debian PROXMOX.

Qui di seguito indicherò la procedura da noi adottata per clonare un Windows 2003 Server on the fly utilizzando CLONEZILLA.

On the fly intendo senza alcuna necessità di creare immagini su dischi esterni, ma direttamente sul disco remoto virtuale precedentemente configurato su PROXMOX.

Operazioni Preliminari:

  1.  Installare sulla macchina windows esistente mergeide.reg , permette di abilitare i driver standard IDE su macchine del tipo winxp/win2003, il file è scaricabile dal seguente link mergeide.
  2. Scaricare la iso di CloneZilla e realizzare un cdrom/DVD.
  3. Preparare utilizzando l’interfaccia PROXMOX una macchina VM definita TARGET definendo un disco di dimensione >= al disco origine presente sul server Windows 2003 (con almeno 1Gb in eccesso rispetto all’originale).
  4. Assicurarsi di aver caricato sullo Storage PROXMOX la iso virtio-win.iso per l’installazione dei driver necessari alla macchina Windows una volta clonata (rete, disco) e la iso precedentemente scaricata di CloneZilla.

A questo punto è possibile procedere come descritto di seguito.

Inserire il cd di clonezilla nel lettore della macchina fisica da clonare che chiameremo SOURCE. Riavviare la macchina e se server configurare il bios per fare il boot da lettore cdrom.

Da interfaccia CloneZilla presente sulla macchina SOURCE selezionare l’opzione “disk_to_remote_disk” (copia disco da rete).

018

 

Procedere oltre e scegliere

se presente di configurare la rete tramite dhcp o manualmente (static). Nel nostro caso essendo Windows 2003 un dhcp server abbiamo scelto static inserendo l’ip a mano.

019

Passo successivo selezionare il disco da copiare come SOURCE.

 

0201

A questo punto dopo alcuni altri passi di semplice comprensione la macchina source sarà pronta

per il trasferimento del disco via rete alla macchina TARGET.

022

Macchina TARGET (precedentemente configurata tramite interfaccia PROXMOX)

Selezionare tramite interfaccia PROXMOX il boot della macchina TARGET da iso di clonezilla. Premere start e iniziare la configurazione da interfaccia Clonezilla

Entrare in modalità shell di ConeZilla.

021

Eseguire i seguenti comandi nell’ordine indicato :

  1. sudo su
  2. fdisk /dev/sda (assicurarsi che il disco della macchina TARGET sia sda o simile) , uscire da fdisk digitando il comando ‘w’.

Sempre da shell di CloneZilla Eseguire

  1. ocs-live-netcfg
  2. ocs-onthefly -s IPSOURCE -t sda (IPSOURCE = indirizzo ip macchina source)

A questo punto inizierà la copia del disco.

Apparirà una finestra che indica il tempo stimato e le partizioni da copiare (copiare anche la partizione di boot di windows).

024

Una volta finito il processo, basterà toglire da proxmox il boot da iso di clonezilla ed avviare la macchina clonata con Start.

Una volta avviata sarà, come indicato nei preliminari, necessario installare i driver di rete virt0 o intel e1000 (consigliata in questo ultimo caso l’installazione direttamente

usando i driver scaricati dal sito Intel).

Sarà necessario riattivare la licenza di Windows 2003 server e inserire o verificare i parametri di rete della macchina TARGET.

La macchina source potrà essere spenta dopo aver verificato il corretto funzionamento della macchina TARGET.

PROXMOX calcolo cpu units

Con Proxmox è possibile assegnare tempo macchina garantito alle VM tramite l’assegnazione di CPU UNITS.

Tramite il comando

# vzcpucheck
Current CPU utilization: 4000
Power of the node: 3191600

E’ possibile stabilire la potenza del nodo.

Quindi per assegnare l’1% della potenza ad una VM occorre fare questo calcolo:

3191600 / 100 * 1 = 31916

Allo stesso modo per assegnare il 5% della potenza ad una VM occorre fare questo calcolo:

3191600 / 100 * 5 = 159580

Da quello che abbiamo potuto verificare per i contenitori openvz la modifica è istantanea per le vm KVM occorre spegnerle e riaccenderle.

andrea gagliardi – netlite.it

Installando un sistema Linux Server, tipo Proxmox (Debian), è possibile monitorare lo stato di funzionamento del controller RAID PERC H700 alias LSI MegaRAID.

Seguendo le indicazioni sul sito hwraid.le-vert.net

E’ possibile aggiungere in /etc/apt/sources.list il repository

deb http://hwraid.le-vert.net/debian wheezy main

ed aggiungere la chiave:

wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | apt-key add

ad un successivo apt-get update verranno resi disponibili alcuni tools

apt-get install megaclisas-status megacli

è possibile invocare direttamente megaclisas-status

# megaclisas-status
-- Controller informations --
-- ID | Model
c0 | PERC H700 Integrated
-- Arrays informations --
-- ID | Type | Size | Status | InProgress
c0u0 | RAID10 | 2454G | Optimal | None
-- Disks informations
-- ID | Model | Status
c0u0p0 | SEAGATE ST900MM0006 LS08S0N08XHB | Online, Spun Up
c0u0p1 | SEAGATE ST900MM0006 LS08S0N08896 | Online, Spun Up
c0u0p0 | SEAGATE ST900MM0006 LS08S0N08X1K | Online, Spun Up
c0u0p1 | SEAGATE ST900MM0006 LS08S0N08875 | Online, Spun Up
c0u0p0 | SEAGATE ST900MM0006 LS08S0N07EBR | Online, Spun Up
c0u0p1 | SEAGATE ST900MM0006 LS08S0N084P0 | Online, Spun Up

oppure fare affidamento sul demone già attivo dopo l’installazione e far rilevare la presenza in /var/run del file megaclisas-statusd.status

Andrea – netlite.it

Documentazione completa LINK

Per l’installazione e l’utilizzo del DRBD è preferibile che vi sia almeno una scheda di rete dedicata alla sincronizzazione configurata in /etc/network/interfaces su ogni nodo.

# network interface settings
auto lo
iface lo inet loopback
iface eth0 inet manual
auto eth1
iface eth1 inet static
        address  10.0.7.106
        netmask  255.255.240.0
auto vmbr0
iface vmbr0 inet static
        address  192.168.7.106
        netmask  255.255.240.0
        gateway  192.168.2.1
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

Tuning dello strato di rete per DRBD da inserire in rc.local

echo 30000 &gt; /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 50000 &gt; /proc/sys/net/core/netdev_max_backlog

Nel caso di DRBD su 2 x 10Gb SFP+ in bonding la configurazione ha dato i risultati sperati e le prestazioni sono state di circa 400Mbytes/sec in TCP e 800Mbytes/sec in UDP, l’innalzamento dell’MTU e del TXQUEUELEN hanno migliorato sensibilmente le performances

ifconfig eth3 mtu 9000
ifconfig eth4 mtu 9000
ifconfig bond0 mtu 9000
ifconfig eth3 txqueuelen 5000
ifconfig eth4 txqueuelen 5000
ifconfig bond0 txqueuelen 5000

Si passa all’installazione dei tools necessari

apt-get install drbd8-utils

Sulla porzione di disco (o sul pool di dischi) da destinare al DRBD (ipotizziamo sdb) si crea una partizione di tipo 8e (Linux LVM)

Si modificano i files di configurazione /etc/drbd.d/global_common.conf

global { usage-count no; }
common { syncer { rate 30M; verify-alg md5; } }

e /etc/drbd.d/r0.res

resource r0 {
        protocol C;
        startup {
                wfc-timeout  0;     # non-zero wfc-timeout can be dangerous (http://forum.proxmox.com/threads/3465-Is-it-safe-to-use-wfc-timeout-in-DRBD-configuration)
                degr-wfc-timeout 60;
                become-primary-on both;
        }
        net {
                cram-hmac-alg sha1;
                shared-secret "my-secret";
                allow-two-primaries;
                after-sb-0pri discard-zero-changes;
                after-sb-1pri discard-secondary;
                after-sb-2pri disconnect;
                #data-integrity-alg crc32c;     # has to be enabled only for test and disabled for production use (check man drbd.conf, section "NOTES ON DATA INTEGRITY")
        }
        on proxmox-105 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 10.0.7.105:7788;
                meta-disk internal;
        }
        on proxmox-106 {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 10.0.7.106:7788;
                meta-disk internal;
        }
}

Si fa partire il servizio drbd con

/etc/init.d/drbd start

e si creano i metadata

drbdadm create-md r0

dopodichè si attivano i device su entrambi i nodi

drbdadm up r0

E’ possibile visualizzare lo stato del drbd con

pve1:~# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-90)
GIT-hash: dd7985327f146f33b86d4bff5ca8c94234ce840e build by root@oahu, 2009-09-10 15:18:39
 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2096348

Su di un solo nodo digitare

drbdadm -- --overwrite-data-of-peer primary r0

per avviare la sincronizzazione e riabbiare il drbd su entrambi i nodi per attivare la risorsa in modalità attivo/attivo con

/etc/init.d/drbd stop
/etc/init.d/drbd start

Tuning per performance DRBD 8.3 LINK

resource resource {
  net {
    max-buffers 8000;
    max-epoch-size 8000;
    ...
  }
  ...
}
resource resource {
  net {
    sndbuf-size 0;
    ...
  }
  ...
}
resource resource {
  syncer {
    al-extents 3389;
    ...
  }
  ...
}
resource resource {
  disk {
    no-disk-barrier;
    no-disk-flushes;
    ...
  }
  ...
}

A questo punto è possibile configurare LVM editando /etc/lvm/lvm.conf

# By default we accept every block device:
filter = [ "r|/dev/sdb1|", "r|/dev/disk/|", "r|/dev/block/|", "a/.*/" ]

per eliminare sdb1 dall’autoscan
e si crea un device con

 pvcreate /dev/drbd0
 vgcreate [VG_NAME] /dev/drbd0

Tramite l’interfaccia web è possibile aggiungere il disco LVM/DRBD

Documentazione completa LINK

Dopo l’installazione e l’aggiornamento dei nodi su uno di essi si crea il cluster

pvecm create [CLUSTER_NAME]

Per aggiungere nodi al cluster sul nodo da aggiungere si digita

pve add [CLUSTER_IP_ADDRES]

Per verificare lo stato del cluster

pvecm status
pvecm nodes

Per rimuovere un nodo

pvecm delnode [NODE_NAME]

Una volta instaurato il cluster con due nodi non è possibile spegnere un nodo senza perdere la possibilità di editare i files di configurazione o di effettuare backup o creare vm in quanto non viene raggiunto il quorum necessario che si ottiene con configurazioni tipiche di 3 nodi.
E possibile abbassare temporaneamente o definitivamente il quorum a 2 o aggiungere un quorumdisk.

Documentazione completa LINK

Per configurare il fencing occorre modificare il file /etc/pve/cluster.conf

cp /etc/pve/cluster.conf /etc/pve/cluster.conf.new

Ed aumentare di +1 il valore di config_version=”XX”


Nella sezione cman aggiungere expected_votes=”1″


Situazione che è possibile forzare anche manualmente con il comando

pvecm expected 1

E dopo


E’ preferibile usare ipaddr=”192.168.1.2″ al posto di hostname=”nodeA”

Poi modificare clusternode


Per applicare le modifiche nell’interfaccia web di gestione datacenter nel tab HA è possibile Attivare le modifiche, queste verranno applicate all’intero cluster.
Eventuali errori di configurazione vengono segnalati in fase di applicazione.

Documentazione completa LINK
Per attivare il fencing bisogna aggiungere ogni nodo al dencing domain

Si modifica /etc/default/redhat-cluster-pve affinchè contenga

FENCE_JOIN="yes"

E si lancia il comando su ogni nodo

fence_tool join

Per verificare lo stato

fence_tool ls

Per installare un quorum disk iSCSI presente su di un NAS

apt-get install tgt
vi /etc/iscsi/iscsid.conf  # change node.startup to automatic
/etc/init.d/open-iscsi restart

Selezionare il target

iscsiadm --mode discovery --type sendtargets --portal [iSCSI_IP]
iscsiadm -m node -T iqn.[BLAHBLAH] -p [iSCSI_IP] -l

Create una partizione primaria con fdisk e create il quorumdisk

mkqdisk -c /dev/sdc1 -l proxmox1_qdisk

Per inserirlo nella configurazione si procede come sopra

cp /etc/pve/cluster.conf /etc/pve/cluster.conf.new

si incrementa di +1 la config_version si rimuove two_node=”1″ e si aggiunge la definizione quorumd


Sempre dall’interfaccia web nel tab HA si applica la modifica, si verifica lo stato con

pvecm s

e si applicano le modifiche con

  /etc/init.d/rgmanager stop  # This will restart any VMs that are HA enabled onto the other node.
  /etc/init.d/cman reload     # This will activate the qdisk

Assicurarsi che rgmanager sia partito o avviarlo e verificare che su ogni nodo clustat riporti qualcosa del tipo

Cluster Status for proxmox1 @ Thu Jun 28 12:23:10 2012
Member Status: Quorate
 Member Name                                         ID   Status
 ------ ----                                         ---- ------
 proxmox1a                                               1 Online, Local, rgmanager
 proxmox1b                                               2 Online, rgmanager
 /dev/block/8:33                                         0 Online, Quorum Disk

Configurazione finale


Installando un sistema Linux Server, tipo Proxmox (Debian), è possibile monitorare lo stato di funzionamento del controller RAID hardware HP Smart Array P410i.

Smart Array P410i

In /etc/apt/sources.list.d è possibile creare un file hp.list contenente:

deb http://downloads.linux.hp.com/SDR/repo/mcp/ wheezy/current non-free

LIKN SITO HP

curl http://downloads.linux.hp.com/SDR/hpPublicKey1024.pub | apt-key add -
curl http://downloads.linux.hp.com/SDR/hpPublicKey2048.pub | apt-key add -
curl http://downloads.linux.hp.com/SDR/repo/mcp/GPG-KEY-mcp | apt-key add -
[code]
ad un successivo apt-get update verranno resi disponibili alcuni tools di HP tipo hpacucli
[code]
apt-get install hpacucli

è possibile invocare direttamente hpacucli

# hpacucli controller slot=0 ld all show
Smart Array P410i in Slot 0 (Embedded)
 array A
  logicaldrive 1 (558.7 GB, RAID 1+0, OK)
 array B
  logicaldrive 2 (931.5 GB, RAID 1, OK)
# hpacucli controller all show config detail
Smart Array P420i in Slot 0 (Embedded)
   Bus Interface: PCI
   Slot: 0
   Serial Number: 5001438023BB5E90
   Cache Serial Number: PBKUA0BRH3U0X9
   RAID 6 (ADG) Status: Disabled
   Controller Status: OK
   Hardware Revision: B
   Firmware Version: 3.42
   Rebuild Priority: Medium
   Expand Priority: Medium
   Surface Scan Delay: 3 secs
   Surface Scan Mode: Idle
   Queue Depth: Automatic
   Monitor and Performance Delay: 60  min
   Elevator Sort: Enabled
   Degraded Performance Optimization: Disabled
   Inconsistency Repair Policy: Disabled
   Wait for Cache Room: Disabled
   Surface Analysis Inconsistency Notification: Disabled
   Post Prompt Timeout: 15 secs
   Cache Board Present: True
   Cache Status: OK
   Cache Ratio: 25% Read / 75% Write
   Drive Write Cache: Enabled
   Total Cache Size: 512 MB
   Total Cache Memory Available: 304 MB
   No-Battery Write Cache: Enabled
   Cache Backup Power Source: Capacitors
   Battery/Capacitor Count: 1
   Battery/Capacitor Status: OK
   SATA NCQ Supported: True
   Spare Activation Mode: Activate on drive failure
   Controller Temperature (C): 64
   Cache Module Temperature (C): 32
   Capacitor Temperature  (C): 28
.............
.............

per attivare la write cache:

# hpacucli controller slot=0 modify dwc=enable

oppure utilizzare il plugin nagios

# wget 'http://exchange.nagios.org/components/com_mtree/attachment.php?link_id=674&amp;cf_id=24' -O check_hparray
# ./check_hparray -s 0
RAID OK - (Smart Array P410i in Slot 0 (Embedded) array A logicaldrive 1 (558.7 GB, RAID 1+0, OK) array B logicaldrive 2 (931.5 GB, RAID 1, OK))

Maggiori info qui QUI

Andrea - netlite.it