Salut la compagnie.
Avant d'annoncer le problème que je rencontre, je mets ici un diagramme qui (je penses) vaut mieux qu'une longue explication.

Avec
S1 et S2, les 2 serveurs physiques
VM1 et VM2, les 2 machines virtuelles
et le reste je pense que c'est explicite.
Les HAProxy redirigent vers l'un ou l'autre Apache.
Wordpress réside dans un FS GlusterFS partagé entre les 2 VMs.

J'ai récemment installé memcached sur les 2 VMs afin de créer un cache du site (vu que la charge d'une simple page pouvait prendre plus de 8s - sans trafic, le blog est pour l'instant méconnu).
Initialement, je voulais créer un cache au niveau des HAProxy, afin de court-circuiter toute la chaîne mais apparemment ce n'est pas recommande (HAProxy n'est pas vraiment fait pour ça).
J'ai ensuite essayé de le configurer au niveau de Apache (d'abords sans memcached avec un cache sur disque, puis avec memcached) mais les résultats n’étaient pas satisfaisants.
Ensuite j'ai mis en place le cache au niveau de Wordpress avec W3TC et memcached avec de meilleurs résultats (temps de chargement de la page aux alentours de 1s) mais j'ai de temps en temps des montées ponctuelles à 4s.

Je voulais dans un premier temps savoir ce que vous (ceux qui ont un blog - je penses notamment à @Aerya) utilisez sur vos infra afin de limiter le temps de chargement.
Ensuite, dans mon cas, est-ce que vous pensez que je suis limité par la puissance de calcul et ce dont a besoin PHP (les 2 serveurs sont des serveurs "premier prix" donc pas beaucoup de puissance de calcul)? Des optimisations à apporter au niveau de la conf PHP?
Je suis plutôt limité par le fait que j'ai une réplication entre les 2 bases de données, ce qui prends plus de temps pour chaque query?

Dans un second temps, j'ai mis en place une supervision des bases de données et du memcached et j'ai des alertes dans Nagios :


J'ai essayé de chercher sur le web comment résoudre ces alertes mais je suis pas vraiment calé niveau BDD donc la plupart des solutions sont plutôt difficiles à appréhender.
Ces alertes sont-elles "normales" pour un site sans trafic? Je devrais m'en soucier?

Merci pour toute idée de votre part.

Salut, niveau serveurs physiques c'est quoi exactement comme cpu ? Modèle ? Combien de core ? Fréquence ?

Niveau ram ils disposent de combien ?

Le site hébergé dispose de toute la machine il est cloisonné un un nombre de core ? de ram ?

Les disques : ssd sata, nvme ? hdd ?

Serveur de bdd mysql ? mariadb ? Quelle version ?

Php CGI ou FPM ? Quelle version ?

Si FPM, un pool spécifique a été créé ?

Je pose beaucoup de question mais c'est pour t'aider au mieux 😃

Plop,

Premièrement, j'espère que tes disques sont des SSD, indispensable pour ça en 2020.

Secondement, au vu du nombre de HITS extrêmement faible, ton memcached ne sert à rien actuellement, quel tuto as-tu suivi ? Celui-ci me semble sympa : https://www.cloudways.com/blog/wordpress-memcached-server-tutorial/

Pourrions nous avoir l'URL du site et la config de tes HAProxy/apache stp?

