jeremm

Jérémy MURIEL ( jeremy [at] jeremm [dot] fr )

Sep 042012
 

Une nouvelle version est sortie. Correction de bug, optimisation de performance
Réf : https://www.varnish-cache.org/releases/varnish-cache-3.0.3

2 commandes ont été ajouté au CLI :
backend.list -> voir la liste des backends et leur état

varnish> backend.list
200
Backend name                   Refs   Admin      Probe
default(127.0.0.1,,82)         2      probe      Healthy 5/5

backend.set_health -> forcer l’état d’un backend, par exemple avec le backend ‘default’ :
– désactiver le backend :

varnish> backend.set_health default sick

– remettre le backend en vérification d’état (probe)

varnish> backend.set_health default auto

– forcer le backend en ligne sans vérification d’état (probe)

varnish> backend.set_health default healthy
Juil 272012
 

Si varnish est bien configuré, il envoie l’IP du client dans le paramètre HTTP X-Forwarded-For.

Pour le voir dans les logs apache2, il faut modifier le LogFormat utilisé et remplacer %h par %{X-Forwarded-For}i :

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined

Si vous avez du https ou d’autre accès au apache2 sans varnish, vous ne verrez pas l’IP client. Pour cela on peut avoir 2 LogFormats différents en fonction de l’IP source de la requête :

LogFormat "%v:%p %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined_direct
 
SetEnvIf Remote_Addr '^127.0.0.' varnish
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined env=varnish
CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined_direct env=!varnish
Juin 252012
 

Le multiplexage SSH consiste à créer une connexion MASTER et passer les connexions suivantes (dite SLAVE) par la connexion MASTER.
L’avantage est que les connexions SLAVE ne rouvrent pas une autre négociation de connexion, et se font donc beaucoup plus vite.

Pour utiliser le multiplexage SSH, il faut utiliser un socket

  • Création de la connexion MASTER :
ssh -MS socket-ssh user@host
  • Si besoin, création de la connexion MASTER en background :
ssh -NMS socket-ssh user@host &

ou

ssh -NnfMS socket-ssh user@host
  • Connexion slave :
ssh -S socket-ssh user@host
  • Fermer la connexion MASTER si background :
kill <le PID>

ou

ssh -O exit -S socket-ssh user@host
 Posted by at 13 h 42 min  Tagged with:
Mai 112012
 
#!/bin/bash
# Nom du lv a backup
lv='var_lib_mysql'
 
# Connect mysql
mysql='/usr/bin/mysql -uroot -p'
 
# Chemin
chem='/mnt/snapshot'
backup='/var/backup'
rapport='/tmp/rapport_backup.txt'
log='/var/log/backup.log'
 
# Size
snapshot_size='30G'
 
# Bin
rsync='/usr/bin/rsync'
cut='/usr/bin/cut'
grep='/bin/grep'
awk='/usr/bin/awk'
lvs='/sbin/lvs'
vgs='/sbin/vgs'
lvdisplay='/sbin/lvdisplay'
lvcreate='/sbin/lvcreate'
lvremove='/sbin/lvremove'
mount='/bin/mount'
umount='/bin/umount'
rm='/bin/rm'
df='/bin/df'
 
# DATE
TODAY=$(date '+%Y.%m.%d')
DELETE=$(date -d now-1days '+%Y.%m.%d')
 
function quit {
	# Send rapport if error
	if [ -s /tmp/rapport_backup.txt ]; then
	        /usr/bin/mail -s "Erreur de backup $DATE" user@test.fr < /tmp/rapport_backup.txt
	        $rm /tmp/rapport_backup.txt
		exit 1
	fi
	$rm /tmp/rapport_backup.txt
	exit 0
}
 
echo "Debut des verifs et suppression des anciens backups : `date +%Y.%m.%d-%Hh%M`" >> $log
 
## Suppression rapport 
if [ -f $rapport ]; then
        $rm $rapport
fi
 
## Verifications paquet 
if ! dpkg -l rsync |grep ^ii >/dev/null ; then 
        apt-get install rsync --force-yes &> /dev/null
        if ! dpkg -l rsync |grep ^ii >/dev/null ; then
                echo "Erreur : Installation paquet rsync !!!!" >> $rapport
		quit
        fi
fi
 
# Verif lv existe
if ! $lvdisplay | $grep 'LV Name' | $cut -d/ -f4 | $grep $lv &> /dev/null ; then
	echo "Erreur : LV $lv n'existe pas" >> $rapport
	quit
fi
 
# Verif si chem existe
if [ ! -d $chem ] ; then
	/bin/mkdir $chem
fi
if [ ! -d $chem ] ; then
	echo "Erreur : Impossible de créer $chem" >> $rapport
	quit
fi
 
# Verif si backup existe
if [ ! -d $backup ] ; then
	/bin/mkdir $backup
fi
if [ ! -d $backup ] ; then
	echo "Erreur : Impossible de créer $backup" >> $rapport
	quit
