J'envisage de mettre en place un cache de calmar (ou éventuellement de vernis) sur un système avec des disques SSD.
L'avantage évident est que ces systèmes ont de grandes vitesses de lecture et je m'attends à ce que mes taux de réussite soient assez élevés.
Supposons que je puisse mettre 7 SSD dans une configuration RAID. (il y a des cas qui me permettront de ranger beaucoup plus)
Questions de mise en œuvre:
Dois-je utiliser RAID0? (Je m'attends à ce qu'un disque tombe en panne, donc cela semble dangereux.)
Dois-je utiliser RAID10? (Cela réduit de moitié l'empreinte de mon disque, ce qui est coûteux.)
Dois-je utiliser RAID5? (Les disques SSD sont connus pour avoir de «mauvaises» performances d'écriture et limites d'écriture, et toutes les écritures de parité supplémentaires peuvent ralentir considérablement cela.)
Dois-je traiter chaque disque comme sa propre banque de données Squid? (Dans quelle mesure Squid gère-t-il plusieurs magasins de données? Et que se passe-t-il si / quand l'un échoue?)
Dois-je ignorer les banques de données et simplement faire les SSD dans de grandes partitions SWAP et laisser la machine virtuelle Linux faire la chose? (semble bâclé)
Tout conseil de personnes utilisant des disques SSD dans des environnements de production serait grandement apprécié. (surtout si vous les utilisez pour des caches HTTP)
Réponses:
Nous utilisons du vernis sur les disques SSD depuis 9 mois, cela a extrêmement bien fonctionné pour nous. Nous avons précédemment utilisé un cache de mémoire de calmar uniquement avec une couche carpe. Cela a fonctionné, mais la fragmentation de la mémoire était un vrai problème nécessitant des redémarrages fréquents. Squid 2.x n'utilisera également qu'un seul cœur, ce qui le rend plutôt inefficace sur le matériel actuel.
Pour notre site, qui est très convivial pour le cache, nous voyons environ 10% d'utilisation du processeur sur une machine à 8 cœurs desservant 100 Mbit / s de trafic. Dans nos tests, nous manquons de bande passante avant d'atteindre les limites du processeur avec 2 ports 1 Go.
J'ai quelques conseils pour exécuter le vernis avec un cache ssd.
Les performances d'écriture aléatoire sont vraiment importantes. Nous avons essayé plusieurs fournisseurs de disques SSD avant de nous installer sur l'Intel X-25m. Nous avons vu des publications aussi faibles que 0,1 Mo / s pour les écritures aléatoires 4K, nous obtenons des écritures aléatoires 24 Mo / s 4k avec le x-25m.
Raid0. Le cache dans 2.0 n'est pas persistant, donc pas besoin de s'inquiéter de la redondance. Cela fait mal les redémarrages, mais ceux-ci sont rares. Vous pouvez faire des choses comme charger une nouvelle configuration et purger les objets sans redémarrer.
mode mmap. Le cache de vernis peut être mmappé dans un fichier ou utiliser un espace de swap. L'utilisation de swap n'a pas bien fonctionné pour nous, elle a tendance à utiliser plus de bande passante d'E / S pour desservir la même quantité de trafic. Il y a un readahead à 4 secteurs dans le code du swapin linux, nous avons écrit un patch pour le supprimer mais ne l'avons pas essayé en production.
Planificateur de délais. Avec 2.6.28+, cela est compatible avec SSD et fonctionne bien. Nous avons essayé noop, mais nous avons constaté que le délai était plus juste car la bande passante d'E / S devient limitée.
Désactivez la lecture anticipée. Puisqu'il n'y a pas de retard de rotation, inutile de lire des données supplémentaires simplement parce que vous en avez besoin. la bande passante d'E / S est précieuse sur ces choses.
Exécutez 2.6.28+. mmap de beaucoup d'espace sur linux donne au gestionnaire de mémoire un bon entraînement, mais les patchs lru divisés aident beaucoup. L'utilisation de kswapd cpu a beaucoup diminué lors de la mise à jour.
Nous avons publié notre fichier vcl ainsi que plusieurs outils que nous utilisons avec du vernis dans le texte du lien . Le vcl comprend également un hack soigné implémentant un serveur de géoiplookup très rapide basé sur la base de données maxmind.
la source
Je n'utilise pas de SSD comme caches HTTP, mais je peux faire ces observations:
Tous les SSD ne sont pas égaux, vous devez donc faire très attention à choisir des disques décents. FusionIO fabrique des SSD soutenus par PCIe qui sont vraiment des performances haut de gamme (avec une capacité relativement faible), mais coûteux. Les SSD X25-E SLC d'Intel fonctionnent très bien et sont plus abordables, mais toujours de faible capacité. Fais tes recherches! Je peux certainement recommander les variantes X25-E SLC, car je les utilise dans les systèmes de production.
Il existe d'autres SSDS qui peuvent vous donner une grande vitesse de lecture / écriture séquentielle, mais la chose importante pour quelque chose comme un cache est une E / S aléatoire, et beaucoup de SSD donneront approximativement les mêmes performances aléatoires que les disques en rotation. En raison des effets d'amplification d'écriture sur les SSD, les disques en rotation fonctionnent souvent mieux. De nombreux SSD ont des contrôleurs de mauvaise qualité (par exemple, des contrôleurs JMicron plus anciens), qui peuvent souffrir de performances considérablement dégradées dans certaines situations. Anandtech et d'autres sites font de bonnes comparaisons avec des outils comme iometer, vérifiez-les.
Et, bien sûr, les SSD sont petits. L'Intel X25-E, que je dirais être le meilleur SSD SATA que j'ai vu, n'est disponible qu'en versions 32 et 64 Go.
Pour les niveaux RAID, les notes de performances RAID standard s'appliquent toujours. Une écriture sur un RAID 5 implique essentiellement la lecture du bloc de données que vous allez modifier, la lecture du bloc de parité, la mise à jour de la parité, l'écriture du bloc de données et l'écriture de la parité, de sorte que les performances seront toujours moins bonnes que les autres RAID niveaux, même avec des SSD. Cependant, avec des disques comme le X25-E ayant des performances d'E / S aléatoires aussi élevées, cela importe probablement moins - car il surclassera toujours les E / S aléatoires sur les disques en rotation pour une matrice de taille similaire.
D'après ce que j'ai vu, la bande passante du contrôleur RAID est saturée trop tôt pour tirer le meilleur parti d'un ensemble RAID à 7 disques, au moins en ce qui concerne les performances séquentielles. Vous ne pouvez pas obtenir plus d'environ 800 Mo / s avec les modèles actuels de contrôleurs SATA (3ware, areca, etc.). Avoir plus de baies plus petites, sur plusieurs contrôleurs (par exemple, plusieurs RAID1 plutôt qu'un seul RAID10) améliorera cela, bien que les performances individuelles de chaque baie en souffriront.
En ce qui concerne un cache HTTP, je pense que vous seriez mieux servi avec un tableau décent de disques en rotation et beaucoup de RAM. Les objets fréquemment consultés resteront dans le cache mémoire - soit dans le cache interne de squid, soit dans le cache fs de votre système d'exploitation. Le simple fait de donner plus de RAM à une machine peut réduire considérablement le chargement du disque. Si vous utilisez un grand cache Squid, vous aurez probablement besoin de beaucoup d'espace disque, et les SSD hautes performances ne sont toujours que de capacité relativement faible.
la source
Je ne connais pas très bien les disques SSD, mais je peux parler du type d'architecture que j'ai utilisé qui peut aider à résoudre certains de vos problèmes.
Fratrie
Dans mon cas, j'ai construit quatre serveurs avec 16 Go de RAM chacun. J'ai défini 9 Go comme cache en mémoire pour Squid à utiliser. Je les ai configurés comme un ensemble de frères et sœurs afin qu'une requête adressée à un serveur interroge les autres avant de rechercher les données. Au total, j'avais 36 Go de mémoire cache. Je ne dépasserais pas quatre frères et sœurs car la communication entre eux commence à s'embourber.
VIP
J'ai configuré un VIP pour les quatre serveurs avec lesquels le client peut parler. Cela a résolu ce qui se passe lorsqu'un serveur tombe en panne.
Les enfants
J'ai configuré mon application Web pour interroger un serveur Squid local fonctionnant sur 127.0.0.1. Ensuite, le parent de cette instance Squid a été configuré pour être le VIP. Cela permet un basculement très rapide en cas de panne de l'ensemble du VIP. Si les parents ne répondent pas, l'enfant demande directement les services. C'est également pratique si vous utilisez un seul serveur Squid et que vous n'avez pas de VIP. Bien sûr, si l'instance locale de Squid sur votre serveur Web tombe en panne, tout s'arrête.
Squid lui-même
Je n'ai pas vraiment regardé 3.0, mais 2.x est toujours monothread. À un moment donné, vous allez manquer de tampons CPU ou TCP. Je répartirais le cache sur 2-3 boîtes de moins si possible. Vous pouvez également envisager de partitionner vos fermes Squid à l'avenir si vous voyez le système se développer.
Dans tous les cas, bonne chance avec votre build SSD. Je suis curieux de savoir comment cela se passe, car je vais probablement suivre cette voie à l'avenir.
la source
Pourquoi envisagez-vous même un raid 10 ou 5. Vous voulez des performances ici. Vous ne vous souciez pas si les disques tombent en panne, car c'est un cache uniquement.
Utilisez simplement le raid 0 ou séparez-les. Je pense que séparer serait mieux, car une panne de disque ne réduirait pas tout votre cache.
la source
La documentation de Squid recommande de ne pas utiliser RAID mais de configurer des répertoires de cache supplémentaires sur des disques supplémentaires.
la source