Migrazione Ocmis 2025-01: da Aruba ad Amazon RDS¶
Panoramica¶
Il progetto di gennaio 2025 ha portato il database Ocmis dall'infrastruttura on-premise di Aruba (cluster pg-ocmis-1/2/3) ad Amazon RDS. La migrazione e' stata eseguita in finestra programmata con pagina di manutenzione attiva sui frontend e blocco degli accessi esterni al database.
| Fase | Obiettivo |
|---|---|
| Premigrazione | Silenziamento monitoraggi, blocco traffico, stop servizi applicativi |
| Migrazione | Dump del DB, trasferimento, restore su RDS, cambio puntamenti, test |
| Post migrazione | Ripristino servizi, riattivazione cron e zabbix, spegnimento vecchi nodi |
| Day After | Rimozione dei nodi dismessi dai job di backup |
Premigrazione¶
Attivita' svolte prima dello stop operativo, per preparare l'ambiente alla migrazione ed evitare alert spuri o accessi al DB durante la finestra.
Silenziamento Zabbix lato server¶
Disabilitare il monitoraggio sulle macchine coinvolte per evitare allarmi durante lo stop:
- [x] www1
- [x] www2
- [x] web1
- [x] web2
- [x] pg-ocmis-1
- [x] pg-ocmis-2
- [x] pg-ocmis-3
Pagina di manutenzione su nginx¶
Abilitare la pagina statica di manutenzione sui frontend pubblici:
- [x] www1
- [x] www2
- [x] web1
- [x] web2
Blocco accessi e stop processi¶
- [x] Disabilitare i cron su
cron.es2000.it - [x] Chiudere le porte firewall 5432 e 6432 dall'esterno verso
pg-ocmis-1(accesso riservato al team di migrazione) - [x] Stop dei processi gestiti da
pm2: - [x] www1
- [x] www2
Migrazione¶
Fase operativa vera e propria: estrazione del database dal vecchio cluster, trasferimento sul server di sviluppo, restore verso RDS e cambio dei puntamenti applicativi.
Dump del DB Ocmis da pg-ocmis-1¶
sudo -i
cd /opt/postgres/
time /opt/postgres/daily_dump_db.sh auto ocmis directory
Lo script daily_dump_db.sh viene invocato in modalita' directory per produrre un dump parallelizzabile.
Preparazione area di staging su sviluppo¶
- [ ] Copia del
portalcfgda programma - [x] Pulizia della cartella di dump sul server di sviluppo:
cd /opt/postgres/
rm -rf ./dumpdir/ocmis
Trasferimento dump¶
- [ ] Copia tramite
sftpdella cartella di dump dapg-ocmis-1al server di sviluppo - [ ] Correzione dei permessi sulla cartella copiata:
chown -R postgres:postgres ./dumpdir/ocmis
Restore su RDS¶
Dal server di sviluppo, eseguire il restore del dump verso l'istanza RDS:
cd /opt/postgres/
./restore_db_from_dumpdir_to_rds.sh ocmis ocmis
Snapshot RDS¶
- [ ] Snapshot dell'istanza RDS a restore completato (baseline per eventuale rollback)
Cambio puntamenti DB sui server applicativi¶
Aggiornare la stringa di connessione su tutti i nodi applicativi, sia in ambiente beta che in produzione:
Ambiente beta - [ ] www-beta1 - [ ] www-beta2 - [ ] web-beta1 - [ ] web-beta2 - [ ] sso-beta1 - [ ] sso-beta2 - [ ] api-beta1 - [ ] api-beta2
Produzione - [ ] www1 - [ ] www2 - [ ] web1 - [ ] web2 - [ ] sso1 - [ ] sso2 - [ ] api1 - [ ] api2
Test connettivita' applicativa¶
- [ ] www1
- [ ] www2
- [ ] web1
- [ ] web2
Test funzionali su ambiente beta¶
Utilizzo del portale sui nodi *beta2 per validare i quattro servizi principali:
- [ ] sso
- [ ] api
- [ ] www
- [ ] web
Post migrazione¶
Ripristino della normale operativita' una volta validato il funzionamento su RDS.
Rimozione pagina di manutenzione¶
- [ ] www1
- [ ] www2
- [ ] web1
- [ ] web2
Riattivazione servizi pm2¶
Riavviare e testare i servizi applicativi:
- [ ] www1
- [ ] www2
Riattivazione automatismi¶
- [ ] Riattivare i cron
- [ ] Riabilitare zabbix sulle macchine:
- [ ] www1
- [ ] www2
- [ ] web1
- [ ] web2
Spegnimento vecchio cluster PostgreSQL¶
Dopo aver verificato che nessun servizio punta piu' al vecchio DB:
- [ ] pg-ocmis-1
- [ ] pg-ocmis-2
- [ ] pg-ocmis-3
Day After migrazione¶
Attivita' di pulizia del giorno successivo, a caldo verificato.
- [ ] Togliere i nodi
pg-ocmis-*dai job di backup (i backup sono ora responsabilita' di RDS via snapshot)
Note tecniche¶
Strumenti utilizzati¶
| Strumento | Ruolo |
|---|---|
daily_dump_db.sh |
Script di dump PostgreSQL in formato directory (parallelo) |
restore_db_from_dumpdir_to_rds.sh |
Script di restore verso istanza RDS |
sftp |
Trasferimento dump tra nodi |
| Amazon RDS snapshot | Baseline post-restore per rollback rapido |
pm2 |
Gestione processi Node.js sui frontend |
| Zabbix | Monitoraggio infrastruttura (silenziato in finestra) |
Criticita' e mitigazioni¶
- Porte 5432 e 6432 chiuse dall'esterno durante la finestra per evitare scritture concorrenti sul DB sorgente mentre e' in corso il dump.
- Pagina di manutenzione su tutti i frontend per prevenire richieste applicative durante il cambio puntamento.
- Snapshot RDS prima del cambio puntamenti come punto di ritorno certo.
- Test beta prima della produzione: il cambio puntamenti sui nodi
*-beta*viene validato con test funzionali prima di procedere con i nodi di produzione.
Perimetro applicativo coinvolto¶
I nodi che puntano al DB Ocmis sono divisi per area funzionale:
| Area | Nodi prod | Nodi beta |
|---|---|---|
| www (portale web pubblico) | www1, www2 | www-beta1, www-beta2 |
| web (area operatori) | web1, web2 | web-beta1, web-beta2 |
| sso (single sign-on) | sso1, sso2 | sso-beta1, sso-beta2 |
| api (servizi REST) | api1, api2 | api-beta1, api-beta2 |