Stratégie de backup & restore de base postgresql Synapse

Problématique

Comment backuper et restaurer une base postegresql Synapse sur une Freebox avec un watchdog embêtant... Sachant qu'un backup plain SQL n'est pas exploitable sur la VM Freebox parce qu'on ne peut pas importer les tables et les index séparément et donc que ça fait crasher lors de la restauration par le watchdog matériel de la Freebox qui fait rebooter la box.

Créer un backup custom

/etc/systemd/system/synapse-backup.service :

[Unit]
Description=Synapse database backup
After=postgresql.service

[Service] Type=oneshot User=postgres ExecStart=/bin/bash -c '\ echo "Warm-up cache..." && \ psql -d synapse -c "SELECT COUNT() FROM events;" > /dev/null 2>&1 && \ psql -d synapse -c "SELECT COUNT() FROM event_json;" > /dev/null 2>&1 && \ psql -d synapse -c "SELECT COUNT() FROM state_groups_state;" > /dev/null 2>&1 && \ sleep 30 && \ echo "Démarrage backup..." && \ TMPFILE=$(mktemp /home/synapse/backups/synapse_tmp_XXXXXX.dump) && \ pg_dump -Fc --exclude-table-data e2e_one_time_keysjson synapse > $TMPFILE && \ mv $TMPFILE /home/synapse/backups/synapse$(date +%%Y%%m%%d%%H%%M).dump && \ echo "Backup complet."' ExecStartPost=/bin/bash -c 'find /home/synapse/backups -name "synapse.dump" -mtime +7 -delete && find /home/synapse/backups -name "synapsetmp*.dump" -delete'

[Install] WantedBy=multi-user.target

/etc/systemd/system/synapse-backup.timer :

[Unit]
Description=Synapse database backup - toutes les nuits à 3h
Requires=synapse-backup.service

[Timer] OnCalendar=--* 03:00:00 Persistent=true

[Install]

WantedBy=timers.target

Stratégie de restauration de base pour éviter le watchdog de la Freebox

# 1. Arrêter Synapse
systemctl stop synapse
# 2. Recréer la base avec la bonne collation
sudo -u postgres psql -c "DROP DATABASE IF EXISTS synapse;"
sudo -u postgres psql -c "CREATE DATABASE synapse OWNER synapse_user ENCODING 'UTF8' LC_COLLATE='C' LC_CTYPE='C' TEMPLATE template0;"
# 3. Importer le schéma
pg_restore -h localhost -U synapse_user -d synapse \
  --no-privileges --no-owner --section=pre-data synapse_XXXXXXXX.dump
# 4. Importer les données table par table (évite le watchdog Freebox)
pg_restore --list synapse_XXXXXXXX.dump | grep "TABLE DATA" > /tmp/tables_list.txt
while IFS= read -r line; do
  pg_restore -h localhost -U synapse_user -d synapse \
    --no-privileges --no-owner -L <(echo "$line") synapse_XXXXXXXX.dump
  sleep 20
done < /tmp/tables_list.txt
# 5. Truncate obligatoire
psql -h localhost -U synapse_user -d synapse -c "TRUNCATE e2e_one_time_keys_json;"
# 6. Index un par un (sauf device_inbox_stream_id_user_id)
pg_restore --list synapse_XXXXXXXX.dump | \
  grep -E "^[0-9]+;.*INDEX|^[0-9]+;.*CONSTRAINT|^[0-9]+;.*FK " | \
  grep -v "device_inbox_stream_id_user_id" > /tmp/indexes_only.txt
while IFS= read -r line; do
  pg_restore -h localhost -U synapse_user -d synapse \
    --no-privileges --no-owner -L <(echo "$line") synapse_XXXXXXXX.dump
  sleep 30
done < /tmp/indexes_only.txt
# 7. Index problématique manuellement
psql -h localhost -U synapse_user -d synapse -c "
CREATE INDEX IF NOT EXISTS device_inbox_stream_id_user_id ON device_inbox(stream_id, user_id);"
# 8. Démarrer Synapse
systemctl start synapse

