Archives de catégorie : Non classé

Installation de pfsense

Pour isoler le réseau local, j’ai installé pfSense pour jouer le role de firewall (plus d’info ici).

Avant de commencer l’installation, il faut créer 2 interfaces réseau. Une sera considéré comme WAN (accès exterieur), l’autre LAN (accès local).

Sur proxmox, j’ai crée 2 bridges Linux.

vmbr1 sera le WAN et vmbr0 sera le lan.

Installation

Créer une VM dans proxmox et uploader l’iso de pfsense dans local.

Démarrer la VM, il reste à suivre les indications de la procédure d’installation.

En choisissant les options par défaut lors l’installation, j’arrive à ca:

On peut voir que les interfaces réseau ne sont pas  configurées (em0 et em1). Je vais les configurer avant de pouvoir lancer l’interface WEB.

Il faut définir les adresses IP manuellement avec l’option 2 et se laisser guider.

Si tout va bien, cela va donner quelques choses comme ca:

une fois que c’est fait, on peut accéder à l’interface d’administration de pfsense via l’url http://192.168.59.5 (adresse IP de l’interface LAN)

Il ne reste plus qu’a se connecter avec les comptes par défaut.

Nous arrivons alors sur une assistant de configuration.

Sur cet écran, on peut choisir le nom de son domaine (test.lan dans mon cas). On peut aussi définir le nom du serveur DNS primaire qui servira à résoudre les noms. J’ai mis le DNS de google à titre d’exemple mais on peut aussi mettre celui de son FAI.

Utilisation d’un serveur ntp. J’ai laissé les valeurs par défaut.

configuration de l’interface WAN. J’ai laissé sur DHCP, mais on pourrait très bien définir une IP statique.

Réglage de l’interface LAN. Ici pas de choix possible, c’est forcément, une IP statique.

Pour plus de sécurité, on peut changer le mot de passe de l’interface.

Et voila, pfSense est installé.

Il ne reste plus qu’a configurer quelques services pour ce soit pleinement fonctionnel.

Promox: déplacement d’un conteneur LXC

il n’y a pas de bouton pour déplacer un conteneur LXC. Heureusement, il est possible de la faire via une opération de backup / restore.

Commençons par faire un backup du conteneur:

Une fois le backup réalisé. On peut cliquer dessus et choisir le bouton restore:

Une fenêtre s’ouvre, et on peut choisir l’emplacement de destination du conteneur:

Et voila. En quelques clics, il est possible de changer de disque un conteneur.

Créer un template de container avec proxmox

Pour pouvoir utiliser plusieurs conteneurs avec proxmox basé sur le même modèle, il peut être intéressant de créer un template. Par exemple, pour avoir un agent zabbix installer par défaut et configurer pour envoyer les données sur le serveur zabbix central.

Dans la version actuelle, je n’ai pas trouvé d’option permettant de faire cela via l’interface. Mais en se basant sur différents forums, il est possible de réaliser cette opération facilement.

Voici les différentes étapes:

  1. télécharger un container de base (debian ou autre)
  2. créer un container qui va servir de template et le démarrer
  3. entrer dans le conteneur crée avec la commande
  4. faire les opérations nécessaires (création de user / installation d’applications)
  5. faire du ménage dans le conteneur si besoin (apt-get clean, resolv.conf)
  6. supprimer les interfaces réseaux avec la commande
  7. supprimer le hostname de la machine
  8. arrêter le conteneur
  9. faire un backup de la vm depuis l’interface (format gzip)
  10. déplacer le fichier depuis l’emplacement de backup vers ../templates/cache/name-version.tar.gz

Il est maintenant possible de se servir du template name-version pour créer des conteneurs.

Installation de promox

Actuellement la version courante est la 5.1.3.

Pour lancer l’installation, il faut mettre l’iso sur une clé USB et démarrer le serveur.

Il faut définir la partie réseau qui permettra d’accèder à l’interace WEB par la suite.

Une fois l’installation terminée, il ne reste qu’a rebooter le serveur.

Ce qui nous amène sur ce prompt:

Comme indiqué, nous pouvons passé par un navigateur pour continuer la configuration.

Nas maison avec proxmox

Ayant choisi de refaire mon nas, je me suis tourné vers proxmox pour repartir de zéro.

voici un mini cahier des charges de ce que je souhaite faire:

  • cloisonner les applications (fonctionnalités) que j’utilise sur le nas
  • gérer un réseau privé avec serveur DHCP + dns
  • partage de fichier sur le réseau local

Le premier point sera fait avec proxmox qui propose un système de virtualisation (VM + conteneur léger)

le second sera fait avec pfsense qui permettra de gérer la partie réseau

Dans les prochains articles, nous allons voir comment tout cela prends forme.

Surveillance de la temperature des disques avec Zabbix

Je cherchais un moyen de suivre la température de mes disques durs  et je suis tombé sur cet article.

http://virtuallyhyper.com/2013/10/monitor-smart-attributes-zabbix/

Dans l’ensemble, il est encore à jour. J’ai juste rencontré un souci avec le script perl qui doit renvoyer les informations sur les disques.

Le programme ne renvoyait pas une liste au format json.
J’ai dû modifier la ligne suivante:

