Après configuration d’un cluster à trois nœuds Rabbitmq avec Haproxy en répartiteur de charge j’ai rencontré un problème de déconnexion des clients.

Après de longue recherche j’ai pu constaté que le problème provenait d’ HAProxy .

Les clients RabbitMQ utilises des connections persistantes aux broker qui ne partent jamais en timeout. Donc si votre client RabbitMQ reste inactif pendant un certain temps HAProxy décidera de fermer la connexion.

Vous pouvez également augmenter le temps de connexion tcp sur votre OS type « Debian Like » pour accroitre le temps de connexion tcp idle.

1
2
$ cat /proc/sys/net/ipv4/tcp_keepalive_time
7200

Voici un exemple de configuration pour de la répartition de charge TCP pour RabbitMQ ou l’on gardera les connexions actives 3H :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
global
        log 127.0.0.1   local1
        maxconn 4096
        #chroot /usr/share/haproxy
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet
defaults
        log     global
        mode    tcp
        option  tcplog
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5000
        timeout client 50000
        timeout server 50000
listen  stats :1936
        mode http
        stats enable
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri /
listen aqmp_front :5672
        mode            tcp
        balance         roundrobin
        timeout client  3h
        timeout server  3h
        option          clitcpka
        server          aqmp-1 rabbitmq1.domain:5672  check inter 5s rise 2 fall 3
        server          aqmp-2 rabbitmq2.domain:5672  check inter 5s rise 2 fall 3

Plus d’info sur le sujet: https://www.rabbitmq.com/reliability.html

Leave a reply

Dans le cadre d’un déploiement d’un cluster de trois serveur ESXI 5.5 diskless après configuration des 3 serveur et ajout dans un vcenter.

Après un reboot la partition de COREDUMP avait disparu.

Concrètement je n’ai pas bien saisie pourquoi sachant que la partition de LOG étant toujours présente sur la SD card.

Bref le Vcenter m’indiquant que sur l’un des trois serveurs que je rencontre un problème  » No vmkcore disk partition is available « .

Connecter vous en SSH au serveur posant problème :

~ # ssh root@{HOST}
~ # esxcli system coredump partition get

Puis identifier et verifier que la partion de coredump est toujours présente :

~ # fdisk /dev/disks/mpx.vmhba33\:C0\:T0\:L1 -l

Puis On réactive celle-ci sur l’ESXI, attention:

~ # esxcli system coredump partition set --partition="mpx.vmhba33:C0:T0:L1:1"
~ # esxcli system coredump partition set --enable=true

Leave a reply

vmware-ubuntu-lvm2

Dans cet Article je vais expliquer comment étendre un volume groupe LVM a partir d’un ajout de disque dur virtuel dans Vsphere et ainsi pouvoir étendre un volume du groupe lvm.

Ajout du disque dans Vsphere :

Clic droit sur la VM que l'on souhaite modifier lvm2lvm3lvm4lvm5lvm6lvm7lvm8

Scan des disques de la machine de sorte à ne pas avoir à reboot l’OS client:

for i in $(ls /sys/class/scsi_host/ | awk -F 'host' '{print $2}');
 do
 echo "- - -" > /sys/class/scsi_host/host$i/scan
 done

Partitionnement du nouveau disque :

