Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

SRDF Like – Guide projet IDEO‑LAB

Formalisation projet pour l’équipe : architecture, data model, orchestration DR, roadmap et phases de delivery.

Vision projet

Le projet SRDF Like vise un socle de réplication et de bascule orienté DB-first, asynchrone, observable, et pilotable depuis un Control Plane Django. La colonne vertébrale retenue est un pipeline Capture → Journal → Transport → Apply → Verify, avec un premier démarrage pragmatique sur PostgreSQL avant généralisation multi‑DB.

Site A · Primary
Source d’écriture · capture CDC · journal local durable · export des offsets
Site B · Standby
Transport async · apply transactionnel · verify intégrité · promotion en failover

Cadre cible

< 5 minRTO cible V1
< 10 s*RPO best effort avec alerte
99.9%SLO POC → pilote
DB‑FirstPostgreSQL en premier, puis MariaDB
* en asynchrone, le vrai ennemi n’est pas la latence brute mais le backlog et la capacité réelle de rattrapage.
Capture CDC Append-only journal mTLS Fencing
1.1 Base

Vision & objectifs

Contrat du projet, RTO/RPO, hypothèses réseau et tolérance explicite à la perte.

RTORPOSLO
1.2 Base

Périmètre V1

Données critiques, priorités DB, métadonnées DR, ce qui reste hors du scope initial.

DBMetadataV1
1.3 Moyen

Architecture globale

Pipeline SRDF-like moderne : capture, journal, transport async, apply, verify.

CDCJournalVerify
2.1 Moyen

Control Plane vs Data Plane

Séparation structurante entre pilotage Django et flux opérationnels Linux/DB.

DjangoAgentPlane
2.2 Moyen

Modes de réplication

Log shipping natif vs CDC logique, stratégie DB-first, montée vers multi-cibles.

WALLogicalMode
2.3 Moyen

Agent Linux local

Health, polling, collecte système, exécution d’actions, base de la remédiation.

LinuxPollingExec
3.1 Moyen

Control Plane Django

Modèles de contrôle, dashboard, orchestration, journaux d’actions et décisions.

DashboardActionsAPI
3.2 Structurant

Data Model V1

Sites, pairs, instances DB, events, health, actions, failover runs, replication state.

ModelsStateRunbook
3.3 Moyen

Observabilité & health

Lag, backlog, throughput, mismatch, ETA, health polling, alerting intelligent.

LagBacklogAlerting
4.1 Critique

Failover / Failback

États, fencing anti split-brain, promotion standby, bascule DNS/VIP, retour contrôlé.

PromoteFencingRunbook
4.2 Critique

Sécurité & split-brain

mTLS, least privilege, rotation clés/certs, journal chiffré, witness, coupure réseau.

mTLSWitnessACL
4.3 Moyen

Connecteurs techniques

PostgreSQL d’abord, MariaDB ensuite, puis filesync, Nginx/proxy et trafic utilisateur.

PostgreSQLMariaDBFilesync
5.1 Delivery

Roadmap & patches

POC, pilote, généralisation multi-DB, découpage en phases Django et infra.

POCPilotPatches
5.2 Moyen

Tests DR & validation

Failover mensuel, lien coupé, corruption logique, PITR, mesure RTO/RPO réels.

DRPITRValidation
5.3 Clarté

Positionnement produit

Ce que SRDF Like imite, ce qu’il simplifie, et les extensions futures réalistes.

SRDFPME/LabFuture
1.1 Vision & objectifs – contrat projet
1️⃣ Contrat du projet
  • Construire une solution Remote Data Facility Async adaptée à IDEO‑LAB.
  • Commencer en DB-first : les bases restent le cœur de la V1.
  • Garder une logique SRDF-like, mais modernisée autour d’un pipeline CDC.
  • Prévoir une architecture exploitable par une petite équipe, sans usine à gaz dès la phase 1.
