Backuper une base mysql en docker swarm mode

Docker 1.12 est arrivé, et avec lui sans doute une des plus grosses features attendues : le swarm mode directement intégré au Docker engine.

Je me suis donc lancé, comme sans doute nombre de mes pairs, dans une mise en place sur un cas concret : la migration du blog que vous êtes en train de lire 🙂

Et j’avoue que je suis bluffé par la simplicité de mise en place. En quelques heures (et encore parce que je faisais autre chose en même temps), ce blog (un simple WordPress) a été containerizé et rendu accessible en quelque lignes.

Cependant, je suis assez vite tombé sur un os : comment faire pour backuper ma base MySQL, elle-même dans un container service ? Ca a l’air bête, mais ça n’est pas si simple…

Lire la suite ›

Publié dans Docker, mysql, Système

Downtime zibok.org – Quand une mise à jour Ubuntu se passe mal

Avant-hier soir, je me suis enfin décidé à upgrader l’OS du serveur hébergeant ce blog… Et ça s’est vu : 1 heure de downtime !

La mise à jour s’est tout simplement planté au plus mauvais endroit : dans la re-configuration de Grub ! Ainsi, le serveur refusait purement et simplement de booter sur son nouveau kernel… et même de booter tout court.

Vous me direz : « c’est pas grave ! Tu passes en KVM et tu essaies de débugguer comme ça ». Sauf que… je n’ai pas de KVM (je vais y remédier pour l’avenir, mais pour l’instant c’est comme ça). En effet, ce serveur est une Dedibox SC, le seul serveur de la gamme d’online.net qui n’ait pas de KVM (c’est ballot, ma’ame Chombier, hein ?)

Alors, comment fait-on dans ce cas ?

La réponse, je l’ai trouvée sur le Net (merci les moteurs de recherche) sur le site howtogeek.

Pour faire simple, et pour me garder ça sous la main si ça m’arrive encore :

  • Booter sur un système Ubuntu de secours type LiveCD (de la même version que celle de votre serveur)
  • Trouver la liste des partitions de vos disques via :
    • sudo fdisk -l
    • sudo blkid
  • Monter votre partition / quelque part dans l’arborescence (par exemple dans /mnt/root)
    • sudo mount /dev/sdXY /mnt/root   (Où X est la lettre de votre disque et Y le numéro de la partition /)
  • Monter votre partition /boot quelque part dans l’arborescence (par exemple dans /mnt/boot)
    • sudo mount /dev/sdXZ /mnt/boot (Où X est toujours la lettre de votre disque et Z le numéro de la partition /boot)
  • Puis réinstaller grub correctement
    • sudo grub-install –root-directory=/mnt/root /dev/sdX
    • sudo grub-install –boot-directory=/mnt/boot /dev/sdX

Si vous n’avez pas de /boot, utiliser la partition / en lieu et place de /boot

Redémarrer votre serveur, et ça devrait revenir à la normale.

L’occasion ici de rappeler un principe important :

Quelque soit la mise à jour que vous faites, pensez à faire une sauvegarde de vos données importantes avant ! Ca évite les sueurs froides…

Publié dans Ubuntu

Event Driven Architecture : Apache Kafka sur le rivage

Après vous avoir tous convaincus, j’en suis sûr, dans le précédent épisode de cette série, de l’intérêt d’une gestion événementielle de vos processus, je m’en vais vous parler plus en détails du bus que nous utilisons chez mon employeur actuel préféré.

Apache Kafka est un produit à l’origine développé par LinkedIn. Ecrit en Scala, cette plate-forme est capable d’ingurgiter un nombre impressionnant de messages par seconde (potentiellement par millions selon ce benchmark de LinkedIn).

Son architecture est sur le principe assez simple finalement (même si son implémentation n’est évidemment pas aussi triviale).

Lire la suite ›

Publié dans Event driven architecture, PHP

Je suis Charlie… aussi

charlie