par

Ce qui me permet de voir l’évolution de la température des disques dans Zabbix (Je le faisais déjà sous cacti et je trouvais que ça manquait sou Zabbix).

temp

L’article source permet aussi de surveiller le nombre de secteur ré alloué et lever une alerte préventive lorsque le disque commence à défaillir.

 

Mon disque est rempli de snapshots

En analysant l’espace disque d’un serveur, je me suis aperçu que sur notre nexus (repository manager) nous avions un historique assez impressionnant de snapshot. En effet, nous avions tous les builds depuis près de 4 ans à raison d’un build par jour. Cela occupait pas moins de 700Go.

Continuer la lecture

Redis Cluster en java

En commençant à regarder le mode cluster de redis à travers une image docker déjà construire https://github.com/Grokzen/docker-redis-cluster, je me suis aperçu que ce n’est pas si transparent. En effaçant, si on essaye d’ajouter une valeur mais que la clé ne correspond au bon noeud, redis ne renvoi pas OK mais plutôt l’indication de ou insérer la donnée:

Je me suis demandé comment gérer cela dans un programme Java. Est-ce le driver qui va faire le travail ou il faut le gérer à la main.

Si on utilise le driver standard de Jedis, voici ce qu’on obtiens:

Heureusement, Jedis propose une classe pour résoudre ce problème (Je n’ai rien trouvé coté JRedis).

 

Le driver est même capable de récupérer les autres noeuds. Dans l’exemple j’ai indiqué un seul noeud, mais avec le code suivant :

on voit bien que le driver a pu récupérer les autres noeuds:

les sources sont ici

Quelques liens utiles:
commandes redis cluster

– À la découverte de Redis Cluster 3.0

 

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.

 

Partage de session avec redis, tomcat et docker

Maintenant que nous avons 2 serveurs tomcat, ça serait bien de pouvoir les arrêter un par un (pour effectuer une livraison par exemples) sans que cela n’ait d’impact pour l’utilisateur. Je pense notamment à la gestion de la session utilisateur. Je vais donc essayer de stocker (sérialiser) la session dans une base nosql. Vu qu’il faut juste stocker un couple clé/valeur, c’est beaucoup moins lourd qu’une base de données.

Préparation du code

Pour commencer, je vais reprendre le travail de James Coleman sur ce sujet https://github.com/jcoleman/tomcat-redis-session-manager. Tout d’abord comme je ne suis pas très à l’aise avec gradle (pour le moment), j’ai commencé par créer un pom.xml pour gérer les dépendances et plus tard créer une image docker. Comme expliqué dans le préambule du repository, la détection de la modification de la session pose des soucis si on modifie directement l’objet après avoir fait un getAttribute()

J’ai donc décidé (pour l’exemple) de forcer l’enregistrement de la session à la fin de chaque requête. Il faudra vérifier avec un test de charge que ça ne pose pas de soucis pour une mise en production. Pour utiliser cette libraire, il faut la builder et l’ajouter au répertoire lib de tomcat (ça ne fonctionne pas si la librairie est embarqué dans le projet. Pour faciliter un peu les choses, maven va créer une librairie qui contiendra ses propres dépendances:

Ensuite, il suffit juste au niveau du projet de modifier le fichier META-INF/context.xml pour ajouter une valve et un manager:

On peut personnaliser la machine et le port de redis ainsi que la durée d’une session (ici j’ai réglé à 3 min). Maintenant que tout est configuré, voyons comment intégré cela dans docker.

Préparation des images

J’ai créé un fichier Dockerfile dans le projet tomcat-redis-session-manager pour créer une nouvelle image se basant sur jolokia/tomcat-6.0 et ajoutant notre librairie dans le répertoire lib.

D’ailleurs, il semble que docker est des soucis avec des répertoires symboliques target. Si je remplace la dernière ligne par

j’obtiens l’erreur suivante (/opt/tomcat étant un lien symbolique vers opt/apache-tomcat-${TOMCAT_VERSION})

J’ai ensuite modifier le fichier Dockerfile du projet session-webapp pour se baser sur l’image qu’on vient de créer:

Il ne reste plus qu’à lancer toutes les images pour voir le résultat

Lancement des images

Je commence par lancer redis:

avec la même commande que dans le dernier article, je récupère son ip (à mettre dans le context.xml) Je lance ensuite un redis-cli pour tester la connectivité

Mon serveur redis est donc opérationnel. Je lance maintenant 2 serveurs tomcat et haproxy. Je me connecte maintenant sur le site, je me loggue et fais des refresh sur la page index.jsp. Cela nous donne dans logs:

Je suis bien resté sur le même serveur à chaque fois et j’ai bien récupéré ma donnée product. Si ne n’avais pas fait la modification dans RedisSessionManager, la valeur de product serait toujours de 1. J’ai ensuite arrêté le serveur tomcat et fais des refresh sur index.jsp. Cela nous donne:

J’ai donc bien récupérer ma session et la valeur de product. Pour voir le contenu des clés de redis, on peut utiliser la commande (a ne pas faire en production):

Voila comment tester facilement la persistance de session avec redis et docker.

Les sources sont ici: