Ne sous-estimez pas la consommation réseau de VSAN…

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 :

[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 !