Bonne résolution : Prendre soin de son cluster Service Fabric

JANV23

Pour ceux qui ne connaissent pas Service Fabric, il s’agit d’un produit fourni par Microsoft qui permet de mettre en place des architectures micro-services basées soit sur des “Guest Exe”, des containers ou des “reliable service” qui sont dans ce cas présent, des applications développées avec un SDK fourni par l’éditeur.


Ceux qui ont déjà testé Service Fabric dans un cadre projet ont pu voir qu’il est assez magique et rapide de mettre en place des solutions qui fonctionnent toutes seules. Par toutes seules, je veux bien entendu parler de toutes les fonctionnalités “automagiques” qu’offre Service Fabric, comme la répartition automatique des micro-services au sein du cluster, l’auto-healing du cluster, ou encore la gestion des données des différents services stateful.


Maintenant rien n’est vraiment magique si on creuse vraiment comment cela marche, mais ce n’est pas le but de cet article, nous allons voir comment faire en sorte de bien prendre soin de son cluster pour qu’il n’arrive rien d’irrémédiable à celui-ci. Et quand je veux dire rien d’irrémédiable, je parle du moment où vous vous dîtes : “Autant créer un nouveau cluster et rattraper mes données, car l’actuel est bon pour la casse”, bon après vous me direz que cette méthode marche et elle a souvent été éprouvée, mais bon ça n’arrive jamais au bon moment.


Laissez lui de l’air pour que votre cluster s’épanouisse :

A part le fait que cette phrase marche aussi avec un adolescent, il est nécessaire de laisser de l’espace disque sur les différents nœuds de votre cluster pour qu’il puisse effectuer ses opérations sans aucun soucis. Alors grand scoop, Service Fabric a beau être présenté comme du PaaS sur Azure, derrière, vous allez monter un cluster de Virtual Machine Scale Set (moi j’appelle ça du IaaS), le côté PaaS offert par Azure sur votre cluster SF concerne surtout les updates des versions de Service Fabric, les autres fonctionnalités qui sont présentées avec le produit sont les mêmes pour un cluster on premise ou créer à la main sur des Virtual Machine Azure ou AWS ou autre ... Donc ce cluster Scale Set, il faut le bichonner c’est grâce à lui que votre Service Fabric fonctionne, un des éléments à prendre en compte c’est l’espace disque disponible pour vos applications.

Bon vous me direz un disque dur ça ne se remplit pas tout seul, et bien je suis d’accord, tout dépend de votre utilisation de votre cluster. Si on exclu les erreurs courantes d’occupation d’espace disque, comme la génération de fichiers de logs sur le disque local sans mettre en place de politique de purge. Service Fabric peut utiliser l’espace disque pour stocker l’état des services stateful que ce soit vos acteurs ou vos “reliable service”, donc si vous ne supprimez jamais les données locales, il est possible de ne plus avoir d’espace disque si vous avez des acteurs qui gèrent beaucoup de données en disque.

Pour éviter ce problème, il est possible de faire les actions suivantes :

- Supprimer vos acteurs qui ne sont plus utilisés, par exemple ceux qui font des actions temporaires dans un traitement

- Mettre en place une politique de stockage à double niveau, à la fois basée sur le cluster, puis un déchargement sur un Blob Storage (ou autre).

- Mettre en place des alertes sur l’espace disque utilisé afin d’éviter les mauvaises surprises le jour où cela pose problème.


