Abbiamo una configurazione di replica master-slave come segue.Come posso risolvere uno slave PostgreSQL 9.3 che non può mantenere il passo con il master?
Sul master:
postgresql.conf
ha replica configurato come segue (linea commentata tolto per brevità):
max_wal_senders = 1
wal_keep_segments = 8
Sul slave:
Stesso postgresql.conf
come sul master. recovery.conf
assomiglia a questo:
standby_mode = 'on'
primary_conninfo = 'host=master1 port=5432 user=replication password=replication'
trigger_file = '/tmp/postgresql.trigger.5432'
Quando questo è stato inizialmente messa a punto, abbiamo effettuato alcuni test semplici e confermato la replica stava lavorando. Tuttavia, quando abbiamo eseguito il caricamento iniziale dei dati, solo alcuni dati lo hanno reso allo slave.
registro dello schiavo è ora riempito con i messaggi che assomigliano a questo:
< 2015-01-23 23:59:47.241 EST >LOG: started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:47.241 EST >FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000F00000052 has already been removed
< 2015-01-23 23:59:52.259 EST >LOG: started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:52.260 EST >FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000F00000052 has already been removed
< 2015-01-23 23:59:57.270 EST >LOG: started streaming WAL from primary at F/52000000 on timeline 1
< 2015-01-23 23:59:57.270 EST >FATAL: could not receive data from WAL stream: ERROR: requested WAL segment 000000010000000F00000052 has already been removed
Dopo alcune analisi e aiutano sul canale #postgresql IRC, sono giunto alla conclusione che lo schiavo non riesce a tenere il passo con il maestro. La mia soluzione proposta è la seguente.
Sul master:
- Set
max_wal_senders=5
- Set
wal_keep_segments=4000
. Sì, lo so che è molto alto, ma mi piacerebbe monitorare la situazione e vedere cosa succede. Ho spazio sul maestro.
Sul slave:
- file di configurazione Salva nella directory di dati (vale a dire
pg_hba.conf pg_ident.conf postgresql.conf recovery.conf
) - Cancella la directory dei dati (
rm -rf /var/lib/pgsql/9.3/data/*
). Questo sembra essere richiesto dapg_basebackup
. - eseguire il seguente comando:
pg_basebackup -h master -D /var/lib/pgsql/9.3/data --username=replication --password
Mi sto perdendo qualcosa? C'è un modo migliore per aggiornare lo slave senza dover ricaricare tutti i dati?
Qualsiasi aiuto è molto apprezzato.
Hai davvero risposto alla tua stessa domanda - imposta wal_keep_segments abbastanza in alto da permettere allo schiavo di recuperare dopo uno scoppio di aggiornamenti. –
Che dire ricreare lo schiavo - la mia procedura proposta è valida? –