Comment font les « grands » : Azure, Google…

Quand on s’intéresse aux architectures sous-jacentes des solutions Cloud, on remarque deux points communs:

  • Le peu de chiffres qu’on trouve donnent le vertige (oui oui, 1 Péta = 1000 Téra…)
  • Très peu d’informations sont divulgués sur l’aspect technique

Il se trouve que Google & Azure ont récemment lâchés quelques informations, surtout sur le réseau 🙂
Facebook est un peu en avance et communique davantage.

Microsoft Azure

Pour Azure, Voici des slides de Maître Russinovich (cliquer sur l’image pour ouvrir le PowerPoint (29 diapos)):

2015-06-19_14-37-27

Fait le plus marquant: ils utilisent des FPGA (processeurs programmables) pour gérer la couche réseau (40GbE/s).

Les dernières infos les plus intéressantes que j’avais eu étaient pendant les TechEd en 2012, toujours de Mark. La vidéo est encore en ligne:

  • ~10 personnes pour administrer 100 000 serveurs physiques!
  • Démonstration d’une interface d’administration Azure,
  • Vue graphique des racks avec les VM,
  • Démonstration de self healing de la plateforme,
  • Explications sur le bug du 29 février, avec la ligne de commande qui a tout planté

Google

Il semble tout indexer, sauf le contenu de son architecture technique (avec un robots.txt super efficace 😉
Techcrunch a collecté des informations intéressantes, également sur la gestion du réseau (SDN):

http://techcrunch.com/2015/06/17/google-pulls-back-curtain-on-its-data-center-networking-setup/

En 2009, ils avaient publié une visite d’un de leur datacenter, avec l’aspect d’un serveur dans un conteneur:

2015-06-19_14-56-27

Facebook

Ils sont un peu plus bavard, ça doit être dans leur DNA…:

https://code.facebook.com/posts/360346274145943/introducing-data-center-fabric-the-next-generation-facebook-data-center-network

Figure 2:

Un serveur Facebook (un ancien modèle je pense):

Le vide à l’arrière n’est pas juste pour visualiser, c’est vaiment un « trou »:

Office365

Les informations les plus présentes concernent la messagerie Exchange:

  • Pas de sauvegarde,
  • Réplication 3 + 1 Lag à 8 jours (qui descend à 0 en cas de problèmes)
  • JBOD pour le stockage (1 banque par disque dur).
  • Optimisations via Exchange 2016

Office 365 est indépendant d’Azure, même si certains services y sont hébergés et que la fusion est pour moi en approche.

Amazon

  • Ils utilisent Xen pour la virtualisation,
  • Ils font leur propres serveurs,
  • Basé sur des technos open source

Conclusions

Ils ont des besoins hors normes, mais ils ont aussi les moyens en conséquences:

  • Maîtrise complète de toute la chaîne: datacenter, réseau, serveurs, OS, hyperviseur, applications, répartiteurs de charges, moteurs SQL
  • Développements dans les couches basses : SDN, FPGA…
  • Code source (et personnes pour le faire évoluer): Windows pour Microsoft, Linux pour Google,Facebook et Amazon
  • Ils s’appuient sur des projets Open source (OpenFlow, memcache, Hadoop…) mais en ont des extensions propriétaires
  • S’il le juge utile, ils peuvent dépenser des moyens colossaux sur certains sujets (comme Google avec son SDN logiciel).

Tout cela leur donne une indépendance forte vis à vis des autres entreprises et leur rachats éventuels part des concurrents. Certains sujets sont certainement plus économique par rapport à la volumétrie (par exemple en économisant $50 par serveur, x300 000)

Là où pour nous c’est parfois le top du top (géo cluster, DRP, LB), c’est le minimum syndical pour eux. Une fois cette barrière levée, un nouveau boulevard s’ouvre avec la montée en charge.

SCOM 2007 R2: superviser une VM Linux Amazon EC2

Quelle drôle d’idée vous allez me dire… Mais avoir une ou plusieurs VM dans le cloud ne justifie pas d’avoir une supervision « à part ». Cependant le défi est pas mal:

  • Les Managements Pack Microsoft ne sont pas prévu pour Fedora
  • L’authentification par défaut sur les VM Amazon est à base de certificat

Lorsque SCOM détecte Fedora, il bloque directement: Pour détecter la version, SCOM exécute le script Shell qui se trouve ici: Par ailleurs, le dossier comprend aussi les RPM qui sont installés par la suite (démon). Arriver à notre fin va nécessiter de l’huile de coude à plusieurs endroits…

Pour vous encourager, voici le résultat: Performances SCOM pour une VM Amazon EC2 Vous l’aurez compris, il s’agit notamment de faire croire à SCOM que nous avons une Red Hat. Il y a en fait deux possibilités:

  • Créer un Management Pack pour Fedora.
  • Maquiller la VM pour paraitre comme une Red Hat.

La première solution est la plus élégante, mais elle va être longue à mettre en place, et à maintenir ensuite. J’ai donc préféré la seconde, surtout qu’une Fedora n’est pas très éloignée…

Modifications sur le Linux Amazon EC2

Autoriser la connexion SSH sans certificat

dans /etc/ssh/sshd_config:

PasswordAuthentication yes
PermitRootLogin no
#Supprimer également la dernière ligne du fichier qui permet un logon root sans mot de passe

Il faut ensuite donner un mot de passe au compte root:

passwd root

puis recharger la configuration:

/etc/init.d/sshd reload

Puis créer un compte utilisateur pour SCOM:

useradd scom
passwd scom

Vérification du hostname

Par défaut, la VM a pour hostname son adresse IP interne. SCOM va déployer un rpm afin d’avoir un démon sur la VM, et génèrera un certificat pour s’authentifier.
Il est impératif que le hostname corresponde au nom utilisé par SCOM pour joindre son agent. Le plus simple est de changer le hostname par un nom accessible via les dns publiques, par exemple www.lotp.fr:
hostname www.lotp.fr
Afin de résister à un reboot, il faut également modifier /etc/sysconfig/network an ajoutant:
HOSTNAME=www.lotp.fr

Dépendances

Le package RPM de Microsoft a des dépendances, notamment sur deux librairies:

  • /usr/lib/libssl.so.6
  • /usr/lib/libcrypto.so.6

Si votre système a une version plus récente (so.8 …), il suffit de faire des liens symboliques (ln -s cible fichierquiexiste):

Si vous ne le faites pas, vous aurez les messages d’erreurs suivants à l’installation du RPM (d’abord libssl puis libcrypto une fois le premier corrigé):
Au final, j’ai les liens symboliques suivants:
lrwxrwxrwx  1 root root       16 Feb 16 16:19 libssl.so.6 -> libssl.so.0.9.8k
lrwxrwxrwx  1 root root       12 Feb 16 16:23 libcrypto.so.6 -> libcrypto.so

Je vous invite à copier le rpm (scx-1.0.4-248.rhel.5.x86.rpm), afin de valider la bonne installation. Sinon c’est SCOM qui le fera pendant le déploiement, et les messages de retour ne sont pas toujours explicite.
Par ailleurs, cela permet de voir le nom avec lequel le certificat est crée:

Il est toujours possible de le désinstaller:

rpm -e scx-1.0.4-248.i386

Ports TCP

SCOM va se connecter par deux moyens:
  • SSH
  • port 1270 (agent scom sur Linux)

Il faut configurer le parefeu Amazon afin que ces deux accès soient possibles. Si le port 1270 n’est pas joignable, SCOM remonte une erreur de timeout pas explicite. Le trafic vers ce port est confirmé par une trace réseau: NB: si vous ne connaissez pas Wireshark, j’ai fait une vidéo/tutoriel dessus, elle est disponible ici.

/etc/redhat-release

Par défaut, Fedora crée un lien symbolique de /etc/fedora-release vers /etc/redhat-release. il faut casser ce lien symbolique, et créer le fichier redhat-release avec comme donnée Red hat…:

rm /etc/redhat-release
echo "Red Hat Enterprise Linux Server release 5" > /etc/redhat-release

Modifications sur SCOM 2007 R2

Les actions à mener seront les suivantes:

  • Autoriser WinRM à faire de l’authentification basique
  • Importer les Managements Pack Linux/Unix génériques et Red Hat en particulier
  • Ajouter un compte de type Authentification basique pour se connecter au Linux (non root)
  • Ajouter un compte de type Authentification basique pour se connecter au Linux (root)
  • Associer les comptes ajoutés aux profiles Unix Action Account et Unix Privileged Account
  • Découvrir la VM Linux et signer le certificat

Ajouter la VM est passe comme une lettre à la poste si vous respectez bien les différents pré requis. Je vais donc m’attarder sur les problèmes que j’ai rencontré. Autoriser WinRM à faire une authentification basique: Si vous n’avez pas mis le bon hostname, le certificat est refusé au moment de le signer: Si vous ne déclarez pas de comptes, les workflow ne fonctionnent pas:

Au départ, la VM n’est pas encore supervisée et marquée « unknown »:

Puis elle passe ensuite au vert:

Voilà, à ce stade, votre VM est supervisée par SCOM 2007 R2. Voici quelques écrans de SCOM 2007 R2 une fois tout opérationnel:

Amazon EC2: rediriger les mails pour root via Google Apps

Ayant un peu patiné avec la configuration, je me dis que cela pourrait intéresser d’autres personnes…

Setup/Cahier des charges:

  • Fedora 11 sur une VM Amazon EC2 (voir ce précédent billet pour mettre à jour depuis la version 8 fournie)
  • Postfix, utilisé uniquement comme relais local vers Google Apps
  • S’authentifier sur Google Apps pour envoyer les mails
  • Rediriger les mails root sur ma boite (crontab…)

Voici les différentes étapes pour y arriver!

Configuration de Postfix

La configuration se fait sur plusieurs fichiers (en gras l’important):

/etc/postfix/main.cf

queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
mydomain = eu-west-1.compute.internal
myorigin = mondomainegoogleapps.fr
inet_interfaces = localhost
mydestination = $myhostname, localhost.$mydomain, localhost
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
         PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
         ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.5.6/samples
readme_directory = /usr/share/doc/postfix-2.5.6/README_FILES
inet_protocols = ipv4
smtpd_tls_key_file =
smtp_use_tls = yes
relayhost = [smtp.gmail.com]:587
transport_maps = hash:/etc/postfix/transport
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

/etc/postfix/sasl_passwd

[smtp.gmail.com]:587            emailQuiEnvoiMail@mondomainegoogleapps.fr:monmotdepasse

/etc/newaliases

[..]
root: monemailamoi@mondomainegoogleapps.fr

Appliquer la configuration

postmap transportpostmap sasl_password
newaliases
chkconfig postfix on
/etc/init.d/postfix restart

Tester

echo "hello world" | mail -s "mail envoye a root local" root

Explications

tous les mails à destination d’un domaine autre que mydestination ($myhostname, localhost.$mydomain, localhost) est routé via smtp.gmail.com en s’authentifiant auprès de ce dernier via le compte configuré dans sasl_passwd. Google Apps/Gmail remplacera le nom de l’expéditeur par le compte qui est utilisé pour envoyé le mail.

pour les mails envoyé à root, le système ajoute automatiquement @hostname.domain. Il faut donc que postfix considère eu-west-1.compute.internal comme étant son domaine. Bien sûr, il faut remplacer cette valeur par la région où est hébergée votre VM (grep search /etc/resolv.conf)


Amazon EC2: version de fedora trop ancienne!

Je ne me suis pas vraiment méfié au départ. Faut dire que je n’ai jamais installé de Fedora, et donc je ne connais pas l’historique des versions, ni la version « actuelle »… J’ai pêché par excès de confiance dans Amazon.

Comment imaginer qu’il propose d’installer une version qui a plus de 2 ans ? Pour rappel, ils proposent:

Donc la version 8 est suffisamment ancienne, pour qu’il faille passer par une upgrade intermédiaire avec la version 10 pour pouvoir ensuite passer en version 11. Je m’en suis aperçu en cherchant nagios version 3 sans pouvoir le trouver…

J’ai trouvé la procédure dans les forums Amazon:
http://developer.amazonwebservices.com/connect/message.jspa?messageID=141707

En résumé:

Passer à la version 10:

yum update -y
yum clean all
yum update -y
yum clean all
rpm -Uhv http://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/Packages/fedora-release-10-1.noarch.rpmhttp://mirrors.kernel.org/fedora/releases/10/Fedora/i386/os/Packages/fedora-release-notes-10.0.0-1.noarch.rpm
yum clean all
yum update -y
yum clean all
yum update -y
yum clean all

Passer à la version 11:

rpm -Uhv http://mirrors.kernel.org/fedora/releases/11/Fedora/i386/os/Packages/fedora-release-11-1.noarch.rpmhttp://mirrors.kernel.org/fedora/releases/11/Fedora/i386/os/Packages/fedora-release-notes-11.0.0-2.fc11.noarch.rpm
yum clean all
yum update -y
yum clean all
yum update -y
yum clean all

Je vous recommande plus que vivement de commencer par là. M’en étant rendu compte en bout de course, j’ai eu droit à plusieurs problèmes de packages, que j’ai désinstallé pendant l’upgrade!

Mysql

Au moins la commande flush privileges ne fonctionnait plus:

mysql> flush privileges;
ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
J’avais fait une sauvegarde avant de jouer les mises à jour, cette table n’existait pas. J’ai donc fait une réparation automatique et l’upgrade:
mysqlcheck --all-databases --repair -u root -p
mysql_upgrade -u root -p
et voilà 🙂

Yum

Depuis l’upgrade, appeler la commande yum donne ces messages juste avant de continuer:
Loaded plugins: dellsysidplugin2, fastestmirror
ERR_OUT: : Bad address
ERR_OUT: : Bad address
ERR_OUT: : Bad address
ERR_OUT: : Bad address
ERR_OUT: : Bad address
J’ai trouvé la solution sur ce blog: http://d.hatena.ne.jp/const/20090909
il s’agit du package smbios-utils et smbios-utils-python, qui servent à récupérer des informations sur le bios. Vu que c’est une machine virtuelle, asta luego:
yum remove smbios-utils-python
(enlève l’autre par dépendance)
Et voilà 🙂

Migration de Dedibox vers Amazon EC2

Je suis entrain de préparer ma migration depuis Dedibox pro vers Amazon EC2 (Elastic Cloud Compute). Voici mes premières impressions du nuage Amazon.

Pourquoi je migre

Dedibox a un positionnement étrange. Ils proposent des serveurs performants (Dedibox Pro), mais ils empêchent l’utilisation de leur serveurs comme hyperviseur, ce qui en réduit fortement l’intérêt. Leurs switches coupent les ports qui présentent plus d’une adresse mac, ce qui est le cas avec VMware ESXi ou Hyper-V. Je m’étais rabattu sur un Linux avec VMware Server, mais les VM sont très (trop) lentes. Il en résulte une très bon serveur matériel, mais inexploitable pour de la virtualisation décente. Nul doute que ce soit du hasard, la virtualisation étant le moyen principal de consommer les ressources sur ce type de serveur. OVH propose ESXi, mais le coût est plus fort (notamment avec les 15€/mois pour avoir droit à plusieurs IP publiques, sans parler du raid matériel).
Comme de toute façon mon objectif c’est d’avoir des environnements à la demande, et que c’est la cible d’Amazon EC2, leur offre m’a intéressé rapidement. Au pire, cela va me coûter autant que Dedibox, mais au moins j’en aurai pour mon argent!

Etape 1: Le calculateur Amazon

En parlant d’argent, la première difficulté est de savoir combien ça va coûter! Bon en fait, la première difficulté est de savoir le type d’instance qui convient:

  • A la demande: aucun engagement, vous ne payez que la consommation,
  • Réservée: vous payer une fois une somme, et ensuite la consommation coûte très peu,
  • Spot: vous ne savez pas quand la VM sera démarrée, mais elle coûtera peu (moins qu’à la demande, mais plus que réservée). Il s’agit d’enchère où Amazon solde les ressources non utilisées.

De façon logique, avoir une VM à la demande allumée tout le temps coûte beaucoup plus cher qu’une VM réservée allumée tout le temps.
Le calculateur a un problème d’ergonomie. Par défaut, il inclut dans le prix mensuel (1er mois), les frais qu’on ne paye qu’une fois. Machinalement, on multiplie par 12 et on prend peur!

Pour calculer le coût par mois il faut donc faire (pour une instance small, réservée et allumée en permanence):

(227.50$ + 29.28$ * 12)/12 = 48.23$ / mois

Le coût moyen d’un VM est donc de  34€ par mois en lissé. Car les 227.50$ sont à payer tout de suite. Pour cette somme, on a donc un linux 32 bit, sur une VM ayant les capacités suivantes:

  • Processeur: 1VCPU 1,7Ghz : 1 EC2 Compute Unit (1 virtual core with 1 EC2 Compute Unit)
  • Mémoire: 1,7Go
  • Stockage: 160Go de disque

Le truc bizarre, c’est les 44$ de taxes sur la facture (voir tout en bas de l’article)…

Etape 2: Réserver une instance

C’est le moment de se jeter à l’eau!! Avant, j’ai tout de même démarré une VM à la demande pendant une 1/2 heure pour être sûr des performances. On choisi la taille de la VM (small en ce qui me concerne), et le lieu où elle sera instanciée (2 sites aux USA, 1 site en Europe (Irelande). J’ai choisi l’Irlande, afin de m’épargner la latence transatlantique. Après 5 cliques de mulot, on est en pending. Après 10 minutes, le statut passe à active.
Il s’en suit un grand moment de solitude, où l’on cherche sa VM tant attendue sans la trouver! L’aide n’est pas très explicite. Il faut en fait créer une VM à la demande sur le même site géographique, dans la même zone (2 possibles en Irelande). On ne voit nulle part que s’est rattaché à notre réservation, il faut faire confiance au système. On a juste la confirmation au bout de quelques heures, dans le suivi de facturation en voyant qu’elle est facturée à 0,04$ par heure où elle est allumée.
A ce jour, une VM réservée ne peut héberger qu’un Linux. Windows est cantonné aux VM à la demande, et son taux horaire est un peu plus élevé, car la licence Windows est fournie par Amazon.
Le choix de l’architecture (32/64 bit) dépend de la taille de VM.

Etape 3: Créer la VM

Maintenant que j’ai compris qu’il faut créer une VM à la demande et faire confiance, cela est très facile (5 écrans + 5 minutes de patience). On n’installe pas son système d’exploitation, mais on choisit une image toute prête parmi plusieurs centaines. Amazon met en avant 5 Fedora (4 en 32bit et 1 en 64bit), et 3 Windows. L’onglet Community AMIs permet d’élargir le choix à 971 images.

Le découpage du stockage pour Linux sur les images Amazon est 10Go pour le système et 150Go pour le reste. La VM voit deux partitions (/dev/sda1 et /dev/sda2):

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda1             10321208   1383500   8413420  15% /
/dev/sda2            153899044   6793004 139288416   5% /mnt
none                    870472         0    870472   0% /dev/shm

Lors de la création de la VM et ultérieurement, Amazon propose inclus un Firewall externe à la VM. Vous pouvez ainsi définir les flux entrant autorisés. C’est très pratique, car on évite un iptable:

Etape 4: Accès à l’instance

Maintenant que l’instance est running, il est temps d’y accéder. Un clic droit sur l’instance propose le menu suivant:

L’option Connect donne l’écran suivant:

Vous l’aurez compris:

  • pas d’accès de type console (Get System Log permet de voir le log du boot),
  • Pas de mot de passe root, mais l’utilisation d’un certificat (obtenu à la création de la VM).

Sur Windows, un client gratuit pour faire du ssh est Putty. Le problème est que Putty ne reconnait pas le certificat fourni par Amazon. Ce dernier documente la procédure pour le faire fonctionner:
http://docs.amazonwebservices.com/AmazonEC2/gsg/2007-01-19/putty.html

En résumé, il faut utiliser PuttyGen, fourni par les même que Putty, afin de loader le certificat Amazon et le convertir dans le format Putty. Après, ça fonctionne nickel:

Etape 5: Performances

Cet aspect est critique en général et en particulier quand on parle de VM. Bonne nouvelle, je suis très satisfait des performances:

  • Réseau: on tire facilement 20Mb/s
  • Disque: 121Mo/s en écriture (dd if=/dev/zero of=dd.dd bs=1M)

Pourquoi est-ce qu’Amazon fournie de telles performances ? Parce qu’il facture la consommation réseau (0.170$ par Go de data)! Contrairement aux hébergeurs classique qui facture tout compris, Amazon facturant à la consommation, ne perd pas d’argent si de gros consommateurs utilisent son service. Sur Dedibox, vous pouvez consommer du 100Mb/s non stop sans payer pour autant. Ils  mutualisent donc plus fortement les connexions afin de réduire les coûts (avez-vous déjà remarqué qu’au dessus de 50Mb/s il y a un trait rouge sur votre graphe de consommation ?).

Je préfère payer un peu plus cher quand je consomme plus mais avoir cette qualité. On peut suivre presque en temps réel sa facturation à venir:

Etape 6: Les options Amazon

Ils ne sont pas en restent pour vous inciter à prendre plus de service:

  • Répartiteur de charge entre vos VM, avec détection de panne sur les VM (facturé au Go de data)
  • Stockage supplémentaire utilisable par une VM avec des snapshots (mais indépendant de celle-ci) (facturé au Go et million de IO)
  • Adresse IP publique supplémentaire que vous pouvez rattacher à n’importe quelle VM (1/VM) (facturée si non utilisée)