Les disques à monitorer dépendent de l’installation de votre cluster, si vous êtes passé par un template ARM comme celui disponible sur le GitHub de Microsoft (https://github.com/Azure/azure-quickstart-templates/blob/master/service-fabric-secure-cluster-5-node-1-nodetype/azuredeploy.json), vous pouvez voir qu’il y a une propriété nodeDataDrive qui vous permet de positionner les données de votre cluster sur le disque OS ou sur le disque Temp. A noter qu’il est possible de mettre vos données sur le disque Temp sans risque majeur si vos applications sont bien conçues elles sont redondées sur différents nœuds du cluster.


Dans l’hypothèse ou il est trop tard, et que votre cluster est chargé de beaucoup de données, il est parfois possible de supprimer des applications via les API Service Fabric. Cependant, cette opération ne marche pas toujours si votre cluster est vraiment plein. La dernière chance est souvent celle de se connecter au cluster via RDP (ou SSH si c’est un cluster Linux) et de supprimer les dossiers contenant les données liées à la persistance de vos services. J’espère par ailleurs que vous n’arriverez pas à cette solution ultime et brutale.


Les clusters adoptent une démarche démocratique :

Si vous vous êtes intéressé un peu à la notion de cluster, notamment celui de Service Fabric, vous devez savoir qu’il y des nœuds et des composants qu’on ne peut pas supprimer sans y prendre une attention toute particulière. Au sein de Service Fabric, il y a une notion de “Seed Node” que ce soit on-premise ou sur Azure, ces nœuds particuliers hébergent entre autre les applications systèmes servant au bon fonctionnement du cluster, il est donc fortement conseillé de faire en sorte que ces nœuds soient toujours opérationnels. Vous allez me dire que vu que c’est du Service Fabric managé, et que c’est automagique, vous n’avez rien à craindre pour ces nœuds. Et bien non, ce n’est pas le cas, derrière votre cluster il y a un cluster de Virtual Machine Scale Set, et la mauvaise nouvelle c’est que vous y avez accès, donc c’est à vous de le manager et de s’assurer qu’il se porte bien. Vous pouvez voir la liste de vos “Seed Node” dans le cluster manifest, comme on peut le voir ci dessous :

image


A noter que le XML de déclaration de l’infrastructure change entre un cluster “on premise” et un cluster Azure. De même selon le niveau de durabilité de votre cluster, le nombre de vos seed nodes est différents.


Alors je parle de démocratie, puisque toute opération d’infrastructure doit être votée par l’ensemble du chorum que forme l’ensemble de ses Seed Nodes. Un cas concret, si par exemple vous avez perdu un de vos seeds node, et que vous souhaitez mettre à jour votre cluster, celle-ci ne se fera pas.


Alors ce cas là arrive uniquement quand vous faites les opérations suivantes :

- Supprimer un nœud de votre cluster ScaleSet (oui la ressource n’est pas verrouillée par Service Fabric)

- Scale Up / Scale down, il est possible que les nœuds du chorum soient supprimés

- Créer votre cluster Scale Set avec le paramètre overProvision à true, dans ce cas précis lors de la création il crée plus de serveurs que nécessaire, et après il supprime ceux qu’il juge en trop, donc peut être vos nœuds de chorum

- Maltraiter les fichiers Service Fabric situés sur votre cluster, bon là ça devient intentionnel....


Si par hasard, c’est trop tard et que vos “Seed Nodes” sont cassés, vous pouvez envoyer un mail au support Microsoft Azure qui vous dira quasiment à chaque fois qu’il faut recréer votre cluster, ce qui peut être problématique dans le cas où vous vous êtes basé sur un cluster appartenant à un Virtual Network un peu petit et ayant des contraintes d’adressage IP, comme pour un cluster privé.


Pour éviter cela, c’est très simple, il suffit soit de faire grandement attention lorsque vous touchez l’infrastructure sous jacente à votre cluster. Il est possible de totalement protéger votre cluster Scale Set Service Fabric si vous prenez la peine de créer 2 types de nœuds lors de la création de votre cluster, le premier type contiendra les services “systèmes” et le deuxième vos services applicatifs, il faudra bien entendu prendre ceci en compte lors de vos déploiements.


Via le portail Azure, lorsque vous créer votre cluster, vous pouvez faire comme cela :


image


Il est bien entendu possible de faire tout cela en ARM (car après tout qui déploie des ressources Azure depuis le portail Azure ....) Bref à la création, vous aurez 2 clusters Scale Set, à vous de mettre des droits restreints sur le scale set sysnode dans mon cas, et pour preuve :


image

Si vous creusez un peu plus le cluster, vous pourrez voir que les applications systèmes sont toutes dans le scale set “sysnode” à l’exception du DnsService qui est présent sur tous les nœuds.


Bref prenez soin de vos clusters avant que les problèmes surviennent, car ils n’arrivent jamais au bon moment et les résolutions sont soit pas simples à mettre en œuvre, soit assez destructives pour le cluster.


Remonter

Administrer, et modifier son site sur Wordpress

JUIN17

On a vu dans un article précédent, comment déployer Wordpress sur Azure en quelques clics, et très peu de temps, si vous ne savez toujours pas comment faire, voici un peu de lecture

 

Commençons déjà par nous rendre sur le nouveau portail Windows Azure, puis dans la partie Web Sites, choisissez votre site fraichement déployé. On peut donc voir ci dessous, le tableau de bord de notre application.

 

image

 

Ce tableau de bord, nous permet donc de rapidement visualiser les ressources utilisées par son site internet au niveau de notre instance. Ici par exemple on voit que mon Wordpress ne prend que 13,20Mb de place sur les 1024 qui me sont attribués.

 

Il est possible de voir aussi les différentes informations de monitoring récupérés sur notre site, comme par exemple le temps CPU, il est possible de configurer les données affichées dans ce graphique dans l’onglet Monitor, il est possible de rajouter des compteurs sur les différents types d’erreurs http, ou les requêtes effectuées avec succès sur notre site.

 

La partie de configuration nous permet de configurer les différents frameworks installés comme la version de .Net disponibles, et si PHP est activé. Il est possible de gérer aussi l’activation des logs, et on peut gérer les différentes clés de configuration associé au site.

 

Maintenant la partie qui me semble le plus intéressant, c’est la partie liée à la montée en charge de votre site :

 

image

 

En effet, c’est via cette interface qu’il est possible de soit utilisé des instances réservés ou des instances partagées, en gros c’est hébergement dédié ou mutualisé ! Il est d’ailleurs possible de mettre jusqu’à 3 instances de votre site en mode partagé.

Le dernier onglet quand à lui nous permet de voir les ressources liées à notre instance, donc ici notre base de données mysql.

 

Maintenant qu’on a vu ce qu’apporte le portail dans le management de notre site internet, il faut savoir qu’il est aussi possible de modifier notre site via WebMatrix, il suffit pour cela de cliquer sur le bouton WebMatrix dans le menu en bas du tableau de bord. Cela aura pour effet de configurer automatiquement votre WebMatrix afin qu’on puisse éditer simplement notre site.  Il installe par ailleurs une copie locale de notre environnement (mysql …) afin d’effectuer des tests sur notre machine.

 

image

Il est possible par la suite de modifier, le contenu du site, par exemple le thème en y ajoutant du code personnel, comme si dessus au dessus de chaque article :

image

Après avoir validé que vos modifications marchent en local, vous pourrez, effectuer une publication de votre site. Et comme on peut le voir ci dessous, il est possible de faire un package différentiel, et de ne pas redéployer l’intégralité du site à chaque fois

image

 

Dernière bonne nouvelle, la publication est aussi rapide que le déploiement du site, à condition que vous aillez une connexion supérieure à 56K !


Remonter

Déployer Wordpress sur Azure en 3 clics et un café !

JUIN11

Suite à toutes les nouveautés de la plateforme Windows Azure sortie en ce début juin, il y en a une que j’apprécie tout particulièrement, c’est la partie Web Sites, que vous pouvez retrouver sur le tout nouveau portail Azure : http://manage.windowsazure.com

On remarquera au passage, que Silverlight a disparu, et que ça y est vous pouvez y accéder sans à avoir à installer Silverlight !

image

 

Bon et sinon, à quoi ça sert, avant le 7 juin, quand je voulais faire un site web, je créais un nouveau rôle Azure, et c’est parti pour de l’ASP.Net, ou tout autre langage supporté par Windows Azure ! Alors certes c’était pratique on avait la main sur tout ce qui se passait, mais si on voulait installer Wordpress, par exemple, on avait en gros cela à faire : http://www.siteduzero.com/tutoriel-3-519694-deployer-wordpress-sur-windows-azure.html (si le tutoriel n’est pas mis à jour)

  • Création du serveur SQL Azure
  • Création de la base de données SQL Azure
  • Création du compte de stockage
  • Téléchargement  & configuration de Windows Azure Companion
  • Déploiement sur Azure
  • Installation de Wordpress
  • Configuration de Wordpress

 

Bon ce n’était pas les 12 travaux d’Astérix, mais en gros le blog n’était pas en ligne avant une petite demi journée, si on n’a rien oublié !

Bref, maintenant c’es fini, il suffit d’aller dans la partie Web Site, faire New > From Gallery et choisir Wordpress, ou autre chose, la galerie contient aussi Drupal, Orchad

image

 

Il vous suffit ensuite de donner un nom à votre blog, définir dans quel datacenter, vous voulez l’héberger, et utiliser une base de données MySQL existante ou en créer une nouvelle.

 

image

 

Ensuite, configuration du MySQL, soit lui donner un joli nom, et dire ou on le déploie

 

image

 

Alors là il vous suffit de prendre un café, je vous conseille un expresso, que vous avez préparer à l’avance, car ça déploie le tout en 1 à 2 minutes, qui a dit que déployer Wordpress sur Azure ça prenait 1/2 journée !

 

Et voilà, vous avez dorénavant un joli site Wordpress sur Azure, avec une interface d’administration, et un blog par la suite !

image

 

Bref, pour ma part j’avais un Wordpress chez Ikoula avant la refonte de mon blog en .Net, et vous mettez autant de temps à créer votre blog, sauf que derrière vous avez la puissance du Cloud !

Nous verrons dans un autre article, comment le nouveau portail nous permet de gérer nos instances déployés en tant que Web Sites.


Remonter

Utiliser TFS Preview avec Visual Studio 2010

OCTO8

Si vous avez la chance d’avoir accès à TFS Preview sur Azure, vous avez sûrement du vouloir l’essayer avec autre chose que Visual Studio 11 Developer Preview, par exemple Visual Studio 2010.

Or lorsque vous voulez rajouter la liaison à votre TFS dans Visual Studio, vous avez cette jolie erreur

image

 

En effet, il vous faut appliquer un KB afin que votre Visual Studio puisse se connecter à un TFS Preview sur Azure, la raison est je pense l’ouverture de la popup pour les informations de connexion.

Voici le lien de la KB : KB2581206 Notez qu’il vous faudra le SP1 de Visual Studio d’installé.


Remonter

Utiliser RIA Services & le Table Storage d’Azure

MAI29

Lors d’un Azure Camp organisé par ZeCloud, j’ai montré comment exposer le Table Storage de Windows Azure via un WCF Data Services, cela nous permettait d’avoir une exposition de nos données via OData. Vous pouvez retrouver la démonstration sur le codeplex de ZeCloud, et me demander plus d’infos au prochain Azure Camp

 

Dans la même idée, je me suis aperçu que la dernière version de RIA Services proposait quelque chose du même genre, via son toolkit, on va donc voir comment le mettre en place !

 

Commençons déjà par créer un projet de type Cloud, ainsi qu’une application Silverlight avec un site web et WCF RIA Services. Il nous faut ensuite ajouter les références, par NuGet c’est plus facile

image

 

 

Maintenant, il nous faut créer notre Model, pour cela, on va prendre un cas très simple :

 

public class Person : TableEntity
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    /// <summary>
    /// The property is set to be mentioned explicitly in the DataForm ...
    /// ONLY FOR THE DEMO
    /// </summary>
    public string MyPartitionKey
    {
        get
        {
            return base.PartitionKey;
        }
        set
        {
            base.PartitionKey = value;
        }
    }
}

