ceph.conf, rsync), une checklist de jalons et des renvois vers JuiceFS S3, NFSv4.1 & rsync et le centre d’aide pour cadrer l’exploitation.
1. Cache client agressif sans budget disque. Un client_readahead élevé accélère la compilation distribuée mais gonfle les lectures anticipées sur l’APFS local ; sans corrélation avec les graphes MDS, les équipes interprètent à tort un goulet côté CPU alors que le SSD approche déjà le premier jalon critique.
2. Timeouts MDS mal calibrés. Un mds_session_timeout trop court provoque des reprises de session pendant les phases de linking Xcode ; trop long, il retient des capacités MDS après incident et retarde le basculement propre vers un pair sain.
3. rsync concurrent sur le même sous-arbre. Deux pipelines qui poussent des binaires vers le même chemin logique CephFS créent des fenêtres de cohérence ambiguës ; croisez cette lecture avec SeaweedFS & jalons disque pour harmoniser les plafonds réseau et les files d’attente.
Matrice décisionnelle : cache client, MDS, rsync et jalons 1 To / 2 To
Objectif : arbitrer latence perçue contre marge disque sur une grappe homogène de Mac mini M4 ; les valeurs numériques restent des ordres de grandeur à valider sur votre contrat WAN clustervps. Lisez la matrice de haut en bas : d’abord le comportement du client CephFS, ensuite la durée de vie des sessions MDS, enfin le couple débit rsync et pourcentages APFS observés sur volumes 1 To ou 2 To.
| Profil de charge | Cache client (readahead) | MDS (sessions) | rsync (débit · concurrence) | Jalons 1 To / 2 To |
|---|---|---|---|---|
| Builds Xcode parallèles | readahead modéré (quelques MiB) pour limiter l’ondée disque locale | timeouts médians, surveillance des reprises sur WAN | --bwlimit 6000–10000, une file active par tenant | 70 % : réduire workers ; 80 % : couper promotions ; 90 % : stopper rsync & auditer inodes |
| Caches dépendances partagés | readahead bas sur chemins chauds, plus haut sur archives immuables | tolérance légèrement plus longue pour limiter les reconnexions | 3000–8000, deux files sérialisées par préfixe | 70 % : décaler fenêtre ; 2 To : surveiller doubles écritures cross-tenant |
| Promotion d’artefacts lourds | readahead minimal le long du transfert | timeouts alignés sur la durée max d’un rsync unique | 8000–14000 + --partial-dir, jamais plus de deux rsync concurrents | 80 % : backoff exponentiel ; 90 % : ionice idle + file unique |
| Audit / observabilité | readahead quasi nul sur chemins témoins | timeouts courts pour détecter clients bloqués | dry-run hebdomadaire, un job | 70 % : alerter ; 1 To : prioriser purge locale avant nouvelle montée en charge |
Exemples exécutables : fragment ceph.conf et rsync plafonné
Placez ces extraits dans votre dépôt d’infrastructure versionné ; adaptez les chemins de secret et les noms de cluster avant déploiement sur les nœuds Mac mini M4.
[client]
client_readahead_max_bytes = 4194304
client_readahead_max_periods = 4
[mds]
mds_session_timeout = 600
mds_log_max_segments = 50
nice -n 10 ionice -c2 -n7 rsync -a --delete-delay \
--bwlimit=8192 --partial-dir=.rsync-partial --timeout=300 \
./DerivedData-export/ user@ceph-gw:/volumes/ci/artifacts/tenantA/
Verrous multi-projets : éviter la collision CI sur CephFS
Sur une grappe partagée, séparez physiquement ou logiquement les répertoires par produit, puis imposez un verrou d’écriture unique (fichier atomique, lease distant ou orchestrateur) avant toute promotion rsync vers CephFS. Pour les équipes qui combinent orchestration et état distant, prolongez la lecture avec Nomad, affinités & build lock et Pulumi, leases d’état & build lock afin d’aligner fenêtres de build et fenêtres de synchronisation.
Démarche opératoire en six étapes (preuve par ticket)
Chaque étape doit produire un artefact traçable (ticket, merge request ou capture Grafana) pour que les régions distantes rejouent le même scénario sans ambiguïté opérationnelle.
- Cartographier les chemins CephFS. Listez préfixes par tenant, droits POSIX attendus et volumes APFS locaux utilisés comme cache ou zone de staging.
- Baseliner le client. Déployez le fragment
ceph.confci-dessus, mesurez latence MDS et taux de reprise sur une charge synthétique représentative. - Encadrer rsync. Intégrez la commande plafonnée dans
launchdou votre scheduler CI ; journalisez débit réel vs--bwlimit. - Activer les jalons disque. Branchez
dfetdf -isur alertes 70 / 80 / 90 % avec playbooks documentés dans l’aide clustervps. - Tester la panne partielle. Coupez le lien WAN ~45 s pendant un rsync, observez reprise MDS et intégrité des fichiers partiels.
- Capacité & extension. Si le jalon 80 % devient récurrent sur 1 To, planifiez montée vers 2 To ou nœuds additionnels via l’achat avant d’augmenter encore le readahead client.
Checklist jalons disque & informations réutilisables
| Seuil APFS | SSD 1 To | SSD 2 To |
|---|---|---|
| 70 % | réduire readahead et parallélisme rsync | auditer espaces réservés et doubles pipelines |
| 80 % | couper promotions non critiques, conserver observabilité MDS | décaler fenêtres CephFS hors heures de pointe CI |
| 90 % | stopper nouveaux montages clients, purger caches locaux | évacuer artefacts + vérifier df -i avant toute remontée |
- Paramètre : viser au moins 12–15 % d’espace libre sur le volume hébergeant le staging rsync avant toute campagne nocturne inter-régions.
- Paramètre : conserver un écart d’au moins 30 % entre débit WAN contractuel et somme des
--bwlimitactifs pour absorber les bursts MDS. - Gouvernance : toute modification de
mds_session_timeoutou de préfixe CephFS est un changement d’API interne : double revue obligatoire.