Archives de catégorie : Linux

Zabbix Agent

Voyons maintenant comment configurer un agent Zabbix pour monitorer un nouveau serveur.

Il suffit d’installer le package zabbix-agent

et de faire un peu de configuration

On redemarre l’agent

Il faut ensuite l’ajouter dans la configuration de zabbix:

Configuration -> hosts -> New hosts.

Dans cette ecran, il ne faut pas oublier d’ajouter un template:

template

 

Au bout de quelques instants, vous devriez voir dans les logs (comme précédemment):

Et voila, il ne reste plus qu’a ajouter le monitoring sur les autres serveurs.

Gestion de session avec un cluster redis – suite et fin

suite à une remarque de Remy, j’ai modifié le test gatling pour bien vérifier qu’on récupère la même session lorsque le slave a pris la place du master.

Pour cela, dans le test, je fais une boucle sur la page index qui indique le nom de la personne si elle est logguée. J’utilise les fonctions de gatling de check pour vérifier que l’information est bien présente.

Ce qui donne bien:

gatling

 

error

Pendant le delai d’indisponibilité, on a des erreurs de type 500 et ensuite on repart bien sur la bonne session avec les bonnes données.

L’erreur 500 peut être traitée dans la valve pour gérer un peu ce type d’erreur et rediriger l’utilisateur vers une page adaptée mais ce n’est pas l’objet de cette article.

Gestion de session avec un cluster redis – suite

Maintenant que nous avons une application à tester, nous pouvons utiliser gatling pour simuler de la charge et voir comment se comporte l’application en cas de chute d’un noeud master.

Le script se contente de se logguer, et de rafraîchir 3 fois la page index. Il va injecter 20 users par seconde pendant 5 minutes:

 

J’ai arrêté un noeud master avec la commande supervisor :

Ce qui nous donne:

gatling-session

On peut voir qu’il y a des erreurs pendant près de 10s, le temps que le slave prenne le pas sur le master.

Il faudrait peut être modifier le session-manager pour tenir de ce problème. A suivre…

Gestion de session avec un cluster redis

Voyons comment mettre en pratique les deux articles précédents (ici et ici).

Les choses n’étant pas encore très évolués du cote de spring-data-redis pour le mode cluster, je suis revenu sur la version de session-webapp utilisant une valve tomcat.

Les seules modifications apportées sont la suppression de l’image redis (je vais utiliser la version cluster) et l’utilisation d’une nouvelle image docker de base pour les serveurs Tomcat.

En effet, j’ai modifié la valve pour utiliser la nouvelle classe JedisCluster à la place de Jedis.
Mais pour que cela fonctionne, j’ai du utilisé la version 3.0.0-SNAPSHOT de jedis. La version releasée actuelle n’implémente pas les commandes binary par la lecture/ecriture.

J’ai du également modifié l’image docker pour le cluster redis car par default, le cluster est configuré en 127.0.0.1. Mais quand le client java essaye de découvrir la topologie du cluster, il obtient ces ips, et ne peux pas se connecter aux autres noeuds. La modification permet d’établir la connexion sur l’ip du conteneur.

Il ne reste plus qu’à lancer tout ce petit monde:

redis:

tomcat & haproxy

 

Lorsque je crée une session, je la vois bien sur un noeud redis et sur un autre noeud, je vois bien le message de redirection:

 

 

 

Les sources sont ici:
tomcat-session-manager
webapp
docker-redis-cluster

 

Redis Cluster

Voici le résultat de quelques tests réalisé sur le cluster redis (3.0)

Je suis parti cette image docker https://github.com/Grokzen/docker-redis-cluster

Après un inévitable

l’image est prête à être utilisé. Par défaut, cette image va lancer 3 nœuds masters et 3 nœuds slaves (1 par nœud master).

Lançons la commande

On peut voir que les ports 7000 à 7005 sont remontés sur le système hôte. Ce sera plus facile pour interroger redis directement.

En interrogeant redis, il y a bien 6 nœuds qui constituent le cluster (cluster_known_nodes).