On peut voir déjà quelques différences, premièrement on n’hérite pas de TableStorageEntity, mais de TableEntity qui hérite lui même de TableServiceEntity, et la deuxième c’est que pour le cas de la démo, j’ai voulu tester plusieurs PartitionKey, j’ai donc réexposé via une autre propriété celle ci afin qu’elle apparaisse dans mon DataForm Silverlight.

 

Maintenant, voyons notre contexte de données pour notre Table Storage

public class AzureServiceContext : TableEntityContext
{      
    public AzureServiceContext() : 
        base(RoleEnvironment
            .GetConfigurationSettingValue("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"))
    {
    }

    public TableEntitySet<Person> People
    {
        get { return base.GetEntitySet<Person>(); }
    }
}

 

Donc de même ici, on peut voir quelques différences, déjà au niveau de l’héritage, ici on hérite de TableEntityContext qui hérite lui même de TableServiceEntity.

De plus, on peut voir que l’on ne gère pas non plus la création des tables dans le Table Storage, vu que le toolkit de RIA Services s’en occupe pour nous.

Il ne vous reste plus qu’à créer votre Domain Service de façon classique, il faut juste renseigner aucun contexte.

image

 

Maintenant, implémentons notre DomainService

[EnableClientAccess()]
public class TSDomainService : TableDomainService<AzureServiceContext>
{

    protected override string PartitionKey
    {
        get
        {
            return null;
        }
    }

    public IQueryable<Person> GetPeople()
    {
        return EntityContext.People;
    }

    public void AddPerson(Person person)
    {
        EntityContext.People.Add(person);
    }

    public void DeletePerson(Person person)
    {
        EntityContext.People.Delete(person);
    }

    public void UpdatePerson(Person person)
    {
        EntityContext.People.Update(person);
    }
}

On a dorénavant la possibilité de faire un TableDomainService pour englober notre contexte Azure, de même les méthodes standards de CRUD sont facilitées.

Voyons maintenant la PartitionKey, par défaut  le toolkit met la PartitionKey à la valeur du nom du Domain Service, pour éviter qu’elle soit définit ainsi, il suffit de surcharger la PartitionKey, cependant cela veut dire qu’il vous faudra la spécifier à chaque fois, ce qui est mieux si vous voulez une bonne structure de donnée dans votre Table Storage

 

Et voilà le résultat dans un DataForm Silverlight

image

 

Vous pouvez retrouver les sources de la solution ici


Remonter

© Wilfried Woivré, tous droits réservés février 2018