En terme de plugin WordPress, j'ai entendu beaucoup de bien de WP-Rocket

    Salut, je suis en train de réfléchir à un changement mais pour l'instant j'utilise le couple Redis/WP Rocket. Ce dernier est payant mais vaut le coup. Je suis sous Apache2.
    Je pense passer à Nginx, Redis + NginxBlocker voire WPRocket (s'ils me font une promo) sinon W3TC (gratuit).

    Quel est ton objectif avec la réplication temps réel ?

    Niveau matériel, il s'agit des serveurs suivants :

    • Online : Start-2-S-SATA et la VM a 1 cœur et 2G ram
    • Kimsufi : KS-7 et la VM a 2 cœurs et 2G ram

    Disques SATA pour les 2 (les versions SSD offrent moins d'espace et j'utilise ces serveurs aussi pour de la sauvegarde de fichiers personnels et les versions SSD ne disposent pas de suffisamment d'espace pour le prix que je suis prêt à mettre).

    Pour la BDD c'est MariaDB installée depuis les dépôts Debian Buster (d'ailleurs tout est installé depuis les dépôts "à l'ancienne" - pas de conteneur).

    BXT : c'est bien ce tuto que j'ai suivi. C'est pour cela que je ne comprends pas l'alerte de hit... pourquoi il n'utilise pas vraiment memcached.

    Pour l'histoire, c'est une amie qui voulait avoir un blog sans rien payer pour l'instant (c'est juste pour voir ce que c'est) et comme j'ai ces 2 serveurs sous la main et que j'aime bien me prendre la tête / apprendre, je me suis proposé de lui mettre ça en place.
    Si jamais ça devient une "activité" pour elle et elle est prête à y mettre de l'argent, je penses que je prendrais un DEV1-S chez Scaleway, vu que c'est du "cloud" pas de soucis de disque dur qui lâche ou autre.

    L’idée à la base était que le site soit accessible à tout moment même si une des machines/VM n'est plus accessible, d’où la réplication maître-maître entre les BDD et le GlusterFS pour héberger Wordpress. Mais en fait c'est plus parce que j'avais jamais mis ça en place et j’étais curieux de voir si/comment ça marche 😆

    Pour les confs (en enlevant les parties non pertinentes) :
    HAProxy

    global
            log /dev/log    local0
            log /dev/log    local1 notice
            chroot /var/lib/haproxy
            stats socket /run/haproxy/admin.sock mode 660 level admin
            stats timeout 30s
            user haproxy
            group haproxy
            daemon
    
            ca-base /etc/ssl/certs
            crt-base /etc/ssl/private
    
            ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
            ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
    
            ssl-default-server-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
            ssl-default-server-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
    
            tune.ssl.default-dh-param 2048
    
    defaults
            option  forwardfor
            log     global
            mode    http
            option  httplog
            option  dontlognull
            option  http-server-close
            timeout connect 5000
            timeout client  50000
            timeout server  50000
            errorfile 400 /etc/haproxy/errors/400.http
            errorfile 403 /etc/haproxy/errors/403.http
            errorfile 408 /etc/haproxy/errors/408.http
            errorfile 500 /etc/haproxy/errors/500.http
            errorfile 502 /etc/haproxy/errors/502.http
            errorfile 503 /etc/haproxy/errors/503.http
            errorfile 504 /etc/haproxy/errors/504.http
    
    frontend http-front
            bind xx.xx.xx.xx:80
            capture request header Host len 20
            acl with_certificates hdr(host) -i -m end mydomain.com
            acl my_domains hdr(host) -i -m end mydomain.com
            http-request deny unless my_domains
            redirect scheme https code 301 if !{ ssl_fc } with_certificates
            default_backend http-back
    
    frontend https-front
            bind xx.xx.xx.xx:443 ssl crt /etc/letsencrypt/services/haproxy/certs/ alpn h2,http/1.1
            capture request header Host len 20
            acl my_domains hdr(host) -i -m end mydomain.com
            http-request deny unless my_domains
            reqadd X-Forwarded-Proto:\ https
            default_backend http-back
    
    backend http-back
            balance roundrobin
            cookie SERVERUSED insert indirect nocache
            option httpchk HEAD /healthcheck HTTP/1.0\r\nUser-agent:\ ha-proxy
            default-server maxconn 500
            server vm1 vm1.lan:80 cookie vm1 check inter 10s weight 15
            server vm2 vm2.lan:80 cookie vm2 check inter 10s weight 10

    Apache

    <VirtualHost *:80>
    
            ServerName mydomain.com
    
            ServerAdmin webadmin@mydomain.com
            DocumentRoot /var/www/mydomain/wordpress
    
            <Directory /var/www/mydomain/wordpress>
                    AllowOverride All
            </Directory>
    
            SetEnvIf X-Forwarded-For "^.*\..*\..*\..*" forwarded
            ErrorLog ${APACHE_LOG_DIR}/mydomain/error.log
            CustomLog ${APACHE_LOG_DIR}/mydomain/access.log combined env=!forwarded
            CustomLog ${APACHE_LOG_DIR}/mydomain/access.log proxy env=forwarded
    
    </VirtualHost>

    Donc en conclusion, ça vient bien des machines qui ne sont pas assez puissantes (CPU, HDD au lieu de SSD, etc).
    Pour l'instant je vais laisser ça comme ça, même si je suis intrigué par les alertes memcached et mariadb de mon premier post.

      Ok rien de spécial.

      Ton memcached ne sert concrètement à rien là, autant le virer. Aucun cache défini au niveau de apache2?

      Passe déjà des SSD et utilise le combo Redis/WP-Rocket

      Tu peux aussi utiliser un Varnish qui fera un excellent travail

      Malakai oui clairement niveau hardware ça pêche un peu mais ça devrait quand même être à peu près fluide ce wordpress, sauf si il est composé de nombreux plugins ou de divi (ou un thème "lourd" du genre).

      Je fais tourner des petits wordpress sans trop de soucis sur un kimsufi de 2015 avec 2 cores et 4go de ram et un bon vieux hdd sata.

      Par contre j'ai touché à la conf des pool de php (en mode fpm), les sites tournant dorénavant sur php7.4 et j'ai, comme le disent les autres, mis wp-rocket qui fait du très bon taff pour wordpress.

      Je n'ai ni redis ni varnish, c'est très performant mais quand un site met moins d'une seconde à s'afficher je ne me prends pas la tête plus que ça 😃

      Pas de memcache non plus.

      Autre grosse différence je n'ai pas ce système de haute dispo qui doit, au vu des perfs des machines, leur faire un peu de mal je pense (mais là je ne m'y connais pas assez pour confirmer).

      Sinon niveau mysql/mariadb également j'ai retouché aux params qui font du serveur de bdd quelque chose de très stable mais font baisser un peu les réelles capacités.

      J'ai installé une nouvelle VM sur le Kimsufi avec 1 cœur et 2G ram et fais une installation rapide de MariaDB, Apache et Wordpress (sans me soucier de la partie sécurité pour l'instant), le tout sans réplication de la bdd et sans FS partagé entre 2 machines, et là j'ai des temps de chargement de la page plus que corrects (moins de 1s et la plupart du temps moins de 0.5s).
      Par contre le test n'a pas été réalisé au travers des HAProxy mais directement vers la VM.
      Le problème semble donc bien venir du fait que la réplication bdd et le FS Glusterfs étaient activés (sachant que la communication a lieu au travers d'un vpn entre les 2 machines et qu'une machine est hébergée chez Online et l'autre chez Kimsufi, je pense que c'est ça qui cause problème).
      Je vais réinstaller la VM et la stack LAMP proprement et migrer le blog sur cette nouvelle machine pour voir si tout roule, mais je penses à présent que l’idée d'installer tout ça avec redondance sur le matériel que j'ai n’était pas des meilleures.

      VM réinstallée et le blog Wordpress a été migré. Résultat, temps de chargement d'environ 0,6s en moyenne (sans memcached et sans cache du tout d'ailleurs) ; bien loin des fluctuations entre 4s et 8s sans cache et 1,5-1,7s avec cache.
      Conclusion : ne pas essayer de mettre en place des infra trop complexes avec réplication de BDD ou de FS avec du matériel "premier prix".
      Je suis curieux de savoir si j'aurais eu les mêmes soucis de temps de chargement si les 2 VMs se trouvaient dans le même réseau (ici une VM est hébergée chez Online et l'autre chez Kimsufi), mais je suis pas prêt à prendre un autre dédié pour tester.

      Malakai a renommé le titre en [Résolu] Optimisations Wordpress + dependances.

      Dans le même réseau ce sera mieux oui, enfin pas chez Kim mais chez Online c'est prévu pour.

      Répondre…