2️⃣ Objectifs de niveau de service
IndicateurCibleRemarque
RTO2–5 minutespilotage runbook + promotion + bascule endpoint
RPObest effort, alerte < 10 sen async, dépend du backlog réel
SLO99.9% → 99.99%selon maturité POC / pilote / prod
Distanceillimitéemais débit, jitter et rattrapage comptent
3️⃣ Principe directeur
En asynchrone, le vrai ennemi est le retard de réplication accumulé, pas seulement la latence instantanée. Toute l’architecture doit donc piloter le backlog et non une vision naïve du réseau.
4️⃣ Hypothèses de démarrage
  • Deux sites : A primary et B standby.
  • Witness / quorum optionnel mais recommandé dès qu’on automatise.
  • Failover manuel en V1, puis semi-auto.
  • Protection contre erreurs logiques via PITR + base backups.
5️⃣ Message à formaliser dans le CDFC

Le guide n’est pas là pour “faire joli” : il doit verrouiller les invariants de design, éviter les ambiguïtés d’implémentation, et servir de support commun pour toi et tes collègues.

1.2 Périmètre V1 – données critiques et exclusions
1️⃣ Ce qui est obligatoire en phase 1
  • Bases de données : PostgreSQL, MariaDB/MySQL, puis autres moteurs si besoin.
  • Métadonnées DR : état réplication, checkpoints, journal, inventaire, état health.
  • Observabilité du pipeline : offsets, backlog, erreurs, retries.
  • Actioning : déclenchement d’actions sûres depuis le control plane.
2️⃣ Hors scope V1 immédiat
  • Object storage / uploads critiques.
  • Queues et streams type RabbitMQ / Kafka.
  • Caches Redis répliqués “de manière critique”.
  • Failback auto complet et non supervisé.
3️⃣ Principe de priorisation
NiveauContenuDécision
P0DB + health + state + actionsà livrer en premier
P1dashboard + failover manuel + auditphase pilote
P2multi-DB + filesync + proxyaprès stabilisation
P3extensions produitselon usage réel
Approche réaliste : mieux vaut une V1 très solide sur 1 moteur que 5 connecteurs à moitié fiables.
1.3 Architecture globale – pipeline CDC
1️⃣ Chaîne cible
Capture (CDC) -> Journal (append-only) -> Transport (ACK/retry) -> Apply (site B) -> Verify (integrity checks)
2️⃣ Capture
  • SQL : WAL / binlog / redo-log selon moteur.
  • NoSQL plus tard : oplog / change streams.
  • Contrainte : capture idempotente, ordonnée et replayable.
3️⃣ Journalisation
  • Stockage local séquentiel par segments.
  • Retention contrôlée.
  • Checkpoints côté apply.
  • Checksum par segment.
4️⃣ Transport
  • Protocole fiable avec ACK offset, retry et compression.
  • mTLS et authentification obligatoire.
  • Backpressure et multi-stream par table / shard / partition.
5️⃣ Apply + Verify
  • Apply transactionnel quand possible.
  • Rejeu sans doublon.
  • DDL vs DML cadré : DDL out-of-band au début.
  • Verify par checksum, rowcount et hash sampling.
Décision forte V1 : la simplicité passe avant la généralité. Le journal commun et les connecteurs universels viendront après le POC solide.
2.1 Control Plane vs Data Plane
PlaneResponsabilitésComposantsÀ ne pas mélanger
Control Planepilotage, inventory, health view, décisions, runbooks, UI, auditDjango, API, admin, scheduler, action queuene doit pas devenir le chemin de données critique
Data Planecapture, journal, transport, apply, verify, promotion standbyagents Linux, DB connectors, local journal, replication workersne doit pas dépendre du dashboard pour continuer à vivre
1️⃣ Pourquoi cette séparation est fondamentale
  • Évite que la supervision casse la réplication.
  • Permet de garder un control plane plus lent, plus riche, plus orienté produit.
  • Rend l’agent local autonome en cas de coupure réseau.
2️⃣ Règle d’architecture
Le control plane observe et décide. Le data plane exécute et tient la continuité. Cette séparation doit rester visible dans le code, les modèles et le déploiement.
2.2 Modes de réplication – choisir sans se tirer une balle dans le pied
1️⃣ Mode A – native log shipping
  • On envoie le journal natif du moteur au standby.
  • Rapide, robuste, performant.
  • Excellent choix pour PostgreSQL / MySQL dans un démarrage pragmatique.
  • Moins générique, plus dépendant du moteur.
