A l’occasion de la migration de l’ensemble de notre environnement Exchange (6 serveurs de production, 3 serveurs d’archive, quelques dizaines de To et pas moins de 16000 BALs, tout de même), j’ai été confronté, pour la première fois, à des limites sur notre cluster VxRail principal, dit “le monstre”, dont j’ai déjà longuement parlé depuis environ un an. Plus exactement, ce n’est pas le cluster VSAN lui-même qui a atteint ses limites, mais plutôt le réseau DataCenter sur lequel nous l’avons bâti !
Vous le savez sans doute, si vous avez du VSAN chez vous, le SDS de VMware dispose de toute une batterie de paramètres permettant de définir très précisément la politique de stockage de chaque VM en fonction de son niveau de criticité, redondage, qualité de service souhaité, consommation d’espace etc. Etant donné que nous disposons d’un stretched cluster, on est capable d’aller encore plus loin en indiquant le niveau de plan de secours à appliquer sur chaque machine : ses données doivent-elles être répliquées entre les deux domaines, ou seulement sur un seul, typiquement.
Il se trouve que, dans le cas qui nous occupe, nous avons beaucoup de machines Exchange, précisément pour assurer un niveau de tolérance aux pannes suffisant en cas de défaillance d’un des sites, les bases de données Exchange étant répliquées 3 fois sur l’ensemble des 6 machines principales (via une matrice d’équilibrage). Or, pendant la phase de migration proprement dite, nous avions simplifié les choses au maximum pour le déménagement de chaque serveur et laissé la politique par défaut, PFTT=1 SFTT=0 (la procédure en question étant déjà assez complexe et IO intensive, en raison de notre choix de re-seeder l’ensemble des bases exchange à cette occasion).
Une fois cette grosse opération terminée, j’ai donc préparé les serveurs en question à leur “destination finale” c’est à dire une Storage Policy de type : PFTT=0 SFTT=1 associée à une redondance locale de type Erasure Coding, vue la grosse volumétrie de chaque machine. Mais comme de bien entendu, je n’avais pas anticipé que l’application de cette nouvelle politique à toutes les machines en même temps aurait posé un quelconque souci et que VSAN se serait illico attaché à les remettre en conformité toutes en parallèle ! Grosse erreur de ma part …
En effet, au bout de quelques minutes, nous avons reçu des appels de certains utilisateurs nous informant de gros ralentissements sur certaines applications. Concomitamment, certains graphiques réseau commençaient à s’affoler… Nous avons très vite identifié la cause, forcément : VSAN saturait une grosse partie de ses liaisons réseau ! Cette machine diabolique générait quasiment 40 Gbit/s soit environ 4,5 Go/s sur chacune de nos salles, provoquant des congestions sur les accès applicatifs des VMs.
Immédiatement, j’ai appliqué la contre-mesure : la limitation de bande passante allouée pour le resync VSAN (le resync concerne autant la reconstruction lors de pertes de disques et/ou serveurs que les modifications dans les Storage Policies ou même le Re-balancing). L’effet a été bénéfique dans l’instant puisque tout est revenu à la normale en quelques minutes. Au final, plus de peur que de mal, mais une grosse frayeur malgré tout…
NDLR : Du coup, forcément, j’ai encore appris plein de choses sur le pilotage de VSAN et nous avons par ailleurs – roue de Deming oblige – des pistes précises pour éviter que cela ne se reproduise, je vous en reparle en fin d’article.
Même si les choses étaient désormais sous contrôle, je voulais absolument disposer d’un moyen rapide et efficace de suivre ses grosses manoeuvres back-end sur VSAN pour ne plus être aveugle à l’avenir. J’ai creusé rapidement la piste réseau et j’ai construit un dashboard VRops spécifique pour suivre globalement l’activité réseau de notre cluster :
… Vous avez sur ces deux graphiques l’ensemble des deux derniers jours de cette semaine. Vous pouvez remarquer le joli pic de saturation bien plat de Jeudi midi. On le voit bien hein ? Ouh qu’il est beau … (ce tableau de bord est relativement simple à réaliser en fait, il suffit d’agréger le débit réseau global de l’ensemble des machines).
J’ai également trouvé facilement des petites commandes esxcli (elles doivent exister aussi sous PowerCLI) pour tracer l’activité de reconstruction/ré-équilibrage. Vous disposez en particulier de quelques commandes bien utiles:
esxcli vsan debug resync list : vous affiche la liste des objets VSAN faisant l’objet d’une reconstruction/mise à jour.
esxcli vsan debug resync summary get : vous affiche un résumé des opérations avec la volumétrie restant à traiter.
esxcli vsan resync throttle get : la limite de traffic actuelle de l’ESXi sur lequel vous vous trouvez.
esxcli vsan resync bandwidth get : la bande passante actuelle consommée par l’ESXi pour les activités back-end de VSAN.
Voici ce que ça donne dans la pratique :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
[root@selene-esx02:~] esxcli vsan debug resync list Group UUID Object UUID Component UUID To Host GB Left To Resync Intent ------------------------------------ ------------------------------------ ------------------------------------ -------------------------------- ----------------- ---------- 365d3c5c-aa96-4160-68ab-246e9698c2f0 cd743c5c-6a7f-73bd-4b61-246e9698c2f0 d1ff415c-92bb-12bc-7ab5-246e969b6f4c selene-esx15.yoyodyne.org 131.19 Compliance 365d3c5c-aa96-4160-68ab-246e9698c2f0 cd743c5c-6a7f-73bd-4b61-246e9698c2f0 c21e425c-fab1-4752-2da5-246e969b6f4c selene-esx12.yoyodyne.org 213.76 Compliance 365d3c5c-aa96-4160-68ab-246e9698c2f0 cd743c5c-6a7f-73bd-4b61-246e9698c2f0 * (all 2 components) -- 344.95 -- 365d3c5c-aa96-4160-68ab-246e9698c2f0 cc743c5c-4411-2a72-a93b-246e9698c2f0 f608425c-b417-914a-0bd9-246e969b6f4c selene-esx16.yoyodyne.org 153.52 Compliance 365d3c5c-aa96-4160-68ab-246e9698c2f0 cc743c5c-4411-2a72-a93b-246e9698c2f0 * (all 1 components) -- 153.52 -- 365d3c5c-aa96-4160-68ab-246e9698c2f0 * (all 2 objects) * (all 3 components) -- 498.47 -- 4b791e5b-34a8-3cbe-f117-246e969b6ccc 4e791e5b-bc5c-96a5-3b70-246e969b6ccc 4d1a425c-08ce-cfdd-1164-246e969b6978 selene-esx14.yoyodyne.org 43.47 Compliance 4b791e5b-34a8-3cbe-f117-246e969b6ccc 4e791e5b-bc5c-96a5-3b70-246e969b6ccc * (all 1 components) -- 43.47 -- 4b791e5b-34a8-3cbe-f117-246e969b6ccc * (all 1 objects) * (all 1 components) -- 43.47 -- 71c1ea5a-f261-e615-7899-246e969b6978 12c5ea5a-e6d2-b580-3627-246e969b6978 7220425c-4c7c-4ca8-5976-246e9698c2f0 selene-esx05.yoyodyne.org 134.95 Compliance 71c1ea5a-f261-e615-7899-246e969b6978 12c5ea5a-e6d2-b580-3627-246e969b6978 * (all 1 components) -- 134.95 -- 71c1ea5a-f261-e615-7899-246e969b6978 * (all 1 objects) * (all 1 components) -- 134.95 -- 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6a38335c-bc47-acf8-7765-246e9698c2f0 080a425c-54cd-fdfe-1ca6-246e969b6c60 selene-esx07.yoyodyne.org 175.48 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6a38335c-bc47-acf8-7765-246e9698c2f0 * (all 1 components) -- 175.48 -- 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 3c03425c-1a37-e21f-761e-246e969b6c60 selene-esx10.yoyodyne.org 135.45 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 3c03425c-22f6-dd1f-07e0-246e969b6c60 selene-esx09.yoyodyne.org 152.74 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 3c03425c-a66b-e41f-640e-246e969b6c60 selene-esx07.yoyodyne.org 141.57 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 3c03425c-b4f0-e61f-c292-246e969b6c60 selene-esx03.yoyodyne.org 135.67 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 3c03425c-e264-e81f-c21e-246e969b6c60 selene-esx07.yoyodyne.org 128.05 Compliance 1727335c-8e5a-5b9b-8f50-246e9698c2f0 6938335c-f0bd-09b8-c7ea-246e9698c2f0 * (all 5 components) -- 693.48 -- 1727335c-8e5a-5b9b-8f50-246e9698c2f0 * (all 2 objects) * (all 6 components) -- 868.95 -- b3ab275b-6629-c2c9-ffc6-246e9698bc20 b7ab275b-046b-8de5-cc01-246e9698bc20 9d0a425c-7059-b289-1e60-246e969b69a0 selene-esx07.yoyodyne.org 38.47 Compliance b3ab275b-6629-c2c9-ffc6-246e9698bc20 b7ab275b-046b-8de5-cc01-246e9698bc20 * (all 1 components) -- 38.47 -- b3ab275b-6629-c2c9-ffc6-246e9698bc20 * (all 1 objects) * (all 1 components) -- 38.47 -- 2765275b-8840-dd45-671f-246e969b7140 2b65275b-9459-5d73-a4a9-246e969b7140 6a20425c-ce2d-9f83-bf55-246e9698c028 selene-esx01.yoyodyne.org 144.65 Compliance 2765275b-8840-dd45-671f-246e969b7140 2b65275b-9459-5d73-a4a9-246e969b7140 * (all 1 components) -- 144.65 -- 2765275b-8840-dd45-671f-246e969b7140 * (all 1 objects) * (all 1 components) -- 144.65 -- 9e21965b-daf6-a4cb-d3d0-246e9698c028 a221965b-4899-e7e9-72db-246e9698c028 a220425c-304d-76e3-a016-246e969b6f4c selene-esx12.yoyodyne.org 111.52 Compliance 9e21965b-daf6-a4cb-d3d0-246e9698c028 a221965b-4899-e7e9-72db-246e9698c028 a220425c-6890-7ae3-126f-246e969b6f4c selene-esx16.yoyodyne.org 110.71 Compliance 9e21965b-daf6-a4cb-d3d0-246e9698c028 a221965b-4899-e7e9-72db-246e9698c028 * (all 2 components) -- 222.23 -- 9e21965b-daf6-a4cb-d3d0-246e9698c028 * (all 1 objects) * (all 2 components) -- 222.23 -- 34139a5b-84d4-e149-ff1e-246e969b6978 37139a5b-f20e-691d-8655-246e969b6978 9109425c-e2db-b69d-361a-246e9698bc20 selene-esx07.yoyodyne.org 102.49 Compliance 34139a5b-84d4-e149-ff1e-246e969b6978 37139a5b-f20e-691d-8655-246e969b6978 * (all 1 components) -- 102.49 -- 34139a5b-84d4-e149-ff1e-246e969b6978 * (all 1 objects) * (all 1 components) -- 102.49 -- f4cda85b-6c0f-c320-7878-246e9698c2f0 fccda85b-1692-4cf7-3202-246e9698c2f0 3518425c-48a0-e3cd-7475-246e969b69a0 selene-esx12.yoyodyne.org 68.94 Compliance f4cda85b-6c0f-c320-7878-246e9698c2f0 fccda85b-1692-4cf7-3202-246e9698c2f0 * (all 1 components) -- 68.94 -- f4cda85b-6c0f-c320-7878-246e9698c2f0 * (all 1 objects) * (all 1 components) -- 68.94 -- 1975275b-443a-171f-3a28-246e969b6914 1f75275b-f66b-061c-60ed-246e969b6914 451f425c-e0ed-e144-5dea-246e969b6f00 selene-esx18.yoyodyne.org 70.23 Compliance 1975275b-443a-171f-3a28-246e969b6914 1f75275b-f66b-061c-60ed-246e969b6914 * (all 1 components) -- 70.23 -- 1975275b-443a-171f-3a28-246e969b6914 * (all 1 objects) * (all 1 components) -- 70.23 -- 8c88fe5a-3866-7a02-3fbf-246e969b6978 9188fe5a-00a9-de7d-4268-246e969b6978 6a22425c-3a04-f999-72b8-246e969b7140 selene-esx11.yoyodyne.org 138.66 Compliance 8c88fe5a-3866-7a02-3fbf-246e969b6978 9188fe5a-00a9-de7d-4268-246e969b6978 * (all 1 components) -- 138.66 -- 8c88fe5a-3866-7a02-3fbf-246e969b6978 * (all 1 objects) * (all 1 components) -- 138.66 -- e0a08f5b-b89b-c904-357c-246e9698bd30 e9a08f5b-bae4-c9a0-2e93-246e9698bd30 4c4d405c-bab9-68b2-d178-246e969b6c60 selene-esx10.yoyodyne.org 5.33 Rebalance e0a08f5b-b89b-c904-357c-246e9698bd30 e9a08f5b-bae4-c9a0-2e93-246e9698bd30 * (all 1 components) -- 5.33 -- e0a08f5b-b89b-c904-357c-246e9698bd30 * (all 1 objects) * (all 1 components) -- 5.33 -- [root@selene-esx02:~] esxcli vsan debug resync summary get Total Number Of Resyncing Objects: 11 Total Bytes Left To Resync: 2243095998464 Total GB Left To Resync: 2089.05 [root@selene-esx02:~] esxcli vsan resync throttle get Level: 0 Mbps [root@selene-esx02:~] esxcli vsan resync bandwidth get Rate: 16 Mbps [root@selene-esx02:~] |
Vous disposez aussi, dans la section “Cluster->Monitor->VSAN->Resyncing components”, d’un bouton “Resync Throttling” qui vous affiche la liste de tous les hosts et leur consommation instantanée :
Au final, ce coup de chaud récent nous a fait prendre conscience de plusieurs choses.
D’une part que nous avions, en présence de notre cluster de 20 Noeuds full flash, un monstre de performance (on en avait déjà une certaine idée, mais rien de vraiment “atteignable” au départ) capable de saturer gentiment, OKLM, une grande partie de nos liaisons DataCenter. Oui, d’ailleurs, j’ai oublié de préciser que pendant que VSAN faisait ses petites affaires sympathiques, la latence disque (back-end donc) n’a jamais dépassé les 600/700 micro-secondes… autant dire qu’il en avait encore sous la pédale, s’il avait pu disposer de plus de bande passante ! Ca laisse rêveur.
Ensuite, que nous savons désormais quelles sont les limites de notre infra aujourd’hui s’il on veut progresser encore en terme de qualité de service : l’architecture réseau de notre DataCenter, basée sur des choix réalisés il y a déjà quasiment 5 ans et qu’il faut, sinon repenser, du moins adapter aux nouvelles exigences de ces nouveaux ensemble scale-out basés sur IP.
Enfin, de manière plus concrète et court terme, il va nous falloir rapidement faire évoluer la partie interconnexion locale des serveurs de notre VxRail. Aujourd’hui, en raison de l’architecture actuelle de notre réseau DataCenter “Nexus 7000 – 5000 – 2000”, tous les échanges entre machines remontent inévitablement à travers les interconnexion entre nos Top-of-rack Nexus 2000 et les agrégateurs Nexus 5000. Nous allons vraisemblablement mettre en oeuvre deux étapes : d’abord ajouter des liaisons uplink vers nos 5000 pour passer de 4×10 Gbit/s actuellement à 8×10 (afin de repousser la limite actuelle) ; ensuite, acheter des switchs dédiés pour chaque ensemble de machines afin qu’au moins les échanges locaux restent sur les switchs et ne remontent pas vers les 5000.
Qu’en pensez-vous ? Que d’aventures !
Bonjour,
Merci pour ce super article. Serait il possible de détailler la façon dont vous avez crée le dashboard? je n’arrive pas à stacker les métriques de mes ESX.
Merci encore
Bonjour Vincent !
Merci pour votre commentaire. Pour le dashboard, c’est très simple à montrer mais plus galère à détailler à l’écrit :) . Du coup, je vais essayer de vous faire un petit article bien visuel pour vous montrer comment on l’obtient. Vous êtes en quelle version de VRops ?
Cédric
Bonjour Cédric,
merci pour votre retour et la proposition d’un nouvel article autour de la création d’un dashboard VROPS.
Nous utilisons la dernière version de l’outil (7.0)
Vincent
5
Hello Cédric,
A la première lecture de l’article j’ai cru que tu saturais les NICs des Hosts et je me suis dit que Network IO Control t’éviterait ce genre de désagrément mais en relisant une seconde fois j’ai compris que ce sont tes uplinks entre les Nexus 2000 et 5000 qui ont atteint leur limites.
L’Adaptive Resync de vSAN 6.7 devrait aider à éviter que le traffic de resync étouffe tous les IO des VMs.
Qu’as tu mis en place en pour améliorer la qualité de service sur la fabrique physique ?
Bravo en tout cas pour la manière dont tu as résolu l’incident : limiter le trafic de resync pour gérer l’urgence et créer un dashboard vROPS pour anticiper une éventuelle récidive.
Super ton blog, je bookmark :)
Jérémie.
Merci pour ton retour Jérémie. Effectivement j’espère que l’adaptative resync nous aidera un peu pour ce genre de cas :)
Pour la suite, on va faire le gros dos durant 2019 et on proposera en 2020 de mettre des switchs locaux de chaque coté pour qu’au moins les resync “locales” ne remontent plus vers les 5000. Ca limitera les échanges vers les coeurs de réseau aux VM et aux resync stretched :)
Qu’est-ce qui n’était pas clair à ton avis, vis à vis de ta première lecture ? Pour que je puisse améliorer le rédac de l’article
J’ai parcouru un peu rapidement l’article en première lecture et je n’ai pas fait tout de suite le lien entre les 40Gb de débit que tu constates lors du resync et les 4×10 Gbit/s d’uplink que tu mentionnes au bas de l’article. En seconde lecture, ça m’a sauté aux yeux.
Dans le cas que tu présentes, je ne vois que la gestion de qualité de service par CoS tagging ou DSCP marking pour éviter qu’un trafic ne puisse totalement étouffer les autres mais en toute honnêteté je n’ai aucune expérience pratique de la chose et ne sait pas dire quels sont les prérequis et les limitations.
5
Bonjour
Merci pour cet article
C’est peut a cause de ça que maintenant Dell/EMC
Vend le réseau dédié qui va avec a base de switch dell
Ils en font quasiment un prérequis d’ailleurs