Vai al contenuto

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 portalcfg da programma
  • [x] Pulizia della cartella di dump sul server di sviluppo:
cd /opt/postgres/
rm -rf ./dumpdir/ocmis

Trasferimento dump

  • [ ] Copia tramite sftp della cartella di dump da pg-ocmis-1 al 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