fdisk /dev/sdXX
 Commande (m pour l'aide) : n
 Partition type:
 p primary (0 primary, 0 extended, 4 free)
 e extended
 Select (default p): p
 Numéro de partition (1-4, 1 par défaut) :
 Utilisation de la valeur 1 par défaut
 Premier secteur (2048-209715199, 2048 par défaut) :
 Utilisation de la valeur 2048 par défaut
 Dernier secteur, +secteurs ou +taille{K,M,G} (2048-209715199, 209715199 par défaut) :
 Utilisation de la valeur 209715199 par défaut
Commande (m pour l'aide) : w
 La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
 Synchronisation des disques.

Ajout du nouveau disque au volume groupe :

vgextend "Volume groupe" /dev/sdXX

Extension d’un partition de 100G:

e2fsck -f /dev/mapper/"lvm volume" # si le volume est démonté
lvextend -L+100G /dev/vgX/xxx
resize2fs /dev/mapper/xxx

Et le tour est joué 😉

Merci à Laurent Besson pour la boucle « for » qui permet le scan de nouveau disque sans reboot.

Leave a reply

Bonjour à tous,

Je vous présente cette vidéo trouvé ce jour sur YouTube. Celle-ci nous rappel les fondamentaux de l’histoire du logiciel libre par son fondateur/président Richard Stallman qui est pour moi, la référence en matière de position sur la communauté du libre.

Enjoy !!

Leave a reply

nginx

Présentation de nginx:

Nginx [engine x] est un logiciel libre de serveur Web ou serveur HTTP ainsi qu’un Proxy_inverse écrit par Igor Sysoev, dont le développement a débuté en 2002 pour les besoins d’un site russe à très fort trafic. Une partie de la documentation a été traduite du russe vers l’anglais. Ses sources sont disponibles sous une licence BSD

php_logo

Présentation de php-fpm:

PHP-FPM (FastCGI Process Manager) est une interface SAPI permettant la communication entre un serveur Web et PHP, basée sur le protocole FastCGI et écrite par Andrei Nigmatulin. Ses avantages face au protocole FastCGI sont les suivants:

  • Gestion avancée des processus avec stop/start doux (graceful) ;
  • Possibilité de démarrer des processus avec différents uid/gid/chroot/environment, écoutant sur différents ports et utilisant différents php.ini (remplace le safe_mode) ;
  • Journalisation stdout et stderr ;
  • Redémarrage d’urgence en cas de destruction accidentelle du cache opcode ;
  • Support de l’upload acccéléré ;
  • « slowlog » – journalisation des scripts (pas juste leurs noms, mais leur backtrace PHP également, utilisant ptrace ou équivalent pour lire le processus distant) qui s’éxecutent de manière anormalement lente ;
  • fastcgi_finish_request() – fonction spéciale pour terminer la requête et vider toutes les données tout en continuant d’exécuter une tâche consommatrice (conversion vidéo par exemple) ;
  • Naissance de processus fils dynamic/static ;
  • Informations sur la SAPI (similaire à mod_status d’Apache) ;
  • Fichier de configuration basé sur php.ini

Pour installer tout ça, nous allons tout d’abord installer les repository de DOTDEB. Je vous invite fortement à aller faire un tour sur leur blog.

On crée un nouveau fichier source list :

vi /etc/apt/sources.list.d/dotdeb.list

On y ajoute les adresses des repo :

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

On recupère la clé gpg via curl puis on l’importe avec apt-key

curl http://www.dotdeb.org/dotdeb.gpg | apt-key add -

On update nos list de repo :

apt-get update

Puis on installe enfin le nécessaire :

apt-get install nginx php5 php5-fpm

Voilà qui est fait sur la partie installation, maintenant passons aux choses sérieuses.
La configuration de php-fpm est très simple, du moins pour une configuration basique, car vous aurez aussi la possibilité de déployer cette brique sur un autre environnement distinct et le faire communiquer par un socket TCP.

Dans l’exemple de configuration que je vais présenter nous allons utiliser un socket unix, car tous nos services vont tourner sur la même machine.

Configuration PHP-FPM

On édite un fichier de configuration de pool pour notre site :

vi /etc/php5/fpm/pool.d/site.conf

On modifie la ligne concernant le type d’écoute :

;listen = 127.0.0.1:9000
ou :
listen = /var/run/php5-fpm.sock

Par contre, si vous souhaitez configurer plusieurs pool pour vraiment fermer l’environnement de chaque site, je vous conseilles d’utiliser le Template suivant et de l’adapter à votre convenance (sachant que désormais vous pouvez allouer différentes ressources à vos sites ou même les partager entre diverse machines).
Voici le Template :

vi /etc/php5/fpm/pool.d/template.conf

 [template]
 listen = /var/run/php5-fpm.sock
 ;listen = x.x.x.x:9000
 user = template
 group = template
 request_slowlog_timeout = 5s
 slowlog = /var/log/php-fpm/slowlog-template.log
 ;listen.allowed_clients = x.x.x.x
 pm = dynamic
 pm.max_children = 10
 pm.start_servers = 3
 pm.min_spare_servers = 2
 pm.max_spare_servers = 4
 pm.max_requests = 400
 listen.backlog = -1
 pm.status_path = /status
 request_terminate_timeout = 120s
 rlimit_files = 131072
 rlimit_core = unlimited
 catch_workers_output = yes
 env[HOSTNAME] = $HOSTNAME
 env[TMP] = /tmp
 env[TMPDIR] = /tmp
 env[TEMP] = /tmp

Vous n’avez plus qu’à adapter ce template en fonction de vos besoins et redémarrer php5-fpm :

service php5-fpm restart

Configuration de nginx

Pour cela nous allons configurer le hosts NGINX pour notre site et éditer le fichier ci-dessous :

vi /etc/nginx/sites-available/site.conf

server {
        listen 80 default_server;
        server_name site.local;
        root /var/www/site.local/;

        index index.php index.html;

        access_log /var/log/nginx/site.local-access_log;
        error_log /var/log/nginx/site.local-error_log;

        location / {
                try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_index index.php;
                fastcgi_pass php5-fpm-sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}

Puis créer un lien symbolique vers sites-enabled :

ln -s /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf

Puis redémarrer NGINX et le tour est joué :

service nginx restart

Leave a reply

Pré-requis : librbd-dev ceph kvm-qemu make gcc

Si l’ajout des fonctionnalités rbd ne sont pas prises en compte sur le package qemu-kvm de  debian wheezy il vous faut donc compiler QEMU avec les options suivantes :

cd /usr/src/
mkdir -p sources/qemu-kvm
cd sources/qemu-kvm
apt-get source qemu-kvm
apt-get build-dep qemu-kvm
cd qemu-kvm-1.1.2+dfsg/
vim debian/optional-features

Ajouter dans le fichier précédemment ouvert « –enabled-rbd »

Puis nous allons créer notre package:

dpkg-buildpackage -rfakeroot -b

Si vous obtenez cette erreur lors de la compilation de votre package  » ERROR: User requested feature usb-redir » et que vous ne souhaitez pas rediriger vos flux USB à travers le réseau, commentez les options  –enabled-usdredir dans le fichier de configuration debian/optional-features.

Encore une fois, si vous obtenez cette erreur lors de la compilation :

 "DSO missing from command line"

Ajoutez les options suivante à la variable dans les fichiers Makefile and Makefile.target

LIBS+=-lz -lrt -lm

Donc on finira par installer nos packages de la façon suivante :

dpkg -i qemu-kvm_1.1.2+dfsg-6_amd64.deb qemu-kvm-dbg_1.1.2+dfsg-6_amd64.deb kvm_1.1.2+dfsg-6_amd64.deb

Leave a reply


Voici une des nombreuses façons d’installer un validator pour votre environnement de dev, le tout conforme W3C « non sans rire 😉 ».

Les fonctionnalités HTML5 ne sont qu’expérimentales.
Aller c’est parti:

# apt-get update && apt-get install w3c-markup-validator libwebservice-validator-html-w3c-perl libtest-html-w3c-perl libxml-xpath-perl w3-dtd-mathml libhtml-format-perl libxml2-utils tidy git
# vi /etc/w3c/validator.conf
 Allow Private IPs = yes

Configuration Apache2:

# vi /etc/apache2/sites-avalable/validator.domain.com
<VirtualHost $IP>
 ServerName w3c.example.com
 DocumentRoot /usr/local/validator/htdocs/
 ScriptAlias /check /usr/lib/cgi-bin/check
 <Directory /usr/local/validator/htdocs/>
 Options FollowSymLinks 
 AllowOverride All
 </Directory>
</VirtualHost>

Activer la configuration de Apache2

# a2ensite validator.domain.com

Reload de la conf apache2

# service apache2 reload

Maintenant nous allons passer a la parti HTML5 avec le validator.nu

# aptitude install openjdk-6-jdk openjdk-6-jre-headless mercurial subversion python ant git
# mkdir /usr/local/html5-validator
# cd /usr/local/html5-validator
# export JAVA_HOME=/usr/lib/jvm/java-6-openjdk-amd64/
# hg clone https://bitbucket.org/validator/build build
# python build/build.py all

On refait un 2eme build obligatoire pour le bon fonctionnement :

# python build/build.py all

Décommenter les lignes suivantes dans le fichier ci-dessous

# vim /etc/w3c/validator.conf

HTML5 = http://localhost:8888/html5/HTML

On reload le tout :

# service apache2 restart

Leave a reply

Problématique liée à une installation convirture sur une Debian 7.1.Lors de l’éxécution du script qui va déployer TurboGears2 et de nombreux autres egg python il se peut que vous ayez cette erreur : RuntimeWarning: Unable to load template engine entry point: ‘json = turbojson.jsonsupport:JsonSupport

Voici les actions à mener :

:~# easy_install pysqlite
:~# easy_install mysql-python
:~# pip install distribute --upgrade
:~# ~{INSTALL DIR}/convirt-ctl start
:~# cat ~{INSTALL DIR}/paster.log
AttributeError: 'Label' object has no attribute 'JUMP_IF_FALSE'
:~# ~{INSTALL DIR}/convirt-ctl stop
:~# cd tg2env/
:~# source bin/activate
(tg2env)$ easy_install -U PEAK-Rules
(tg2env)$ easy_install -U DecoratorTools
(tg2env)$ deactivate

Puis vous n’avez plus qu’à relancer Convirture.

Leave a reply

 

Lors de la mise à jours de mon Hypervisor KVM je me suis vite rendu compte que mes machines virtuelles sur le même réseau  ne pouvaient plus discuter entre elles.

Le problème provenait de notre cher Shorewall qui a besoin d’une nouvelle directive dans son fichier de zone.

J’ai donc ajouté la directive ROUTEBACK sur la zone impactée.

#ZONE INTERFACE BROADCAST OPTIONS
net eth0 detect dhcp,tcpflags,nosmurfs,routefilter,logmartians vms br0 detect dhcp,tcpflags,nosmurfs,routefilter,logmartians,routeback

La directive routeback, d’après le manuel de Shorewall, signifie que celui-ci va ajouter les règles autorisant le trafic sur cette même interface.

J’espère que je vous aurais aidé 😉

Leave a reply

Squid

  • Squid

Un serveur Squid est un serveur mandataire (proxy) et un mandataire inverse capable d’utiliser les protocolesFTPHTTPGopher, et HTTPS. Contrairement aux serveurs proxy classiques, un serveur Squid gère toutes les requêtes en un seul processus d’entrée/sortie, non bloquant.

Pour en savoir plus rendez vous sur http://fr.wikipedia.org/wiki/Proxy.

  • Installation

~# apt-get install squid3 squidgard
  • Configuration Squid3

vi /etc/squid3/squid.conf

# Port a définir pour le proxy transparent
http_port 3128

# Attention si vous modifiez les valeurs de la ligne suivante : lancez squid3 -f /etc/squid3/squid.conf -z pour reconstruire le cache !
cache_dir ufs /var/spool/squid3 1024 256 256

# Les journaux
cache_access_log /var/log/squid3/access.log common
cache_log /var/log/squid3/cache.log
cache_store_log /var/log/squid3/store.log
cache_swap_log /var/log/squid3/cache_swap.log
emulate_httpd_log on

# Configuration minimum recommandée
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 563 # https, snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

# Définition des réseaux
acl mon_reseaueth src 192.168.2.0/255.255.255.0

# Les accès ou non
http_access allow mon_reseaueth
http_access deny all

# La redirection sur squidguard pour le contrôle
redirect_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
redirect_children 10

# On renseigne le nom de machine qui fait serveur
visible_hostname debian-proxy
dns_nameservers monserveurdns1 monserveurdns2
  •  Configuration Squidguard

vi /etc/squid3/squidGuard.conf

Copiez la configuration dans le nouveau fichier. Attention, à l’heure actuelle les configuration de SquidGuard seront dans /etc/squid/squidGuard.conf !! Vous pouvez toutefois supprimer le répertoire et mettre les configurations de Squidguard dans le même répertoire.

dbhome /var/lib/squidguard/db
logdir /var/log/squid3/
src users {
 ip 192.168.2.0/24
 }
dest porn {
 domainlist blacklists/porn/domains
 urllist blacklists/porn/urls
}
acl {
 users {
 pass !in-addr !porn any
 redirect http://www.google.fr
 }
 default {
 pass none
 redirect http://www.google.fr
 }
}

Une fois les éléments concernant votre réseaux mis en place dans les fichiers de configuration, vous devez désormais définir les blacklists de SquidGuard. Pour cela nous allons télécharger une archive de contribution pour filtrer le contenu indésirable.

cd /var/lib/squidguard/db/
wget ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/blacklists.tar.gz
tar xzf blacklists.tar.gz
chown -R proxy:proxy blacklists
ln -s /etc/squid/squidGuard.conf /etc/squid3/squidGuard.conf
su proxy
squidGuard -d -c /etc/squid3/squidGuard.conf -C all

Votre shell devrait vous retourner ceci ! :

2013-01-08 13:43:18 [13343] New setting: dbhome: /var/lib/squidguard/db
2013-01-08 13:43:18 [13343] New setting: logdir: /var/log/squid3/
2013-01-08 13:43:18 [13343] init domainlist /var/lib/squidguard/db/blacklists/porn/domains
2013-01-08 13:43:45 [13343] create new dbfile /var/lib/squidguard/db/blacklists/porn/domains.db
2013-01-08 13:43:50 [13343] init urllist /var/lib/squidguard/db/blacklists/porn/urls
2013-01-08 13:43:51 [13343] create new dbfile /var/lib/squidguard/db/blacklists/porn/urls.db
2013-01-08 13:43:51 [13343] squidGuard 1.4 started (1357648998.468)
2013-01-08 13:43:51 [13343] db update done
2013-01-08 13:43:51 [13343] squidGuard stopped (1357649031.582)

Désormais vous n’avez plus qu’à redémarrer Squid

~# /etc/init.d/squid3 restart

Voilà dans un premier temps vous avez mis en place un filtrage sur le contenu pornographique ! Bien évidement vous devez suivre la même rigueur pour toute autre politique de filtrage de contenu. Vous trouverez toutes les règles de filtrage dans : /var/lib/squidguard/db/blacklists

Respectez bien la nomenclature du fichier de configuration de SquidGard. Puis relancez la création des DB avec la commande :

squidGuard -d -c /etc/squid3/squidGuard.conf -C all

Voici la documentation de SquidGuard.

Leave a reply