Restore drills
Restore into a separate environment. Never use the first restore test as an experiment on production.
Order#
- Provision a clean host/network.
- Restore private configuration and keys.
- Restore PostgreSQL.
- Restore uploads.
- Restore Scylla if it is authoritative.
- Start Plainwire with public traffic blocked.
- Run health checks.
- Test account login, messages, attachments, roles, and calls.
- Compare expected counts and recent content.
- Only then consider traffic cutover.
PostgreSQL-only recovery#
When PLAINWIRE_MESSAGE_BACKEND=postgres, PostgreSQL plus uploads and secrets contain the durable application state.
Scylla-backed recovery#
When PLAINWIRE_MESSAGE_BACKEND=scylla, PostgreSQL alone is not a complete current message-history backup. Restore the Scylla schema and timeline data together with PostgreSQL recovery metadata.
Recovery objectives#
Document:
- RPO, how much data you can lose;
- RTO, how long recovery may take;
- who has backup credentials;
- where keys are stored;
- how DNS or load balancer cutover works.