HeliosDB Replication Operations Guide
HeliosDB Replication Operations Guide
Version: 1.0 Last Updated: 2025-11-30
Quick Start
-- Enable replicationALTER SYSTEM SET primary_replication_enabled = on;
-- Add replicaSELECT pg_create_replica( replica_name => 'replica-1', host => '192.168.1.100', port => 5432);
-- Monitor replicationSELECT * FROM pg_stat_replication;Replication Setup
Configure Primary
-- Primary configurationALTER SYSTEM SET wal_level = replica, max_wal_senders = 10, wal_keep_size = '1GB', hot_standby = on;
SELECT pg_reload_conf();Configure Replica
-- Base backuppg_basebackup -h primary.example.com -D /var/lib/postgresql/data -U replication
-- Standby configurationstandby_mode = 'on'primary_conninfo = 'host=primary.example.com port=5432'Replication Modes
Asynchronous Replication
-- Default mode: faster, risk of data lossALTER SYSTEM SET synchronous_commit = off;SELECT pg_reload_conf();Synchronous Replication
-- Replicas must acknowledge writesALTER SYSTEM SET synchronous_commit = on, synchronous_standby_names = 'replica-1, replica-2';SELECT pg_reload_conf();Quorum-Based Replication
-- Quorum of replicas must acknowledgeALTER SYSTEM SET synchronous_commit = 'quorum', synchronous_standby_names = '2 (replica-1, replica-2, replica-3)';SELECT pg_reload_conf();Monitoring Replication
Replication Status
-- Replication metricsSELECT pid, usename, application_name, client_addr, state, write_lsn, flush_lsn, replay_lsn, sync_stateFROM pg_stat_replication;
-- Replication lagSELECT application_name, EXTRACT(EPOCH FROM (NOW() - backend_xmin_horizon)) as lag_secondsFROM pg_stat_replication;Failover & Recovery
Planned Failover
-- On primary: initiate switchoverSELECT pg_ctl_switchover('replica-1');
-- On new primary: promote replicaSELECT pg_ctl_promote('replica-1');Emergency Promotion
-- Promote replica immediatelySELECT pg_promote();
-- Restart as primarypg_ctl restart -D /dataConflict Resolution
During Multi-Master Replication
-- Configure conflict resolutionALTER DATABASE SET conflict_resolution_method = 'CLOUD_WINS', last_write_wins_field = 'updated_at';
-- Custom resolution functionCREATE FUNCTION resolve_conflict(local_row, remote_row)RETURNS record AS $$BEGIN IF local_row.version > remote_row.version THEN RETURN local_row; ELSE RETURN remote_row; END IF;END;$$ LANGUAGE plpgsql;Monitoring & Alerts
-- Replication health checkSELECT * FROM replication_health_check;
-- Lag monitoringCREATE ALERT replication_lag_alert AS WHEN (SELECT MAX(pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) / 1024 / 1024) FROM pg_stat_replication) > 100 -- 100MB lag THEN NOTIFY 'ops-team';Best Practices
- Monitor replication lag
- Use synchronous replication for critical data
- Plan for failover scenarios
- Test failover regularly
- Keep replicas in sync
- Monitor backup logs
Related Documentation: