To content | To menu | To search


Sunday 24 March 2013

commencent vraiment à me faire chier ces deux-là !

merci youtube

Voila ce que j'obtiens quand je veux consulter les vidéos d'Arte+7 à partir de mon proxy préféré. Après une rapide recherche j'apprends que le célèbre ProxFree, qui offre un "proxy Youtube", propose un seul serveur en France, à...Roubaix.

Voila voila.

Le comble étant que même sans proxy, il semble impossible d'utiliser VLC pour lire les vidéos; du coup, j'ai une bande passante asthmatique ET une vidéo qui rame. SUPAIR.

Tout ça parce que deux boites, qui sont loin d'être à la rue, se font une petite guéguerre à propos du peering. Pathétique.

Je ne suis pas prêt à me passer de Youtube. Par contre pour ce qui est des FAI, j'ai l'embarras du choix, et je ne vais plus tarder à en changer.

Saturday 16 March 2013

du...du hast... (3)

L'aventure HASTienne c'est terminé hier soir avec un gros crash du pool primaire, avec un fort peu poli "I/O Error" en tentant de ré-importer le pool HAST sur le second serveur. Malaise.

Vu les problèmes de lock que j'avais depuis la mise en prod, j'ai tenté le tout pour le tout: abandonnant HAST, j'ai créé de nouveaux datasets ZFS pour stocker mes précieuses données (que j'ai récupéré des backups de la veille, du coup), et j'ai ensuite synchronisé les deux serveurs à grands coups de snapshots ZFS différentiels.

Voici le principe: on commence par faire un snapshot (full) du dataset à répliquer, et on l'envoi sur l'autre serveur. On renomme ensuite, sur chaque serveur, le snapshot afin qu'il serve de référence pour les prochaines synchros:

serveur1# zfs snapshot servers/pool1/home@newsync
serveur1# zfs send servers/pool1/home@newsync | ssh -q serveur2 "zfs receive -vFd servers"
serveur1# zfs rename servers/pool1/home@newsync servers/pool1/home@prevsync
serveur2# zfs rename servers/pool1/home@newsync servers/pool1/home@prevsync

Un script à mettre en crontab sur le serveur maitre va se charger ensuite d'envoyer les snapshots différentiels; l'ancien snapshot est supprimé après transfert, et le nouveau est renommé afin qu'il serve de base aux suivants.

#!/bin/sh

bro="serveur2"
pools="pool1 pool2"


echo "`date`: ZFSync starting."
for pool in $pools
do
        dataset="servers/${pool}/home"
        echo "making new snapshot for ${pool}"
        zfs snapshot ${dataset}@newsync
        echo "sending snapshot"
        zfs send -i prevsync ${dataset}@newsync | ssh -q ${bro} "zfs receive -vFd servers"
        if [ $? -eq 1 ]
        then
                echo "error, exiting"
                exit $?
        fi
        echo "cleaning"
        zfs destroy ${dataset}@prevsync
        zfs rename ${dataset}@newsync ${dataset}@prevsync
        ssh -q ${bro} "zfs destroy ${dataset}@prevsync && zfs rename ${dataset}@newsync ${dataset}@prevsync"
done

echo

La gestion d'erreur, embryonnaire, demande encore a être améliorée ;)

Avec cette méthode, la synchro de trois datasets prends moins de trois minutes, pour environ 10 Go de données.

À noter qu'en temps normal le second serveur n'utilise pas les datasets en question: ils ne sont pas montés, à la place on utilise un montage NFS hébergé sur le premier serveur (zfs set sharenfs=on $dataset) pour que les éventuelles données écrites par le second serveur ne soient pas écrasées. En cas de bascule, les montages NFS sont démontés et les montages ZFS sont remontés à leur place, via heartbeat.

Billets connexes

Saturday 9 March 2013

du...du hast... (2)

Suite de mes aventures HASTiennes: après la découverte du merveilleux mode async, je me suis rendu compte à la longue que ce n'était pas si async que ça, et que j'avais toujours - mais moins - ces méchants freeze impactant directement les services ftp, web et mail.

Résultat, la mort dans l'âme, je me suis résolu à ressortir le hack immonde que j'avait gribouillé lors de mes premiers essais:

#!/bin/sh

POOL="data"
HASTCTL="/sbin/hastctl"
TIMEOUT=300

starttime=`date +%s`

${HASTCTL} role secondary ${POOL}

while true
do
        timestamp=`date +%s`
        curenttime=`echo "$timestamp - $starttime" | bc`
        if [ $curenttime -gt $TIMEOUT ]
        then
                echo "sync takes too much time. exiting."
                exit 1
        fi

        ${HASTCTL} status ${POOL} | grep complete > /dev/null

        if [ $? == 0 ]
        then
                sleep 2
                ${HASTCTL} role init ${POOL}
                #echo "sync finished."
                exit 0
        fi
done

À mettre en crontab tous les quarts d'heure. c'est sale mais ça rame déjà beaucoup moins.

Billets connexes

Sunday 3 March 2013

ssssss (c'est pas du Python, c'est du Chameau)

Pour mes divers besoins (coucou Free) j'utilisais jusqu'à maintenant un proxy SOCKS, 3proxy, qui fonctionne bien avec Firefox (via l'outil ultime FoxyProxy, dont je ne dirais jamais suffisamment de bien) pour mater YouPornTube.

Malheureusement, chipset Intel + 64bit + Flash = pas d'accélération matérielle...ça rame. C'était bien la peine de mettre un proxy pour libérer la bande passante.

L'idée est donc d'utiliser VLC pour voir les vidéos, tout en profitant de l'effet de notre proxy magique. Problème, VLC segfault, pas grand chose dans les logs, la syntaxe à vomir (voir billet précédent...) de 3proxy ne motive pas vraiment à chercher une solution, mais plutôt à chercher une autre solution.

Heureusement, un autre mec a eu le même genre de besoin (et visiblement le même genre d’à-priori négatifs vis-a-vis de 3proxy) et à fini par...écrire son propre soft, sss.pl (je vous avais bien dit que c'était du Chameau)

Simple comme j'aime, il suffit de le télécharger, et de le lancer avec l'IP et le port en paramètres, avec un login/pass si vous voulez. Et ça marche...à moi les vidéos HD en streaming !

Friday 1 March 2013

Les bons outils de merde #1: les mails

L'autre jour au taf il y avait un problème avec un serveur de mail, et rapidement le besoin de filtrer les mails est soulevé. Quelqu’un demande: "Il y a procmail sur cette machine ?"

procmail.

Depuis que je fais de la messagerie (plus de 10 ans), cette daube est considérée comme la référence en matière de MDA, alors que depuis au moins le même nombre d'année, un soft performant aurait logiquement du le remplacer: maildrop.

Un exemple vite fait: trier un mail venant d'un certain expéditeur. voici les confs

  • procmail:
:0 H
* ^From.*toto@spam.com
$MAILDIR/.SPAM/
  • maildrop:
if (/^From:.*(toto@spam.com)/)
{
  log ">>> Mail successfully delivered to SPAM directory"
  exception {
    to "$MAILDIR/.SPAM/"
  }
}

Choisis ton camps camarade :) En plus de sa syntaxe limpide, on voit que maildrop inclus la possibilité d'envoyer des messages personnalisés au syslog, pratique pour les stats et/ou le debug.

Mais impossible de parler de procmail sans parler de son copain non moins (mais heureusement de moins en moins) célèbre, j'ai nommé fetchmail.

fetchmail, codé au whiskey pur malt par ESR, cumule les tares: en plus d'avoir une syntaxe à vomir, il se paye le luxe de ne pas gérer le format Maildir (modernité), et dans certains cas peut même perdre des mails. Il serait même sujet aux buffer overflows...

Préférez-lui donc une alternative qui corrige tout ça (et qui, jamais ne perdra un seul mail): getmail.

Pour finir, sur les serveurs où on trouve le couple infernal, on retrouve évidemment (puisque pas de Maildir), le format mbox. Pleins de mails, un seul fichier. Vas-y pour virer un mail dedans. Avec Maildir, on supprime le fichier correspondant, et c'est fini...

Et non, je ne parlerai pas d'Exchange™®© dans les outils de merde, même si il y a à en dire :)

du...du hast...

Depuis la mise en place de ma nouvelle infra du futur actuel, j'avais des méchants bloquages en essayant d'accéder à mes fameuses partitions cluster-style. Je ne savais pas trop d'où cela venait (cryptage des disques, réplication, lock NFS...) jusqu'à ce que je stoppe la réplication HAST sur le second nœud. Et là, miracle, plus de lags.

J'ai commencé par écrire un script qui activait périodiquement la réplication. Sale. J'ai continué de creuser, envisageant les trucs les plus fous (export de snapshots ZFS, retour au rsync...) et puis j'ai tenté le tout pour le tout: j'ai modifié le mode de réplication de "fullsync" en "async", mode le plus approprié pour deux serveurs distants (rappel: les serveurs sont dans deux DC différents), mais mode "non implémenté" d'après ce qu'on peut lire ici et . Et vous savez quoi ?

Ça marche.

Donc étant donné que le man est plus à jour que la doc officielle, il faut ajouter la ligne suivante au fichier /etc/hast.conf de chaque nœud:

replication async

Et bien sûr relancer hastd.

Billets connexes

Tuesday 26 February 2013

déménagement (ouais encore)

Nouveau changement de serveurs pour la tourmentine: depuis dimanche soir les services sont hébergés dans 2 nouveaux datacenters !

Au niveau des nouveautés:

  • FreeBSD 9.1
  • MariaDB en remplacement de MySQL (kikoo Oracle)
  • Disques cryptés
  • HAST pour la redondance (fini les rsync qui durent des plombes), montage NFS (via ZFS) sur le serveur secondaire car le volume HAST ne peut être monté sur les deux nœuds en même temps

Il y a bien évidemment des changement de DNS, ainsi que la disparition des IPv6 virtuelles, remplacées par du round-robin DNS (c'est pas très propre mais bon), mais tout ça devrait rester relativement transparent.

La carte du failover est jouée à fond, le serveur principal étant maintenant deux fois plus puissant que le secondaire, et le failover pensé dans une optique maitre/esclave.

Il ne reste donc plus qu'a nettoyer les anciens serveurs avant de les rendre :)

Sunday 16 December 2012

L'antispam pour les nuls

Utilisateur comblé de Dotclear, j'étais victime depuis quelques temps de spam dans les commentaires, ce qui n'est pas bien grave dans le sens ou lesdits commentaires sont modéré à priori.

Mais c'est fatiguant d'avoir à surveiller les posts pour avoir 99% du temps de la merde à lire.

Or, Dotclear utilise entre autre le service Akismet pour filtrer les commentaires. Frustré par l’inefficacité de ce dernier, j'ai finalement été voir dans les paramètres, pour me rendre compte...que celui-ci était désactivé par défaut, faute de clé d'accès à l'API.

Une inscription pour obtenir cette clé plus tard, tous les nouveaux spams ont été filtrés. C'est magique.

Reste qu'envoyer des données un peu perso comme des commentaires à un service externe, c'est un peu moyen; je suis déjà à la recherche de quelques alternatives, si vous en avez faites-moi signe...dans les commentaires !

Billets connexes

Tuesday 9 October 2012

Le jour où telnet m'a sauvé la vie

Thanks, OpenSSH!

Y'a des protocoles comme ça, qui datent du début de l'internet (voir d'avant), et qui ne devraient franchement plus exister. Le FTP est l'un deux. Et puis telnet aussi.

Au boulot j'ai été horrifié de voir que les machines Solaris avaient toutes leur port telnet ouvert, et qu'en plus des gens s'en servaient encore pour se connecter aux machines...

Et puis aujourd'hui, l'accident bête. Problème de time-out SSH, classique, je rajoute la ligne qui va bien dans la conf et relance le service. Ce qui devient bête - voir même très con - c'est que je me déconnecte, plutôt que de garder ma session ouverte et d'en ouvrir une deuxième pour vérifier que tout va bien, comme tout admin normalement constitué aurai dû le faire.

Et là, c'est le drame: impossible de se loguer à la machine, SSH down...

Là j'ai plusieurs solutions:

  1. Se connecter à la carte d'admin de la machine. Problème: le câble est pas branché, et le switch m'a regardé d'un air tellement mauvais quand j'ai scruté ces ports libres que j'ai vite lâché l'affaire. Sans compter le bordel pour retrouver l'IP du bouzin, etc.
  2. Brancher un écran/clavier dessus. Facile, mais nettement moins avec du matos Sun...proprio (je suis resté un an avec une Ultra 5 inutilisable, faute de clavier pour la faire démarrer). On oublie.
  3. À l'ancienne, une bonne vieille connexion sur le port série. C'est sport, mais jouable. Par contre pour trouver un adaptateur usb ça risque de prendre la journée...
  4. Et la dernière solution, donc, qui fait mal au cul: telnet. Hourra, on peut se connecter et se rendre compte que le service SSH c'est mis "en maintenance". Le BATARD. La faute sans doute à la ligne copiée/collée un peu trop à la va-vite, puisque destinée à un OpenSSH alors que j'avais affaire à un sun ssh.

Ça apprends l'humilité un peu. Merci l'ancêtre.

Monday 8 October 2012

Building the perfect web toaster, part 1

Suite de mes aventures poundo-varnisho-lighttesques, je pense avoir trouvé la solution à mes problèmes de time-out.

En effet, après avoir testé toutes les valeurs possibles et imaginables des compteurs de PHP, après avoir testé php-fpm (uh, pas stable), testé NginX (on y reviendra à celui là), j'ai fini par...bypasser Varnish et passer les requêtes de Pound directement à Lighttpd. Et plus de time-outs. J'avais trouvé mon coupable.

Varnish, ou plus précisément une de ces sondes, paramétrée un peu trop agressivement. Le serveur ne répondant pas assez rapidement, il était déclaré "malade" et plus aucune requête ne  parvenait à lui. D'où, time-out.

Un .timeout = 5m; plus tard, je n'ai plus de problème. Je laisse tourner un varnishlog en fond, sait-on jamais, et je touche du bois.

- page 18 of 31 -