fi
 
# Verif freespace for snap
VG=$($lvs | $grep $lv | $awk '{print $2}' | uniq )
VG_free=$($vgs | $grep $VG | $awk '{print $7}' | $cut -d'G' -f1 | $cut -d'g' -f1 | $cut -d',' -f1)
if [ $(echo $snapshot_size | $cut -d'G' -f1 | $cut -d'g' -f1 | $cut -d',' -f1) -ge $VG_free ] ; then
	echo "Erreur : Pas assez de place pour créer le snaphot" >> $rapport
	quit
fi
 
# Verif si snap existe
if $lvs | $grep $VG | $grep lvmsnap &> /dev/null ; then
	echo "Erreur : LV lvmsnap existe" >> $rapport
	quit
fi
 
# Verif si chem déjà monté
if $mount | $grep $chem &> /dev/null ; then
	echo "Erreur : $chem déjà monté">> $rapport
        quit
fi
 
# Delete old backup
if [ -d $backup/$DELETE ] ; then
	$rm -r $backup/$DELETE
fi
if [ -d $backup/$DELETE ] ; then
	echo "Erreur : Impossible de supprimer $backup/$DELETE" >> $rapport
	quit
fi
 
# Chemin lv mapper
LVmapper=$(echo $lv | sed 's/-/--/' )
 
# Compare freespace backup > usedspace source (if source mount)
if $mount | $grep $LVmapper &> /dev/null ; then
	LVmount=$($mount | $grep $LVmapper | $awk '{print $3}')
	if [ $($df -P $backup | $grep '/' | $awk '{print $4}') -lt $($df -P $LVmount | $grep '/' | $awk '{print $3}') ] ; then
		echo "Erreur : Espace restant sur la destination du backup non suffisant" >> $rapport
		quit
	fi
fi
 
 
# Backup
	## Log time 
        echo "Debut du backup : `date +%Y.%m.%d-%Hh%M`" >> $log
 
	# Chemin dev lv
	LVS=$($lvdisplay | $grep 'LV Name' | $grep $lv | $awk '{print $3}')
 
	# Stop replication
	$mysql -e"stop slave;"
	if ! $mysql -e"show slave status\G" | $grep "Slave_SQL_Running" | $grep "No" &> /dev/null ; then
		echo "Erreur : La réplication ne s'arrête pas avant le snaphost" >> $rapport
                quit
        fi
	# Create snap
	$lvcreate -L$snapshot_size -s -n lvmsnap $LVS
 
	# Start replication
	$mysql -e"start slave;"
	if ! $mysql -e"show slave status\G" | $grep "Slave_SQL_Running" | $grep "Yes" &> /dev/null ; then
                echo "Waring : La réplication ne démarre pas après le snapshot" >> $rapport
        fi
	SNAP=$($lvdisplay | $grep 'LV Name' | $grep lvmsnap | $awk '{print $3}')
	if [ ! $SNAP ] ; then
		echo "Erreur : Impossible de créer le snaphost"  >> $rapport
		quit
	fi
 
	$mount $SNAP $chem
 
	# Copy
	$rsync -a $chem/ $backup/$TODAY/ >> $rapport
 
	$umount $chem
 
	# Check snapshot used
	if [ $($lvs | $grep lvmsnap | $awk '{print $6}') = 100.00 ] ; then
		echo "Erreur : Snapshot plein à la fin du backup" >> $rapport
		$rm -rf $backup/$TODAY
		$lvremove -f $SNAP
		quit
	fi
	if [ $($df $backup/$TODAY | $grep '/' | $awk '{print $3}') -le 0 ] ; then
		echo "Erreur : Destination du backup plein après la copie" >> $rapport
                $rm -rf $backup/$TODAY
		$lvremove -f $SNAP
		quit
        fi
	$lvremove -f $SNAP
 
	## Log time 
        echo "Fin du backup : `date +%Y.%m.%d-%Hh%M`" >> $log
 
quit
Avr 192012
 

Créez ce script et lancez le régulièrement avec un cron :

#!/bin/bash
 
USER=root
PASS=XXXXXX
TIME=120
mysql=/usr/bin/mysql
grep=/bin/grep
mysqladmin=/usr/bin/mysqladmin
 
## KILL SLEEP > $TIME
for requete in $($mysql -u$USER -p$PASS INFORMATION_SCHEMA -B -e'select id from PROCESSLIST where Command like "Sleep" and TIME >= "'$TIME'"'| $grep -v id); do 
       $mysqladmin -u$USER -p$PASS kill $requete 
done
 
## KILL SELECT > $TIME
for requete in $($mysql -u$USER -p$PASS INFORMATION_SCHEMA -B -e'select id from PROCESSLIST where INFO like "select%" and TIME >= "'$TIME'"'| $grep -v id); do 
       $mysqladmin -u$USER -p$PASS kill $requete 
done