livrare lot 2
This commit is contained in:
commit
8ecc78e729
763 changed files with 164593 additions and 0 deletions
117
backend/services/data-layer/didiCache/MIGRATION.md
Normal file
117
backend/services/data-layer/didiCache/MIGRATION.md
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
# Redis — migrat pe clusterul RAG (2026-04-22)
|
||||
|
||||
> **TL;DR**: DIDI folosește **clusterul Redis RAG** (3 noduri Sentinel + HAProxy VIP). Containerul local `didi-cache` din `production/docker-compose.yml` e **oprit dar păstrat** ca fallback rapid. Conexiunea e centralizată via `agent-v3/src/shared/redis/connection.ts`.
|
||||
|
||||
---
|
||||
|
||||
## Ce era aici (legacy)
|
||||
|
||||
`didi-cache` — un container Redis 7 Alpine standalone pe `didi-network` Docker. Single-node, fără HA, fără replicare. 512MB max memory, allkeys-lru eviction. Servea toate sesiunile pipeline + cache-ul framework + lock-uri workeri.
|
||||
|
||||
## Ce e acum
|
||||
|
||||
### Cluster Redis RAG (productie)
|
||||
|
||||
| Nod | Hostname | IP | Port Redis | Port Sentinel |
|
||||
|---|---|---|---|---|
|
||||
| rag01 (HAProxy VIP) | `rag01` | `10.11.50.101` | 6379 (replica) | 26379 |
|
||||
| **rag02 (master curent)** | `rag02` | `10.11.50.102` | **6379 (master)** | 26379 |
|
||||
| rag03 | `rag03` | `10.11.50.103` | 6379 (replica) | 26379 |
|
||||
|
||||
**Endpoint-uri pentru aplicații:**
|
||||
|
||||
| Scop | Endpoint |
|
||||
|---|---|
|
||||
| **WRITE** (auto-routing master) | `10.11.50.100:16379` |
|
||||
| READ (replica locală rag01) | `10.11.50.100:6379` |
|
||||
| Sentinel discovery | `10.11.50.100:16380` (master name `ragmaster`) |
|
||||
| HAProxy stats | `http://10.11.50.100:8404/stats` |
|
||||
|
||||
User ACL DIDI: `didi` cu prefix de chei `didi:*` și channels `didi.*`. Parola în vault-ul de credențiale `name='Redis ACL — didi'`.
|
||||
|
||||
ACL persistent via `--aclfile /data/users.acl` pe toate 3 nodurile (fix permanent 2026-04-22).
|
||||
|
||||
### Conexiune centralizată în cod
|
||||
|
||||
`agent-v3/src/shared/redis/connection.ts` — toate conexiunile ioredis trec prin `createRedisConnection(label)`. Zero `new Redis({...})` inline. Auto-reconnect cu retryStrategy, reconnectOnError pentru `READONLY` / `MASTERDOWN` (failover).
|
||||
|
||||
```typescript
|
||||
// Folosire în cod:
|
||||
import { createRedisConnection } from './shared/redis/connection';
|
||||
const redis = createRedisConnection('framework-cache');
|
||||
```
|
||||
|
||||
`didiFramework` are propria implementare în `src/lib/redis.ts`.
|
||||
|
||||
## Containerul local `didi-cache`
|
||||
|
||||
Definit în `production/docker-compose.yml`, configurat să pornească dar **manual oprit** ca parte din migrare. Volumul `didi-production-cache-data` e intact — datele anterioare (snapshot-uri RDB + AOF) sunt păstrate.
|
||||
|
||||
Status curent: `Exited`.
|
||||
|
||||
### De ce e păstrat?
|
||||
|
||||
- **Fallback rapid** dacă cluster RAG e indisponibil (oprit pentru maintenance, network issue, etc.)
|
||||
- Pentru a-l reactiva temporar, există un script switch:
|
||||
```bash
|
||||
backend/services/orchestration-layer/scripts/redis-switch.sh local redis
|
||||
```
|
||||
Asta rescrie `.env` și restart agent-v3 stack pentru a folosi `didi-cache` în loc de cluster.
|
||||
|
||||
## Switch rapid cluster ↔ local
|
||||
|
||||
Script: `backend/services/orchestration-layer/scripts/redis-switch.sh`
|
||||
|
||||
```bash
|
||||
# Folosește local fallback (didi-cache)
|
||||
./redis-switch.sh local redis
|
||||
|
||||
# Folosește clusterul (default)
|
||||
./redis-switch.sh cluster redis
|
||||
|
||||
# Status
|
||||
./redis-switch.sh status redis
|
||||
```
|
||||
|
||||
Credentialele cluster în sidecar `.cluster-credentials.env` (gitignored).
|
||||
|
||||
## Verificare cluster
|
||||
|
||||
```bash
|
||||
# Cu redis-cli din host (default user — pentru debug)
|
||||
redis-cli -h 10.11.50.100 -p 16379 -a <pwd> PING
|
||||
|
||||
# Cu user DIDI
|
||||
redis-cli -h 10.11.50.100 -p 16379 --user didi -a <pwd> ACL WHOAMI
|
||||
|
||||
# Sentinel master discovery
|
||||
redis-cli -h 10.11.50.100 -p 16380 SENTINEL get-master-addr-by-name ragmaster
|
||||
```
|
||||
|
||||
## Bootstrap automat la fresh deploy
|
||||
|
||||
`didiFramework` detectează la pornire dacă `didi:framework:manifest` lipsește în Redis și auto-rulează `POST /api/sync-redis` (56 chei populate în ~700ms). Zero intervenție manuală pe cluster nou.
|
||||
|
||||
## Chei Redis principale (orientativ)
|
||||
|
||||
| Pattern | Scop | TTL |
|
||||
|---|---|---|
|
||||
| `didi:framework:*` | Config framework (tehnici, ponderi, verdicts) | permanent |
|
||||
| `didi:config:{component}:v1:*` | Config componente, stage assignments tier-nested | permanent |
|
||||
| `didi:pipeline:{sessionId}:*` | Sesiuni pipeline (status, rezultate) | 7 zile |
|
||||
| `didi:queue:*` | Lock-uri workeri | 30s-5min |
|
||||
| `agent:result:*` | Rezultate intermediare | 7 zile |
|
||||
| `agent:media:*` | Cache media (transcript, vision) | 1 oră |
|
||||
|
||||
## Linkuri rapide
|
||||
|
||||
- Ghid utilizare cluster: `landingzone/redis-rag/README.md` (repo `git.finesynergy.eu/lucian/landingzone`)
|
||||
- Onboarding ACL user nou: `landingzone/redis-rag/CLAUDE_PROMPT.md`
|
||||
- HAProxy stats: `http://10.11.50.100:8404/stats`
|
||||
|
||||
## Status
|
||||
|
||||
- ✅ Migrare aplicată: 2026-04-22
|
||||
- ✅ User `didi` configurat cu prefix izolat
|
||||
- ✅ Container local păstrat ca fallback (oprit, volum intact)
|
||||
- ✅ Bootstrap framework automat la pornire
|
||||
Loading…
Add table
Add a link
Reference in a new issue