Replicatio non est tergum. Aut non? Hic est quomodo replicatio pigra ad recuperationem usi sumus per compendia casualiter delendo.
Replicatio database tergum instrumentum tuum non est (gitlab-ce
Replica dilata, data in mox 1,5 horas recuperavimus. Ecce quomodo fuit.
Punctum-in-vicis recuperatio cum PostgreSQL
PostgreSQL in munere aedificatum habet, quod statum database ad tempus determinatum reddit. Dicitur
Hoc pluma ut tergum pro frigido utimur, regulariter basim datorum tergum facimus et in archivo recondimus (in archivo GitLab habitant.
Quid differtur replicatio?
Replicatio dilata est applicatio mutationum WA cum mora. Id est, evenit hora X
, at cum dilatione apparebit in replica d
una hora X + d
.
Duae sunt 2 modi ad imaginem datorum physicorum in PostgreSQL: archivum restituendum et fluentem replicationem.
Quam constituere moratus tergum recuperatio
recovery.conf
. Exemplum:
standby_mode = 'on'
restore_command = '/usr/bin/envdir /etc/wal-e.d/env /opt/wal-e/bin/wal-e wal-fetch -p 4 "%f" "%p"'
recovery_min_apply_delay = '8h'
recovery_target_timeline = 'latest'
His uncinis tardam imaginem configuramus cum archivo restituto. Hic usus est restore_command
) ex archivo et mutationes applicabuntur post octo horas (recovery_min_apply_delay
). Replica vicissitudines in archivo observabit, ut ob botrum defectivum (recovery_target_timeline
).
С recovery_min_apply_delay
latency effusis replicatio constituere potes, sed duae foveae sunt cum replicatione foramina coniuncta, feedback calida parce, et sic porro. Archivum WA eos vitat.
parametri recovery_min_apply_delay
apparuit in PostgreSQL 9.3. In prioribus versionibus, replicatio tardata requirit complexionem pg_xlog_replay_pause(), pg_xlog_replay_resume()
) vel segmenta muralia in archivo pro mora durationis teneant.
Quomodo PostgreSQL facere?
Suus 'interesting videre quomodo PostgreSQL instrumenta piger restituat. Intueamur recoveryApplyDelay(XlogReaderState)
static bool
recoveryApplyDelay(XLogReaderState *record)
{
uint8 xact_info;
TimestampTz xtime;
long secs;
int microsecs;
/* nothing to do if no delay configured */
if (recovery_min_apply_delay <= 0)
return false;
/* no delay is applied on a database not yet consistent */
if (!reachedConsistency)
return false;
/*
* Is it a COMMIT record?
*
* We deliberately choose not to delay aborts since they have no effect on
* MVCC. We already allow replay of records that don't have a timestamp,
* so there is already opportunity for issues caused by early conflicts on
* standbys.
*/
if (XLogRecGetRmid(record) != RM_XACT_ID)
return false;
xact_info = XLogRecGetInfo(record) & XLOG_XACT_OPMASK;
if (xact_info != XLOG_XACT_COMMIT &&
xact_info != XLOG_XACT_COMMIT_PREPARED)
return false;
if (!getRecordTimestamp(record, &xtime))
return false;
recoveryDelayUntilTime =
TimestampTzPlusMilliseconds(xtime, recovery_min_apply_delay);
/*
* Exit without arming the latch if it's already past time to apply this
* record
*/
TimestampDifference(GetCurrentTimestamp(), recoveryDelayUntilTime,
&secs, µsecs);
if (secs <= 0 && microsecs <= 0)
return false;
while (true)
{
// Shortened:
// Use WaitLatch until we reached recoveryDelayUntilTime
// and then
break;
}
return true;
}
Solum versus est quod mora in temporis corporis indicatione rei gestae innixa est committendum (.xtime
). Ut videre potes, dilatio solum applicat ad committendum et non afficit alia monumenta - omnes mutationes directe applicantur, et committi dilatio est, sic mutationes tantum post figuram dilationem videbimus.
Quomodo ad imaginem piger uti pro notitia recuperationis
Dicamus nos habere botrum datorum in productione et imaginem cum mora octo horarum. Videamus quomodo notitia ad recuperandam utens exemplo
Cum intelleximus quaestionem,
SELECT pg_xlog_replay_pause();
Cum pausa, nullum periculum habuimus ut imaginem petitionis repeteret DELETE
. Utile est, si tempus opus est ut omnia instare.
Solum versus est quod tardae imaginis momentum ad instantiam pervenire debet DELETE
. Nos circiter tempus corporis remotionis cognovimus. Nos removimus recovery_min_apply_delay
et adiecit recovery_target_time
в recovery.conf
. Replica igitur ad tempus opportunum sine mora attingit;
recovery_target_time = '2018-10-12 09:25:00+00'
Cum indicatione temporis, melius est excessum minuere ne deesset. Vera, quo majus decrescunt, magis notitia amittimus. Iterum, si omittitur petitio DELETE
omnia rursus delebuntur et initium habebis (vel etiam frigus tergum pro PITR sume).
Repressimus instantiam Postgres tardatam et segmenta wal repetita sunt usque ad tempus praefinitum. Progressus in hac scaena investigando investigare potes:
SELECT
-- current location in WAL
pg_last_xlog_replay_location(),
-- current transaction timestamp (state of the replica)
pg_last_xact_replay_timestamp(),
-- current physical time
now(),
-- the amount of time still to be applied until recovery_target_time has been reached
'2018-10-12 09:25:00+00'::timestamptz - pg_last_xact_replay_timestamp() as delay;
Si indicatione temporis non mutat, restitutio perfecta est. Potes domicilii actiones recovery_target_action
Datorum in civitate prius fatis petentibus. Nunc potes, exempli gratia, data export. Notitiam pittacii remotam exportavimus omnesque nexus ad quaestiones et petitiones merge et ad datorum productionem transtulimus. Si damna magna sunt, simpliciter imaginem promovere potes et uti principali. Sed tunc omnes mutationes amittentur post momentum ad quod nos recuperavimus.
Praestat rem gestam IDs pro indicatione temporis uti. Utile est has IDs notare, exempli gratia, declarationes DDL (ut DROP TABLE
), ab usura log_statements = 'ddl'
. Si res id haberemus, acciperemus recovery_target_xid
et decurrerunt omnia ad rem ante petitionem DELETE
.
Recepto opus est valde simplex: omnes mutationes a removere recovery.conf
et sileo postgres. Mox octuagesimum horam iterum derivari debebit, et parati sumus ad futuras molestias.
Recuperatio Beneficia
Replica tardata, loco frigoris tergum, horas non habebis integrum ex archivo snapectum restituendi. Exempli gratia: quinque horas opus est ut totum 2 TB basi tergum. Et tunc adhuc debes adhibere totum WA cotidie ad statum desideratum recuperandum (in gravissimo casu).
Melior est retardata replicatio quam tergum frigidum dupliciter:
- Non opus est ut basis totius tergum ex archivo accipias.
- Est fixa segmenta octo-horarum fenestrarum muralium quae iteranda sunt.
Etiam constanter nos inspicimus si WAL PITRed esse potest, et cito corruptionem vel alias difficultates cum archivo WAL observare volumus, vigilantia ad imaginem retardati backlogum.
In hoc exemplo nobis 50 minuta ad restituendum sumpsit, hoc est, celeritas 110 GB ipsius WAL data per horas (in archivo adhuc erat.
Summarium: ubi utilis est retardata effigies (et ubi non)
Replicatio tardata utere ut primum auxilium, si data accidentaliter amittes et animadvertes hanc calamitatem intra figuram morari.
Sed memento: replicatio non est tergum.
Tergum et replicatio diversos usus habent. Frigidus tergum in manus veniet, si accidens te fecit DELETE
aut DROP TABLE
. Tergum ex frigore repositionis facimus et statum priorem mensae vel integrae datorum restituimus. Sed simul rogamus DROP TABLE
paene statim in omnibus replicationibus in botro laborantis repraesententur, ideo replicatio regularis hic non servabit. Ipsa replicatio datorum praesto servat, cum singulis servientibus locantur et onus distribuuntur.
Etiam cum rettulit effigiem, interdum re frigido in loco tuto egemus, si subito defectus centri notitiarum, damnum absconditum, aliave eventa quae statim non animadvertistis, egent. Hic ab una replicatione nullus est sensus.
illud. in
Source: www.habr.com