2️⃣ Mode B – logical row-based CDC
  • On transporte des événements logiques INSERT / UPDATE / DELETE.
  • Plus générique, plus multi-cibles.
  • Plus complexe : ordering, drift de schéma, mapping de types.
3️⃣ Recommandation de lancement
Commencer par native log shipping PostgreSQL async, puis ajouter une couche CDC logique uniquement lorsqu’il faut généraliser multi‑DB ou multi-cibles.
4️⃣ Décision projet
ÉtapeModeBut
POCphysical streaming replicationprouver robustesse et runbook
Pilotenative + control planeoutillage et supervision
Généralisationconnecteurs CDCouvrir vers MariaDB et au-delà
2.3 Agent Linux local – cœur opérationnel du site
Agent = bras local du projet
  • Collecte l’état de la machine, de la DB locale et des services dépendants.
  • Expose un point de vérité local même si le control plane est loin.
  • Peut exécuter des actions sûres : promote, stop writer, reload service, fencing hooks.
Principes
  • Stateless autant que possible, mais cache local acceptable.
  • Idempotence sur les actions critiques.
  • Audit obligatoire de toute commande réellement exécutée.
Health & polling V1
SignalSourceUsage
DB reachablelocal connectorbase health primaire
replication lagDB statspromotion eligibility
disk / journal pressureOS metricsrisque backlog / rétention
service statesystemd / processdétection panne locale
Action execution V1
allowed_actions = [ "promote_standby", "pause_replication", "resume_replication", "reload_service", "switch_endpoint_hook", "apply_fencing_rule" ]

Aucune action shell “libre”. Toute action doit être déclarée, paramétrée, journalisée, et confirmée par policy.

Design système recommandé
  • Service systemd dédié.
  • Configuration signée / versionnée.
  • mTLS vers le control plane.
  • Queue locale légère pour exécutions différées.
L’agent ne doit jamais permettre une escalade shell incontrôlée. C’est un exécuteur borné, pas un tunnel root générique.
3.1 Control Plane Django – produit, orchestration et audit
1️⃣ Responsabilités du Control Plane
  • Inventaire des sites, pairs, agents, DB instances et endpoints.
  • Dashboard global : santé, backlog, état de réplication, alertes.
  • Runbooks et traces d’orchestration.
  • Historique d’actions et décisions opérateur.
2️⃣ Écrans V1 attendus
  • Overview cluster / pair.
  • Replication state detail.
  • Health timeline.
  • Action center avec confirmation.
3️⃣ API et logique métier
DomaineAPI / vueFinalité
Inventorysites, pairs, DBsbase de pilotage
Healthlast status, timelinedétection dérive
Actionsqueue + execution logtraçabilité complète
Failoverrunbook runsmesure et audit
Le Django app doit rester le centre de lisibilité du projet : si un collègue ouvre le dashboard, il doit comprendre immédiatement l’état global du SRDF Like.
3.2 Data Model V1 – squelette Django du projet
Objectif du data model

Ne pas modéliser tout le monde dès le jour 1. Il faut couvrir ce qui rend le système pilotable, observable et actionnable.

  • site topology
  • replication state
  • health measurements
  • action audit trail
  • failover lifecycle
Niveau de granularité
  • Un Site représente un lieu logique.
  • Un Pair relie A et B pour une réplication donnée.
  • Une DatabaseInstance décrit le moteur réel.
  • Les états et événements restent historisés.
ModelRôleChamps clés
SrdfSitesite logique A/B/witnessname, role, region, is_enabled
SrdfPairrelation primary/standbyprimary_site, standby_site, mode, target_rto, target_rpo
DatabaseInstanceinstance DB réelleengine, version, endpoint, port, site, status
ReplicationStateétat courant synthétiquelag_seconds, backlog_bytes, last_offset, state, is_eligible_for_promotion
HealthSamplemesures horodatéessampled_at, db_ok, service_ok, disk_ok, latency_ms
ActionExecutionaudit des actionsaction_type, status, requested_by, executed_by_agent, stdout_tail
FailoverRunrunbook métierstarted_at, ended_at, trigger, outcome, rto_seconds
AlertEventalerting et incidentsseverity, category, message, is_open
SrdfSite 1---n DatabaseInstance SrdfPair 1---1 primary_site SrdfPair 1---1 standby_site SrdfPair 1---n ReplicationState SrdfPair 1---n HealthSample SrdfPair 1---n FailoverRun FailoverRun 1---n ActionExecution