Utiliser 3 vCPU sur sa Freebox Delta pour sa VM

Même si l'IHM ne nous permet que de choisir 1 ou 2 vCPU, il est possible de forcer 3 vCPU si on a +4Go de RAM sur sa Freebox Delta.

En activant les outils de développeur, réseau, modifier la valeur des vCPU souhaitée puis cliquer sur Appliquer.

Deux requêtes vont être visible, une PUT et une GET. Clic droit, modifier et renvoyer et mettre à jour la valeur de vcpus à 3 puis cliquer sur envoyer.

{"id":1,"name":"ArchServer","disk_path":"","disk_type":"","cd_path":"","memory":15360,"vcpus":3,"status":"stopped","enable_screen":false,"bind_usb_ports":[],"enable_cloudinit":false,"cloudinit_hostname":"","cloudinit_userdata":"","mac":"","os":"unknown"}

Démarrer la VM et constater que nous avons bien à présent 3 vCPU !

Un cat /proc/cpuinfo confirme la présence de 3 vCPU :


processor   : 0
BogoMIPS    : 50.00
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant : 0x0
CPU part    : 0xd08
CPU revision    : 1

processor : 1 BogoMIPS : 50.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 1

processor : 2 BogoMIPS : 50.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 cpuid CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd08 CPU revision : 1

Le blog passe derrière Anubis

Pour celles et ceux qui ne connaîtraient pas encore Anubis, c'est un système permettant de filtrer les connexions entrantes sur ses environnements par la preuve de travail. Pour faire simple, c'est un petit "péage" sur la route qui mène jusqu'à ici, le péage étant de la puissance de calcul pour calcul un hash. C'est quasi-transparent pour l'utilisateur humain standard mais c'est totalement ruineux pour les entreprises qui veulent beaucoup utiliser cette route. C'est un vieux système, appelé hashcash.

Le plus gros changement si vous êtes un humain, c'est que vous pourrez tomber sur une page de redirection de temps en temps avec ce petit personnage :

Anubis

Quel intérêt pour le blog ? Réduire la charge et la bande passante d'une part. Et arrêter d'alimenter des IA qui réutilisent le travail des individus sans discernant de considération, de licence d'autre part... Ca m'a permis de remettre un peu les mains dans ma config nginx, de l'adapter et l'optimiser un peu. Ca ne fait jamais de mal.

IHM Web administration Matrix

IHM Web administration Matrix

Repo git : https://github.com/Awesome-Technologies/synapse-admin (AUR)

Rajouter dans /etc/nginx/nginx.conf pour rendre accessible le endpoint uniquement en local :

    location ~ ^(/_synapse/admin) {
        allow 192.168.1.0/24;
        deny all;
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
    }

Et créer le serveur accessible uniquement en local également :

server {
   listen 3000;
   http2 on;

server_name localhost;

root /usr/share/webapps/synapse-admin/; index index.html;

location / { allow 192.168.1.0/24; deny all; } }

Profiter du débit maximal de sa Freebox Delta

Comment profiter du débit maximal de sa Freebox Delta

Pour espérer atteindre les 8Gbs avec la Freebox Delta, il faut être en FTTH PON. Si on est en Point a Point, c'est foutu. C'est vérifiable sur votre interface Freebox

Le port ethernet est bridé à 1Gpbs, il faut donc passer par le port SFP+.

Screenshot interface Freebox

Il faut donc acquérir une carte PCIe avec port SFP+ et un câble optique OM3 10Gbps. Trouvables pour une petite centaine d’euros. Il faut évidemment avoir un SSD capable d’assurer des débits d’écriture supérieur à 1,3 Go/s. Je suis dans un petit village d’à peine 250 habitants au fin fond de l’Auvergne, à 5km du NRA, donc très loin. Ping de 10ms, débit de ~7Gbps en download et 700Mbps en upload, la promesse est respectée.

Screenshot speedtest Nperf

Pages :