Speedtest Internet da console Linux
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:
Andrea Gagliardi – netlite.it
- Published in Sistemistica, Tips & Tricks
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>/dev/null /sbin/ip route add $IP dev vmbr0 2>/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
- Published in Sistemistica, Tips & Tricks, Virtualizzazione
Cluster Fencing Two Node DRBD PROXMOX
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 > /proc/sys/net/ipv4/tcp_max_syn_backlog echo 50000 > /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
- Published in Sistemistica, Tips & Tricks, Virtualizzazione
PROXMOX RAID Setup
Tips per l’installazione di PROXMOX con RAID software
Al momento del boot da CD è possibile stabilire la dimensione del disco e dello swap, questo è utile nel caso di setup su disci molto grandi o su dischi diversi da quelli che ospiteranno definitivamente il sistema.
linux hdsize=200 maxroot=25 swapsize=8
A questo punto si effettua il setup sul primo dei dischi disponibili, di avvia e si aggiorna con i conseguenti reboot.
Quando il setup è completato si può seguire il precedente articolo “PROXMOX Tips” per poi passare alla migrazione del sistema su un RAID software in standard Linux (mdadm).
Si duplica il partizionamento dei dischi che faranno parte del RAID10
sfdisk -d /dev/sda | sfdisk -f /dev/sdb sfdisk -d /dev/sda | sfdisk -f /dev/sdc sfdisk -d /dev/sda | sfdisk -f /dev/sdd
si setta la tipologia di partizione in fd
sfdisk -c /dev/sdb 1 fd sfdisk -c /dev/sdb 2 fd sfdisk -c /dev/sdc 1 fd sfdisk -c /dev/sdc 2 fd sfdisk -c /dev/sdd 1 fd sfdisk -c /dev/sdd 2 fd
E si creano i device RAID10 senza perdere tempo nella sincronizzazione
mdadm --create --level=1 --raid-devices=4 --chunk=128 --metadata=0.9 /dev/md126 missing /dev/sdb1 /dev/sdc1 /dev/sdd1 --assume-clean mdadm --create --level=10 --raid-devices=4 --chunk=128 /dev/md127 missing /dev/sdb2 /dev/sdc2/dev/sdd2 --assume-clean
Formattiamo /dev/md126, che diventerà la /boot, e copiamo il contenuto di /boo
mkfs.ext3 /dev/md126 -Lboot mkdir /mnt/tmp mount /dev/md126 /mnt/tmp rsync -av /boot /mnt/tmp/ umount /mnt/tmp
Sostituire in /etc/fstab la voce UUID=… con LABEL=boot
LABEL=boot /boot ext3 defaults 0 1
A questo punto tentiamo un reboot.
Appena ripartito il sistema si esegue in sequenza…
echo 'GRUB_DISABLE_LINUX_UUID=true' >> /etc/default/grub echo 'GRUB_PRELOAD_MODULES="raid dmraid"' >> /etc/default/grub echo raid1 >> /etc/modules echo raid1 >> /etc/initramfs-tools/modules grub-install /dev/sda grub-install /dev/sdb grub-install /dev/sdc grub-install /dev/sdd grub-install /dev/md126 update-grub update-initramfs -u
Uniformiamo sda alla configurazione in RAID10 e agganciamola al RAID
sfdisk -c /dev/sda 1 fd mdadm --add /dev/md126 /dev/sda1
Terminata la sincronizzazione si può reboottare.
Ripartita la macchina possiamo sportare il contenitore LVM.
pvcreate /dev/md127 vgextend pve /dev/md127 pvmove /dev/sda2 /dev/md127 vgreduce pve /dev/sda2 pvremove /dev/sda2 sfdisk -c /dev/sda 2 fd mdadm --add /dev/md127 /dev/sda2
Si attende la sincronizzazione e si riavvia la macchina ed il sistema si trova configurato su un sottosistema dischi affidabile e veloce.
- Published in Sistemistica, Tips & Tricks, Virtualizzazione
PROXMOX tips
Tips per la personalizzazione di PROXMOX
Al momento del boot da CD è possibile stabilire la dimensione del disco e dello swap, questo è utile nel caso di setup su disci molto grandi o su dischi diversi da quelli che ospiteranno definitivamente il sistema.
Basta digitare il seguente comando.
linux hdsize=200 maxroot=25 swapsize=8
Pacchetti da installare preliminarmente
apt-get install acpid vim mdadm dbench smartmontools irqbalance iotop tcpdump htop bmon
per la personalizzazione del prompt della bash usiamo questo, basta copiarlo in un file in /etc/bash_completion.d/
echo -ne "\033]0; ${USER}@${HOSTNAME} +${SHLVL} @${SSH_TTY/\/dev\/} - `uptime` \007" declare -x PROMPT_COMMAND="echo -en \"\\033[m\\033[38;5;2m\"\$(( \`sed -n \"s/MemFree:[\\t ]\\+\\([0-9]\\+\\) kB/\\1/p\" /proc/meminfo\`/1024))\"\\033[38;5;22m/\"\$((\`sed -n \"s/MemTotal:[\\t ]\\+\\([0-9]\\+\\) kB/\\1/Ip\" /proc/meminfo\`/1024 ))MB\"\\t\\033[m\\033[38;5;55m\$(< /proc/loadavg)\\033[m\"" declare -x PS1="\\[\\e[m\\n\\e[1;30m\\][\$\$:\$PPID \\j:\\!\\[\\e[1;30m\\]]\\[\\e[0;36m\\] \\T \\d \\[\\e[1;30m\\][\\[\\e[1;34m\\]\\u@\\H\\[\\e[1;30m\\]:\\[\\e[0;37m\\]\${SSH_TTY} \\[\\e[0;32m\\]+\${SHLVL}\\[\\e[1;30m\\]] \\[\\e[1;37m\\]\\w\\[\\e[0;37m\\] \\n(\$SHLVL:\\!)\\\$ "
mentre per il .bashrc
export LS_OPTIONS='--color=auto' eval "`dircolors`" alias ls='ls $LS_OPTIONS' alias ll='ls $LS_OPTIONS -alh' alias ll='ls $LS_OPTIONS -alht' alias l='ls $LS_OPTIONS -l' alias ..='cd ..' alias rm='rm -i' alias cp='cp -i' alias mv='mv -i' alias ports='netstat -tulanp' alias pstree="pstree -G" alias t="tail -f /var/log/messages"
Su di un HP ML310eGen8, cpu Intel(R) Xeon(R) CPU E3-1220 V2 @ 3.10GHz, con quattro dischi SATA in RAID10 otteniamo con pveperf
# pveperf CPU BOGOMIPS: 24745.92 REGEX/SECOND: 1450123 HD SIZE: 19.69 GB (/dev/mapper/pve-root) BUFFERED READS: 262.38 MB/sec AVERAGE SEEK TIME: 7.53 ms FSYNCS/SECOND: 1470.62 DNS EXT: 54.63 ms DNS INT: 62.04 ms (netlite.it)
Ottimizzazione della gestione dell’I/O da inserire in /etc/rc.conf o /etc/rc.local
#!/bin/bash # # rc.local echo 0 > /proc/sys/kernel/hung_task_timeout_secs echo 0 > /proc/sys/vm/swappiness DISKS=$(find /sys/block/ -iname "sd*") for DISK in $DISKS; do echo "Disk $DISK..." echo 0 > $DISK/queue/add_random; echo 0 > $DISK/queue/rq_affinity; #echo cfq > $DISK/queue/scheduler; echo noop > $DISK/queue/scheduler; #cat $DISK/queue/scheduler; done true > /etc/motd if [ -e /etc/lsb-release ] then grep DISTRIB_DESCRIPTION /etc/lsb-release | sed 's/^DISTRIB_DESCRIPTION="\(.*\)"$/\1/' > /etc/motd fi uname -a >> /etc/motd echo >> /etc/motd echo "server : `cat /root/.mdg 2>/dev/null`" >> /etc/motd echo "ip : `cat /etc/network/interfaces | grep "address" | head -n 1 | cut -f 3 -d " "`" >> /etc/motd echo "hostname : `hostname`" >> /etc/motd echo >> /etc/motd /bin/cat /etc/motd > /etc/issue
Scaricherei QUI i drivers più recenti per i sistemi Windows
cd /var/lib/vz/template/iso/ wget http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/virtio-win-0.1-74.iso
Aggiungerei in /etc/default/grub l’elevator più performante ed aggiornerei il grub2
GRUB_CMDLINE_LINUX_DEFAULT="quiet elevator=deadline" update-grub
In alcune migrazioni (Centos 5.X) i drivers virtio non sono presenti nell’initrd quindi il sistema va in crash al momento del boot per la mancanza della root. In seguente comando rigenera l’initrd con i moduli mancanti.
mkinitrd --with virtio_net --with virtio_pci --with virtio_blk -f /boot/initrd-$(uname -r).img $(uname -r)
Dalla versione 3.1 di Proxmox è presente un fastidioso alert presentato ad ogni login, pur comprendendone le ragioni trovo fastidioso che mi venga ricordato ogni volta.
Dopo aver letto l’articolo LINK ho scritto questo comando per evitare che l’alert appaia.
Ad ogni aggiornamento potrebbe essere necessario riapplicarlo o modificarlo leggermente (grazie Federico per la segnalazione).
LINEA=$(cat -n /usr/share/pve-manager/ext4/pvemanagerlib.js | grep "if (data.status !== 'Active') {" | awk '{print $1}') sed -i "${LINEA}s/.*/if (false) {/" /usr/share/pve-manager/ext4/pvemanagerlib.js
A volte può essere utile limitare la velocità di lettura per i backup di proxmox (vzdump) al fine di non saturare eventuali storage condivisi o non sovraccaricare l’hardware locale.
Dopo aver letto l’ articolo LINK riporto questa modifica al file /etc/vzdump.conf che limita a 40Mb/sec la lettura dai dispositivi locali.
bwlimit 40000
Backup differenziali con proxmox (vzdump).
Ho trovato QUESTO interessante articolo.
Quali drivers installare per i diversi sistemi operativi LINK.
In caso i componenti di un Cluster Proxmox si isolino le macchine virtuali continueranno a funzionare correttamente ma dall’interfaccia web non sarà più possibile amministrare i nodi remoti e non sarà possibile creare o eliminare VM.
Considerate di disabilitare l’alta affidabilità (HA) prima di procedere.
Per risolvere il problema è sufficiente eseguire i seguenti comandi su tutti i nodi in sequenza, senza un particolare ordine:
/etc/init.d/pve-cluster restart /etc/init.d/cman restart /etc/init.d/pvedaemon restart /etc/init.d/pvestatd restart /etc/init.d/pve-manager restart /etc/init.d/pve-cluster restart
Questo simula un riavvio dei nodi SENZA riavviare le VM.
Andrea Gagliardi – netlite.it
- Published in Sistemistica, Tips & Tricks, Virtualizzazione