On garde des tables d’historique séparées des états courants pour ne pas mélanger lecture “dashboard” et analyse temporelle.

Évolutions prévues
  • MariaDB-specific state.
  • Filesync inventory and drift tracking.
  • Traffic switch objects for proxy / DNS / VIP.
  • Witness/quorum votes et fencing receipts.
Le data model doit rester extensible sans casser la V1. Évite les abstractions trop tôt, mais prépare des points d’extension propres.
3.3 Observabilité – le cœur de l’async
1️⃣ Métriques minimales
  • replication lag (seconds)
  • backlog size (bytes / segments)
  • throughput capture / transport / apply
  • error rate + retry count
  • checksum mismatch
  • estimated catch-up ETA
2️⃣ États de haut niveau
HEALTHY -> DEGRADED -> DISCONNECTED -> CATCHING_UP -> PROMOTED
3️⃣ Alerting V1
ConditionActionSens
lag > thresholdwarning alertla fenêtre RPO dérive
backlog growth > 0 sur fenêtre glissantedegradedla réplication ne rattrape plus
apply stalledcriticalrisque de standby inutilisable
checksum mismatchcritical + verify rundivergence potentielle
Le dashboard doit rendre visible non seulement le lag présent, mais aussi la tendance et le temps de retour à la normale.
4.1 Failover / Failback – states, runbook, sécurité opératoire
1. Confirm primary failure 2. Apply fencing to old primary 3. Verify standby backlog is acceptable 4. Promote standby 5. Switch endpoint (DNS / VIP / proxy) 6. Restart app connections if needed 7. Open failover run and record RTO

Le failover V1 est manuel assisté. L’objectif n’est pas l’automatisme spectaculaire, mais la fiabilité opérationnelle.

DéclencheurValidationDécision
primary losthealth + fencing possibleouvrir failover
standby caught up enoughlag <= policypromotion eligible
endpoint switch readydns/proxy hook readycut traffic
Failback
  • À traiter comme une opération séparée.
  • Jamais “retour automatique” en V1.
  • Rebuild propre de l’ancien primary avant retour de rôle.
Beaucoup de systèmes se plantent au failback. Il doit rester plus conservateur que le failover.
4.2 Sécurité, quorum et prévention du split-brain
1️⃣ Mesures minimales
  • mTLS site A ↔ site B.
  • Journal local chiffré au repos.
  • Rotation des clés / certificats.
  • Least privilege sur les comptes CDC et agents.
2️⃣ Split-brain
  • Couper l’accès du primary historique avant promotion B.
  • Fencing réseau : firewall / security group / ACL.
  • VIP / DNS redirigé seulement après fencing validé.
3️⃣ Witness / quorum

Optionnel au tout début, mais fortement recommandé dès qu’on veut aller vers du semi-auto. Son rôle : arbitrer et réduire le risque de double-primary.

4️⃣ Politique sécurité projet
SujetV1Ensuite
mTLSobligatoirepinning / rotation outillée
fencingnetwork rulesSTONITH si justifié
auditaction logstamper evidence
RBACroles Django simplesgranular policies
4.3 Connecteurs techniques – PostgreSQL, MariaDB, filesync, proxy
1️⃣ PostgreSQL – priorité absolue
  • Physical streaming replication async.
  • Lag via pg_stat_replication côté primary.
  • Replay delay via recovery functions côté standby.
  • PITR via archiving + base backup.
2️⃣ MariaDB – phase suivante
  • Brancher après stabilisation du socle V1.
  • Conserver le même contrat de health / action / state.
  • Éviter de tout abstraire avant d’avoir le premier connecteur vraiment robuste.
