Configuration du peering¶
Guide pas-à-pas pour configurer le partage de cache entre deux instances Stream Fusion.
Prérequis¶
- Deux instances Stream Fusion accessibles mutuellement via HTTP(S)
PEER_MASTER_KEYconfiguré sur les deux instancesSECRET_API_KEYsur chaque instance
Étape 1 : Créer une PeerKey sur l'Instance A¶
Sur l'Instance A (celle qui partage son cache) :
- Allez sur
https://instance-a.example.com/admin/ - Authentifiez-vous avec
SECRET_API_KEY - Peer Keys → Créer une PeerKey
- Nommez-la (ex:
Instance-B) - Configurez le rate limiting
- Copiez immédiatement le
key_idet lesecret
Secret à usage unique
Le secret n'est affiché qu'une seule fois. Si vous le perdez, il faudra révoquer la clé et en recréer une.
Étape 2 : Créer une PeerInstance sur l'Instance B¶
Sur l'Instance B (celle qui importe le cache) :
- Allez sur
https://instance-b.example.com/admin/ - Peer Instances → Créer une PeerInstance
- Remplissez :
| Champ | Valeur |
|---|---|
| Nom | Instance-A (descriptif) |
| URL | https://instance-a.example.com |
| Key ID | Le key_id copié à l'étape 1 |
| Secret | Le secret copié à l'étape 1 |
| Actif | |
| Sync activé | |
| Cron | 0 */6 * * * (toutes les 6h) |
- Cliquez sur Tester la connexion pour vérifier
Étape 3 : Persistance et planification automatique¶
La PeerInstance est persistée dans la table PostgreSQL peer_instances avec son schedule cron. Au démarrage du worker Taskiq, la fonction seed_peer_schedules_from_db() lit toutes les PeerInstances actives depuis PostgreSQL et enregistre automatiquement leurs schedules dans Redis.
Cela signifie que :
- Les schedules survivent aux redémarrages sans reconfiguration via l'admin
- Les modifications de cron prennent effet au prochain démarrage du scheduler
- L'activation/désactivation (
sync_enabled) est lue depuis PG à chaque exécution (effet immédiat) - Aucune variable d'environnement n'est nécessaire pour la persistance
Modifiez le cron depuis le panneau d'administration → Peer Sync, ou directement dans la base de données.
Étape 4 (optionnel) : Peering bidirectionnel¶
Pour que l'Instance A importe aussi le cache de B, répétez les étapes 1-2 en inversant les rôles :
- Créez une PeerKey sur B pour A
- Créez une PeerInstance sur A pointant vers B
graph LR
A["Instance A"] -->|"Sync →"| B["Instance B"]
B -->|"Sync →"| A
style A fill:#311b92,color:#fff
style B fill:#1b5e20,color:#fff
Transfert de dump (DuckDB / Meilisearch)¶
En complément de la sync incrémentale, Stream Fusion supporte le transfert de snapshots complets de bases DuckDB et Meilisearch entre pairs.
Principe¶
Le transfert de dump permet à une instance de récupérer l'intégralité de la base DuckDB ou Meilisearch d'un pair, plutôt que de synchroniser uniquement le delta de torrents. C'est particulièrement utile pour :
- L'initialisation d'une nouvelle instance (pas besoin de rebuild DuckDB)
- La réplication complète de l'index Meilisearch d'un pair
- La synchronisation de la table
imdb_tmdb(mappings IMDB↔TMDB)
Flux¶
- L'instance source crée périodiquement des dumps (tâche cron
db_dump_create) - L'instance cible consulte les dumps disponibles via l'API peer
- Un token de téléchargement est échangé (HMAC-SHA256 + Fernet)
- Le dump est téléchargé et restauré via
db_dump_restore
Configuration¶
| Paramètre | Description |
|---|---|
db_dump_schedule_enabled |
Active la création automatique de dumps |
db_dump_cron |
Fréquence de création des dumps (défaut: 0 4 * * 0 pour DuckDB/Meilisearch) |
db_dump_create_pg_cron |
Fréquence de dump PostgreSQL (défaut: 0 3 * * * quotidien) |
Depuis l'admin¶
- Allez sur
/admin/meta→ section Dumps - Cliquez sur Peer Dumps pour lister les dumps disponibles chez les pairs
- Sélectionnez un dump et cliquez sur Pull pour lancer le transfert
- La progression est visible en temps réel
Voir la page Sauvegarde DuckDB pour les détails techniques sur la création et la restauration des dumps.
Monitoring¶
Depuis le panneau d'administration → Peer Sync :
- Démarrer une sync manuellement
- Arrêter une sync en cours
- Purger les données importées d'un pair
- Voir les logs de synchronisation
Dépannage¶
La connexion échoue
- Vérifiez que les deux instances sont accessibles mutuellement
- Vérifiez le firewall
- Utilisez le bouton Tester la connexion dans l'admin
Erreurs 429 (rate limiting)
- Augmentez
rate_limitetrate_windowdans la PeerKey - Ou diminuez la fréquence du cron de sync
Données non indexées
- Vérifiez que Meilisearch fonctionne
- Consultez les logs du Taskiq Worker