Je ne serai pas original, mais je m’en fous. C’est une grosse boule de colère que j’ai dans le bide ce soir.

Alors je veux juste écrire ces quelques lignes, pour témoigner de mon soutien aux familles et aux amis des victimes de cette horreur. Pour crier mon dégoût pour ces personnes qui pensent que l’on peut tuer un journal parce qu’on en a envie.

Je veux aussi rappeler ici que ce massacre n’est pas le fruit d’un complot d’une communauté. Ce sont juste 3 personnes (apparemment) qui ont commis des homicides. Personne d’autre à blâmer que des individus, et non pas une religion.

Je souhaite encore une longue vie à Charlie Hebdo, car c’est en continuant d’exister que l’on pourra montrer que ce n’est pas la peur qui doit régir la pensée des gens, mais bel et bien la déconne, l’impertinence.

Vincent Charlie Zibok Lepot

Publié dans Coup de gueule

Event driven architecture : enjeux et solutions

Comment favoriser la communication et la collaboration de l’ensemble des sous-systèmes d’un SI complexe ? En s’échangeant des messages décrivant des événements par exemple.

Cet article est le premier d’une série sur une vision de l’architecture événementielle et d’une implémentation possible (avec Apache Kafka).

Lire la suite ›

Publié dans Event driven architecture, SOA

PHP tour 2014 : ce que j’en retiens

Les 23 et 24 juin 2014 s’est tenu le PHP Tour 2014 organisé par l’AFUP. Cette année, c’est Lyon qui était la ville hôte de l’événement (après Lille et Nantes).

PHP Tour Lyon 2014

Comme d’habitude, ce genre de rassemblement est l’occasion de profiter des spécialités gastronomiques (aaaaah, cette andouillette… on a été conseillé sur une super adresse de bouchon, si ça intéresse des gens), mais pas seulement ! C’est aussi le moment de prendre le pouls de la communauté PHP-phile, de prendre des idées là où il y en a, et de prendre des nouvelles de vieilles connaissances.

Je n’ai évidemment pas eu l’occasion de participer à l’ensemble des conférences de ces deux jours (ne serait-ce que parce qu’il y en avait 3 en même temps, et que mon option ubiquité n’est toujours pas opérationnelle), mais je retiendrai particulièrement les interventions suivantes.

Lire la suite ›

Publié dans PHP, Symfony2

Transition agile 4 real chez Meetic

Un petit billet cette fois-ci pour faire un peu de pub à des collègues (je deviendrais presque corporate, moi…).

Lors du PHP Tour 2014 (dont je reparlerai dans un autre billet), Thomas Diavet et Nicolas Kalmanovitz ont présenté la transition de Meetic vers l’agilité, les objectifs que nous nous étions fixés, les actions menées, les écueils rencontrés.

Bref, de Scrum à Kanban, en passant par les initiatives devops, du lourd !

Les slides sont dispos sur le slideshare de Thomas en attendant j’espère rapidement la vidéo (puisqu’au PHP tour, eux, les conférences sont enregistrées… pas comme au Symfony Live cette année).

Publié dans Intégration continue, Kanban, Organisation

Retour d’expérience : il était une fois le Continuous Delivery chez Meetic

Les 7 et 8 avril 2014 a eu lieu le Symfony Live 2014, et ce fut pour mon compère Joris Calabrese (@jorisCalabrese) et moi l’occasion de présenter lors d’un lightening talk notre retour d’expérience sur la mise en place du Continuous Delivery chez Meetic (que je remercie ici publiquement de me permettre de payer mes factures chaque mois :))

Les slides de la présentation sont disponibles sur Slideshare pour ceux qui voudrait y jeter un oeil et voir comme on a relevé le défi de fluidifier nos projets (et dans une DSI de 150 personnes, et des équipes produits nombreuses, ça n’a pas été du gâteau, croyez-moi).