La répartition des clés sautent aux yeux quand on essaye d’insérer une valeur

En lisant ce blog, on voit que la clé de répartition, se calcule comme suit:

Dans notre cas, key=toto ce qui donne hash_slots=9548

Si on inspecte le cluster, on obtient

On peut donc voir que notre valeur est contenu entre 5461 et 10922 et donc est géré par le master 63e73580b843d499b665a7385967268528e836e9 soit le l’instance redis sur le port 7001. Ce qui est bien conforme avec l’information fourni par redis.

Que se passe t’il si on arrête un slave:

En relançant la commande

On voit bien l’erreur de connexion à l’instance sur le port 7005 mais cela n’a pas d’incidence sur la santé du cluster.

Que se passe t’il si on arrête un master.

Le cluster voit bien le problème de connexion à l’instance défaillante.
il voit aussi qu’il y a un slave qui n’a pas de master. A la dernière ligne, on voit qu’il y a un problème de cohérence sur le cluster car tous les slots de répartition ne sont pas couverts par le cluster

Mais cela est corrigé quand le slave devient master:

J’ai modifié le programme Java initié dans le précédent article et je mesure à 6s, le temps pour que le cluster soit de nouveaux opérationnels;

Il est peut être possible de jouer sur le paramétrage pour descendre ce temps, mais je n’ai pas encore trouvé comment.

On voit bien ici le problème lorsque que les données ne soit pas répliquées entre les différents masters. Lorsqu’un master est absent, il y a un « petit » laps de temps ou les données ne sont pas connues.

Crawler facile

Il y a quelque temps, j’avais mis de côté cet article http://korben.info/extraire-donnee-pages-web.html. Comme je vais pas mal de crawling, en ce moment je m’y suis intéressé.

Voici déjà la marche à suivre pour installer scrappy sur ubuntu:

Il est maintenant possible de faire fonctionner l’exemple:

 

Ce qui donne

A première vue, ça a l’air plus facile pour crawler qu’avec un script shell surtout si on a besoin de parser la page.

Mettre à jour docker sous ubuntu

Pour faire suite au précédent article, je voulais utiliser la fonctionnalité du link qui modifie le /etc/hosts du conteneur parent pour ajouter le nom et l’ip du conteneur fils. Mais cette fonctionnalité est arrivée avec docker 0.11.

Si vous êtes comme moi sous ubuntu 14.04, mon premier réflmexe a été comme indiqué dans la documentation, d’installer docker à partir d’un des dépôts d’ubuntu:

Or dans ce dépôt la version ne suit pas les différentes releases du projet.

Si vous voulez mettre à jour docker dans une version plus récente (1.0.0 aujourd’hui), voila ce qu’il faut faire:

Ce qui nous donne une version :

On peut donc maintenant vérifier que la fonctionnalité est bien présente:

J’ai lancé le serveur redis et l’ai linké à un conteneur de test. On voit bien que dans le /etc/hosts, l’ip du conteneur redis est ajouté. Dans le prochain article, nous allons donc pouvoir lié la datasource et les serveurs applicatifs sans avoir a connaitre à l’avance l’ip de la datasource.

 

Publier sur un repository distant avec git et une clé ssh

Voici deux articles pour mettre en place une clé ssh avec git.

Pour générer sa clé et la tester:

https://help.github.com/articles/generating-ssh-keys

Pour que la clé soit prise en compte en ligne de commande:

http://matharvard.ca/posts/2011/aug/11/git-push-with-specific-ssh-key/

A bientot

Envoyer des mails facilement avec ubuntu

Un bon tutoriel pour configurer un serveur smtp qui fait du relaying vers un autre serveur smtp (google pour l’exemple).

https://rtcamp.com/tutorials/linux/ubuntu-postfix-gmail-smtp/

Très pratique si on ne veut pas s’embeter avec la configuration d’un postfix. On peut ainsi recevoir facilement des mails depuis la ligne de commande vers une boite gmail.

A bientot