3️⃣ Filesync et trafic
  • Filesync utile pour fichiers applicatifs hors DB.
  • Nginx / proxy / VIP / DNS pour la bascule du trafic utilisateur.
  • Ces briques doivent s’intégrer au runbook, pas vivre séparément.
4️⃣ Décision d’implémentation
V1 order: 1. PostgreSQL connector 2. Health + dashboard 3. Manual failover run 4. MariaDB connector 5. Filesync 6. Proxy / endpoint switch automation
5.1 Roadmap V1 – delivery, phases et patchs
ÉtapeButContenu
POCprouver le modèle1 DB, capture → journal → transport → apply, dashboard lag/backlog, bascule manuelle
Pilote prodsécuriser le soclefencing, witness, failover semi-auto, tests DR récurrents
Généralisationouvrir la plateformeconnecteurs CDC par techno, normalisation du journal
Patch 1 -> Django setup base Patch 2 -> data model V1 Patch 3 -> agent registration + polling Patch 4 -> health & replication state Patch 5 -> dashboard V1 Patch 6 -> action execution Patch 7 -> failover plan manual Patch 8 -> PostgreSQL integration Patch 9 -> MariaDB integration Patch 10 -> filesync Patch 11 -> nginx / proxy switch Patch 12 -> tests & deployment hardening
Livrables attendus
  • Guide HTML partagé équipe.
  • Data model et vues dashboard lisibles.
  • Runbook failover écrit et testé.
  • POC PostgreSQL reproductible.
  • Mesure réelle RTO / RPO.
Ce guide doit devenir le document d’atterrissage de tout nouveau collègue sur le projet SRDF.
5.2 Tests DR & validation – non négociable
1️⃣ Plan minimal
  • Exercice failover mensuel.
  • Test lien coupé 1h avec rattrapage.
  • Test corruption logique type DROP TABLE pour valider PITR.
  • Mesure RTO/RPO réels et pas théoriques.
2️⃣ Critères de succès
TestOn valide quoi ?
failoverpromotion, bascule endpoint, retour service
network cutjournal local + replay + ETA
logical corruptionbackup/PITR hors réplication brute
dashboard audithistorique exploitable a posteriori
5.3 Positionnement par rapport à SRDF et extensions futures
1️⃣ Ce que SRDF Like reprend
  • Réplication distante primary / standby.
  • Logique de bascule et de reprise sur sinistre.
  • Exigence de cohérence opératoire et d’observabilité.
2️⃣ Ce qu’il simplifie
  • Approche logicielle ouverte au lieu d’un stack storage propriétaire.
  • DB-first et produit “PME / labo / infra pragmatique”.
  • Control plane Django lisible plutôt qu’une boîte noire pure infra.
3️⃣ Extensions futures
  • Auto-failover encadré par witness.
  • Connecteurs multi-moteurs supplémentaires.
  • Filesync avancé et cohérence objet.
  • Capacity planning et advisor réseau / backlog.
  • Policy engine et workflows d’exploitation avancés.
Le bon positionnement n’est pas “copier SRDF au bit près”, mais fournir un équivalent conceptuel moderne, pilotable, et bankable pour les environnements Linux / Django / DB.
SRDF Cheat‑sheet – lecture ultra rapide du projet
BlocRésumé
Goalremote async DB facility for IDEO‑LAB
V1 focusPostgreSQL first, manual failover, Django control plane
Pipelinecapture -> journal -> transport -> apply -> verify
Main riskbacklog growth and unsafe failover
Main protectionfencing + PITR + observability + tested runbooks
Main modelssites, pairs, db instances, replication state, health, actions, failover runs
POC PostgreSQL – démarrage réaliste
1️⃣ Invariants d’architecture
  • same major PostgreSQL version on both sites
  • stable endpoint for app traffic
  • time sync on both nodes
  • fast enough storage for WAL and data on standby
2️⃣ Succès du POC
  • standby connected
  • replay delay low when idle
  • manual promote works
  • dashboard shows lag / backlog / state
POC checklist: - configure primary and standby - verify replication stats - cut network and observe backlog - promote standby - switch endpoint - measure effective RTO and residual RPO