http://fr.slideshare.net/jorisCalabrese/continuous-delivery-chez-meetic (Le design est de Joris qui a fait un travail de dingue sur ces slides).

Publié dans Intégration continue, Kanban, Organisation

Hack : Facebook montre à PHP son retard

hackCoup de tonnerre dans le Landerneau de PHP : Facebook, après avoir sorti HipHop pour exécuter PHP en mode compilé, après avoir sorti HHVM et son compilateur à la volée, passe la seconde et propose son fork de PHP avec de nombreuses évolutions par rapport au langage original.

Comme je l’avais déjà indiqué dans un billet précédent, il y avait plus urgent à ajouter dans PHP qu’une API pour les passwords ou les générateurs. Et là, j’avoue avoir l’eau à la bouche.

Hack (car c’est son petit nom si affectueux) nous propose :

  • Un grand coup de balai dans les vieilleries et autres mauvaises pratiques du langage (genre les globals !)
  • Du typage un peu plus fort (pas du luxe)
  • Un peu d’asynchronisme
  • Des génériques (enfin pouvoir avoir des Array<Machin>)
  • Des collections
  • etc.

Bref, sur le papier ça donne vraiment envie, et on peut compter sur Facebook pour fédérer une communauté. Voilà ce que devrait être PHP 6.

En tout cas, j’ai hâte de voir ce qu’on peut en faire. Alors voilà, c’est pas que je m’ennuie avec vous, mais je vais de ce pas monter un HHVM et faire joujou avec.

Des news bientôt !

Publié dans Hack, PHP

LiipDoctrineCache : Utiliser une ferme multi-serveur Memcache

Quand comme moi vous travaillez dans une société qui a besoin de haute-disponibilité (ce qui correspond à la grosse majorité des entreprises dans le web, non ?), vous ne pouvez pas dire :

Mon cache, je le stocke sur un serveur unique qui peut claquer à tout moment.

Du coup, si vous utilisez Memcache, il vous faut au moins 2 serveurs pour répartir vos clés de cache (avec ou sans redondance).

Vous pourriez très bien me rétorquer :

Hey mec, c’est que du cache ! S’il est down, le site continuera de fonctionner.

Sauf que l’on sait tous ce que peut donner un site sans cache, surtout si ce dernier faillit en pleine période de pointe (ce qui est plus que probable connaissant ce sadique de Murphy).

Et si comme moi vous avez adopté le bundle LiipDoctrineCacheBundle, qui permet d’utiliser les classes de cache de Doctrine (utilisées par l’ORM à l’origine, mais qui fonctionne très bien aussi en autonome).

Mais voilà : dans la configuration offerte par le bundle, seul un couple host/port n’est possible.

Heureusement, il est possible d’utiliser le paramètre « id » qui permet de faire référence à un service du conteneur d’injection. Du coup, vous pouvez placer dans le conteneur un service Memcache configuré avec votre ferme de serveurs, et le passer à la configuration « liip_doctrine_cache »

Exemple :

services:
    my_memcache_farm:
        class: Memcache
        calls:
            - [ addServer, [ "serveur1", 11211 ] ]
            - [ addServer, [ "serveur2", 11211 ] ]

liip_docrine_cache:
    namespaces:
        my_namepace:
            type: memcache
            id: my_memcache_farm

Et le tour est joué : votre configuration multi-serveur memcache peut ainsi être utilisée avec Doctrine cache.

Vous pouvez aussi en profiter pour positionner les timeouts de connexion et de réponse des serveurs.

Point fort supplémentaire : si vous utilisez la même ferme de cache pour plusieurs namespaces, vous n’avez pas à dupliquer autant de fois la configuration.

Maintenant, si vous avez du temps pour tester, l’utilisation de Couchbase permet d’amener en plus la redondance et une meilleure répartition des données sur les noeuds, la suppression de noeud à chaud, etc… J’ai hâte de tester et de vous dire tout ce que j’en pense de bien (ou pas)

Publié dans PHP, Symfony2